Подтвердить что ты не робот

Как исправить IncompatibleClassChangeError во время Android Jackson Parsing, используя аннотации в Android Lollipop?

В нашем приложении для Android мы используем аннотации Jackson в наших моделях:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "templateType", visible = true, defaultImpl = Default.class)
@JsonSubTypes({
@Type(value = Subclass1.class, name = "tType1")

Мы анализируем ответ json с помощью mapper объекта, где klass - это класс объектного файла, который мы хотим проанализировать: getObjectMapper().readValue(json, klass);

В редких сценариях на устройствах Lollipop на Android мы получаем

java.lang.IncompatibleClassChangeError: Couldn't find com.fasterxml.jackson.annotation.JsonSubTypes$Type.value.

Полная трассировка стека:

com.fasterxml.jackson.annotation.JsonSubTypes$Type.value
at libcore.reflect.AnnotationAccess.toAnnotationInstance(AnnotationAccess.java:659)
at java.lang.Class.getDeclaredAnnotations(Class.java:891)
at com.fasterxml.jackson.databind.introspect.AnnotatedClass.resolveClassAnnotations(AnnotatedClass.java:300)
at com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector.isIgnorableType(JacksonAnnotationIntrospector.java:103)
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.isIgnorableType(BeanDeserializerFactory.java:844)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:401)
at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:305)
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.createContextual(CollectionDeserializer.java:151)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer.findDeserializer(StdDeserializer.java:634)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:438)
at com.fasterxml.jackson.databind.jsontype.impl.TypeDeserializerBase._findDeserializer(TypeDeserializerBase.java:173)
at com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer._deserializeTypedForId(AsPropertyTypeDeserializer.java:99)
at com.fasterxml.jackson.databind.deser.AbstractDeserializer.deserializeWithType(AbstractDeserializer.java:106)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:464)
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:98)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:295)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:2888)
4b9b3361

Ответ 1

Это подтвержденная ошибка на некоторых устройствах Samsung. К сожалению, исправления пока нет, но этот поток Android Bug Tracker, скорее всего, придумает исправление (если возможно):

https://code.google.com/p/android/issues/detail?id=172339