Existing instance of a local/anonymous Class cannot be updated (original) (raw)
When using readerForUpdating with an existing object, Jackson fails with:
Cannot deserialize Class mypackage.MyClass$1 (of type local/anonymous) as a Bean
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.isPotentialBeanType(BeanDeserializerFactory.java:883)
at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:137)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:414)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:349)
at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:264)
Version information
2.10.3
To Reproduce
package mypackage;
public class MyClass {
public static void main(int[] args) {
Object resultObject = new Object() {
int value;
}
new ObjectMapper().readerForUpdating(resultObject).readValue("{\"value\": 2}");
}
}
Expected behavior
Since Jackson is not required to construct an instance of the anonymous class, it should be able to populate the fields on the existing object.
Investigation shows that the method
public Object deserialize(JsonParser p, DeserializationContext ctxt, Object bean) throws IOException
in com.fasterxml.jackson.databind.deser.BeanDeserializer doesn't use ValueInstantiator _valueInstantiator field.
So can it be made optional when you're updating an existing instance?