-
Notifications
You must be signed in to change notification settings - Fork 123
Closed
Milestone
Description
Consider following field annotated with YearMonth deserializer:
class MyClass {
@JsonSerialize(using = YearMonthSerializer.class)
@JsonDeserialize(using = YearMonthDeserializer.class)
private final YearMonth period;
}
It looks to impossible to deserialize in such a way when running your app as named (java9) module. You will get:
java.lang.reflect.InaccessibleObjectException: Unable to make private com.fasterxml.jackson.datatype.jsr310.deser.YearMonthDeserializer() accessible: module com.fasterxml.jackson.datatype.jsr310 does not "opens com.fasterxml.jackson.datatype.jsr310.deser" to module com.fasterxml.jackson.databind
at java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:340) ~[?:?]
at java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:280) ~[?:?]
at java.lang.reflect.Constructor.checkCanSetAccessible(Constructor.java:189) ~[?:?]
at java.lang.reflect.Constructor.setAccessible(Constructor.java:182) ~[?:?]
at com.fasterxml.jackson.databind.util.ClassUtil.checkAndFixAccess(ClassUtil.java:934) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.util.ClassUtil.findConstructor(ClassUtil.java:568) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.util.ClassUtil.createInstance(ClassUtil.java:550) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.deserializerInstance(DefaultDeserializationContext.java:229) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.findDeserializerFromAnnotation(BasicDeserializerFactory.java:2099) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.constructCreatorProperty(BasicDeserializerFactory.java:1019) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory._addExplicitPropertyCreator(BasicDeserializerFactory.java:634) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory._addExplicitAnyCreator(BasicDeserializerFactory.java:661) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory._addDeserializerConstructors(BasicDeserializerFactory.java:411) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory._constructDefaultValueInstantiator(BasicDeserializerFactory.java:283) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.findValueInstantiator(BasicDeserializerFactory.java:224) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.buildBeanDeserializer(BeanDeserializerFactory.java:220) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:143) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:414) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:349) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:264) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.DeserializationContext.findContextualValueDeserializer(DeserializationContext.java:458) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.createContextual(CollectionDeserializer.java:181) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.deser.std.CollectionDeserializer.createContextual(CollectionDeserializer.java:26) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.DeserializationContext.handlePrimaryContextualization(DeserializationContext.java:665) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.resolve(BeanDeserializerBase.java:508) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:293) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:491) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:4713) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4522) ~[jackson-databind-2.11.4.jar:?]
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3333) ~[jackson-databind-2.11.4.jar:?]
at a.b.c.JsonLoader.load(JsonLoader.java:32) ~[abc-1.11.15-SNAPSHOT.jar:?]
The reason for the exception seems is that YearMonthDeserializer is located in jackson-datatype-jsr310
module and has private default constructor. There is an attempt to access that constructor by ClassUtil.checkAndFixAccess
which is located in jackson-databind
module. Since jackson-datatype-jsr310
does not opens that for reflection the call fails and desrialization is not possible.
Possible solutions would be change the access to constructor from private to public or open that class for reflection to jackson-databind
Metadata
Metadata
Assignees
Labels
No labels