-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Closed
Milestone
Description
Version: 2.9.9
When I create an ArrayNode
and use ArrayNode#addAll
to add elements containing a raw null
element as follows:
final List<ObjectNode> nodes = Arrays.asList(null, JsonNodeFactory.instance.objectNode());
final ArrayNode arrayNode = JsonNodeFactory.instance.arrayNode();
arrayNode.addAll(nodes);
Calling ArrayNode#deepCopy
and ArrayNode#toString
on such arrayNode
will throw NullPointerException
s.
However, if we add the nodes using ArrayNode#add
as follows:
final ArrayNode arrayNode = JsonNodeFactory.instance.arrayNode();
arrayNode.add((JsonNode) null);
arrayNode.add(JsonNodeFactory.instance.objectNode());
Calling ArrayNode#deepCopy
and ArrayNode#toString
on such arrayNode
will NOT throw any NullPointerException
s.
This is because ArrayNode#add
converts any raw null
to a NullNode
object:
jackson-databind/src/main/java/com/fasterxml/jackson/databind/node/ArrayNode.java
Lines 306 to 313 in f75b304
public ArrayNode add(JsonNode value) | |
{ | |
if (value == null) { // let's not store 'raw' nulls but nodes | |
value = nullNode(); | |
} | |
_add(value); | |
return this; | |
} |
But ArrayNode#addAll
does not. But It should, otherwise how does one deepCopy an arrayNode that contains null
raw elements?
Metadata
Metadata
Assignees
Labels
No labels