Jackson no puede cargar tipos JDK7 en Android

Utilizo Jackson 2.8.2 en mi aplicación de Android para deserializar JSON. La deserialización en sí funciona, sin embargo, puedo ver la siguiente advertencia en el registro de la aplicación:

Unable to load JDK7 types (annotations, java.nio.file.Path): no Java7 support added 

Proguard está deshabilitado, sourceCompatibility está establecido en '1.7' . ¿Cómo puedo agregar estos tipos aparentemente faltantes a mi compilación?

En primer lugar, su configuración sourceCompatibility de 1.7 no significa nada sobre el entorno de ejecución, por lo que no tiene ningún impacto en este mensaje.

Esto es puramente una cuestión de " estas clases existen en el momento Jackson inicializa esta clase " – y no existen en alguna combinación. Y tal vez eso está bien, si no usas la clase java.nio.file.Path de Java 7, entonces no deberías tener ningún problema con este mensaje de advertencia . Debido a que es de lo que trata esta advertencia, Jackson apoya la serialización / deserialización de esta clase específica.

En cuanto a los java.nio.* Android java.nio.* , No tiene paquetes java.nio.file.* En cualquier nivel de API. Eso explica por qué ves el mensaje de advertencia. Y puesto que no puedes usar java.nio.file.Path todos modos, esto no es ni siquiera un problema real aparte de un molesto mensaje de registro.

Si este mensaje es molesto, siempre puede establecer el nivel de Java Util Logging para el registrador com.fasterxml.jackson.databind.ext.Java7Support para ser nivel ERROR . A continuación, ya no verá estos mensajes de advertencia .

Más información sobre el mensaje registrado:

En Jackson 2.8.x esta compatibilidad con la clase java.nio.file.Path Java 7 se carga desde el mismo archivo JAR y está incorporada. Una clase comprueba dinámicamente si otro puede cargar sin error:

 Class<?> cls = Class.forName("com.fasterxml.jackson.databind.ext.Java7SupportImpl"); 

La única manera de que esto pueda fallar es si algo está eliminando esta clase del conjunto final de clases. O una de estas clases de las que depende es falta en el tiempo de ejecución:

 import java.beans.ConstructorProperties; import java.beans.Transient; import java.nio.file.Path; 

Si alguno de ellos falta, entonces verá el mensaje de error registrado. Así que uno de estos es cierto:

  • Una o más de las clases de JDK 7 faltan en tiempo de ejecución
  • com.fasterxml.jackson.databind.ext.Java7SupportImpl falta en tiempo de ejecución

Ninguna de esas causas son culpa de Jackson, son algo acerca de su entorno de tiempo de ejecución (es decir, no existen en la API de Android), o Proguard stripping clases que no cree que se utilizan.

Ver también:

  • Android import java.nio.file.Files; no se puede resolver
  • ¿Cómo utilizar el paquete java.nio.file en android?
  • Paquetes de Android java.nio
  • Java.lang.NoClassDefFoundError $$ inlined $ forEach $ lambda $ 1 en Kotlin
  • Variable 'runnable' debe ser inicializado
  • Kotlin uso perezoso
  • ¿Cómo hacer referencia a otras opiniones en Anko DSL?
  • Constantes en Kotlin - ¿cuál es la forma recomendada de crearlas?
  • Cualquier mejora de código en la adición / sustitución de fragmentos
  • Vinculación de datos de Android y Kotlin
  • Muchos módulos pequeños, o pocos módulos grandes para el mejor rendimiento de la construcción?
  • Edición de Kotlin Gradle
  • Clase de Kotlin NoClassDefFoundError falla
  • ¿Hay alguna manera de reutilizar una instancia de Job?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.