Skip to content

MismatchedInputException: Cannot deserialize instance of com.fasterxml.jackson.databind.node.ObjectNode out of VALUE_NULL token #3056

@Stexxen

Description

@Stexxen

When using readerForUpdating and updating an existing objectNode to a null Node this exception is triggered

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `com.fasterxml.jackson.databind.node.ObjectNode` out of VALUE_NULL token
 at [Source: UNKNOWN; line: -1, column: -1]

	at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:59)
	at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1468)
	at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1242)
	at com.fasterxml.jackson.databind.DeserializationContext.handleUnexpectedToken(DeserializationContext.java:1148)
	at com.fasterxml.jackson.databind.deser.std.JsonNodeDeserializer$ObjectDeserializer.deserialize(JsonNodeDeserializer.java:107)
	at com.fasterxml.jackson.databind.deser.std.JsonNodeDeserializer$ObjectDeserializer.deserialize(JsonNodeDeserializer.java:82)
	at com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer.updateObject(JsonNodeDeserializer.java:361)
	at com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer.updateObject(JsonNodeDeserializer.java:373)
	at com.fasterxml.jackson.databind.deser.std.JsonNodeDeserializer$ObjectDeserializer.deserialize(JsonNodeDeserializer.java:120)
	at com.fasterxml.jackson.databind.deser.std.JsonNodeDeserializer$ObjectDeserializer.deserialize(JsonNodeDeserializer.java:82)
	at com.fasterxml.jackson.databind.ObjectReader._bindAndClose(ObjectReader.java:2081)
	at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1696)
	at com.fasterxml.jackson.databind.ObjectReader.readValue(ObjectReader.java:1711)

Version information
Jackson : 2.11.4
Java : openjdk-15.0.2

To Reproduce

  @Test
  void test() throws IOException {

    ObjectMapper objectMapper = new ObjectMapper();

    ObjectNode node = objectMapper.createObjectNode();
    node.set("test", objectMapper.createObjectNode());

    ObjectNode update = objectMapper.createObjectNode();
    update.set("test", NullNode.getInstance());

    ObjectReader objectReader = objectMapper.readerForUpdating(node);
    ObjectNode afterUpdateNode = objectReader.readValue(update, ObjectNode.class);

  }

Expected behavior
In the code above node starts as

{
  "test": {}
}

and updated with the object update containing

{
  "test": null
}

after the update is applied afterUpdateNode should contain the following

{
  "test": null
}

But instead the above exception is raised. This looks to be same as #2325 but that was closed by the originator

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions