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?
- ¿Debo cancelar la suscripción al utilizar rxbinding?
- Clases de datos Kotlin y tipos anulables
- Mejora del análisis de Java / Kotlin JSON
- Usar kotlin con ContentResolver causó una excepción de IllegalArgumentException
- Kotlin: Recopilación incremental con Gradle
- Sala de pruebas de unidad y LiveData
- Varargs Kotlin interoperabilidad Java no funciona correctamente
- Extensiones de Kotlin Android y fragmento retenido
- No se puede acceder a los componentes internos desde la fuente de prueba con Android
- Experimental JUnit apoyo en Android + Kotlin no funciona
- Gradle dependencia entre tareas
- Diseño sintético y personalizado de Kotlin en DialogFragment
- Kotlin para Android. tostada
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
- Android muestra sólo mp3 con ACTION_GET_CONTENT
- Android: Desactiva la rotación de la pantalla cuando la pantalla sea más pequeña que x