-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Closed
Milestone
Description
Search before asking
- I searched in the issues and found nothing similar.
Describe the bug
When deserializing a tree of JsonNode
s, Jackson causes a NPE.
The ArrayNode where it fails is likely the one created this way in Kotlin:
tree.set<ObjectNode>("connectUiConfig", ObjectNode(factory, mapOf(
"assetMetadataFilters" to ArrayNode(factory, ddbModel.systemData?.ui?.myOtherModel?.map { it ->
MyOtherModelClass(...)
.let { jsonMapper.valueToTree<ObjectNode>(it) }
})
)))
Which means, in ArrayNode(..., content)
, the content is null.
Version Information
2.15.2
Reproduction
tree.set<ObjectNode>("connectUiConfig",
ObjectNode(factory, mapOf(
"assetMetadataFilters" to ArrayNode(..., null)
))
))
jsonMapper.treeToValue(tree, MyModel::class.java)
Where MyModel
would be an appropriate class.
Expected behavior
-
Maybe
ArrayNode
should not accept null as a content? -
Jackson should fail gracefully, with a proper error message
-
Optionally, it could just create an empty array node in such situation, for those who prefer robustness over validity.
Additional context
com.fasterxml.jackson.databind.JsonMappingException: (was java.lang.NullPointerException) (through reference chain: com.mycompany.myapp.api.tenants.TenantApiGetModel["connectUiConfig"])
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:402) ~[tenants-http-api.jar:?]
at com.fasterxml.jackson.databind.JsonMappingException.wrapWithPath(JsonMappingException.java:361) ~[tenants-http-api.jar:?]
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.wrapAndThrow(BeanDeserializerBase.java:1853) ~[tenants-http-api.jar:?]
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:572) ~[tenants-http-api.jar:?]
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:439) ~[tenants-http-api.jar:?]
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1409) ~[tenants-http-api.jar:?]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:352) ~[tenants-http-api.jar:?]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:185) ~[tenants-http-api.jar:?]
at com.fasterxml.jackson.databind.deser.DefaultDeserializationContext.readRootValue(DefaultDeserializationContext.java:323) ~[tenants-http-api.jar:?]
at com.fasterxml.jackson.databind.ObjectMapper._readValue(ObjectMapper.java:4801) ~[tenants-http-api.jar:?]
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2974) ~[tenants-http-api.jar:?]
at com.fasterxml.jackson.databind.ObjectMapper.treeToValue(ObjectMapper.java:3438) ~[tenants-http-api.jar:?]
at com.mycompany.myapp.api.SomeApiGetModelKt.from(SomeApiGetModel.kt:107) ~[tenants-http-api.jar:?]
Caused by: java.lang.NullPointerException
at com.fasterxml.jackson.databind.node.ArrayNode.elements(ArrayNode.java:251) ~[tenants-http-api.jar:?]
at com.fasterxml.jackson.databind.node.NodeCursor$ArrayCursor.<init>(NodeCursor.java:161) ~[tenants-http-api.jar:?]
at com.fasterxml.jackson.databind.node.NodeCursor$ObjectCursor.startArray(NodeCursor.java:228) ~[tenants-http-api.jar:?]
at com.fasterxml.jackson.databind.node.TreeTraversingParser.nextToken(TreeTraversingParser.java:118) ~[tenants-http-api.jar:?]
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:425) ~[tenants-http-api.jar:?]
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1409) ~[tenants-http-api.jar:?]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:352) ~[tenants-http-api.jar:?]
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:185) ~[tenants-http-api.jar:?]
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:545) ~[tenants-http-api.jar:?]
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:570) ~[tenants-http-api.jar:?]
... 76 more
Metadata
Metadata
Assignees
Labels
No labels