Skip to content

Commit

Permalink
Fixing {Object,Array}Deserializer's illegal nullValue
Browse files Browse the repository at this point in the history
  • Loading branch information
sethp-jive committed Oct 3, 2013
1 parent ee67dee commit 3e3a30e
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 23 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ target
.settings

# IDEA
.idea
*.iml
*.ipr
*.iws
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@
*/
@SuppressWarnings("serial")
public class JsonNodeDeserializer
extends BaseNodeDeserializer
extends BaseNodeDeserializer<JsonNode>
{
/**
* Singleton instance of generic deserializer for {@link JsonNode}.
* Only used for types other than JSON Object and Array.
*/
private final static JsonNodeDeserializer instance = new JsonNodeDeserializer();

protected JsonNodeDeserializer() { }
protected JsonNodeDeserializer() { super(JsonNode.class); }

/**
* Factory method for accessing deserializer for specific node type
Expand All @@ -44,6 +44,11 @@ public static JsonDeserializer<? extends JsonNode> getDeserializer(Class<?> node
/**********************************************************
*/

@Override
public JsonNode getNullValue() {
return NullNode.getInstance();
}

/**
* Implementation that will produce types of any JSON nodes; not just one
* deserializer is registered to handle (in case of more specialized handler).
Expand All @@ -70,13 +75,13 @@ public JsonNode deserialize(JsonParser jp, DeserializationContext ctxt)
*/

final static class ObjectDeserializer
extends BaseNodeDeserializer
extends BaseNodeDeserializer<ObjectNode>
{
private static final long serialVersionUID = 1L;

protected final static ObjectDeserializer _instance = new ObjectDeserializer();

protected ObjectDeserializer() { }
protected ObjectDeserializer() { super(ObjectNode.class); }

public static ObjectDeserializer getInstance() { return _instance; }

Expand All @@ -96,13 +101,13 @@ public ObjectNode deserialize(JsonParser jp, DeserializationContext ctxt)
}

final static class ArrayDeserializer
extends BaseNodeDeserializer
extends BaseNodeDeserializer<ArrayNode>
{
private static final long serialVersionUID = 1L;

protected final static ArrayDeserializer _instance = new ArrayDeserializer();

protected ArrayDeserializer() { }
protected ArrayDeserializer() { super(ArrayNode.class); }

public static ArrayDeserializer getInstance() { return _instance; }

Expand All @@ -123,12 +128,12 @@ public ArrayNode deserialize(JsonParser jp, DeserializationContext ctxt)
* implementations
*/
@SuppressWarnings("serial")
abstract class BaseNodeDeserializer
extends StdDeserializer<JsonNode>
abstract class BaseNodeDeserializer<T extends JsonNode>
extends StdDeserializer<T>
{
public BaseNodeDeserializer()
public BaseNodeDeserializer(Class<T> vc)
{
super(JsonNode.class);
super(vc);
}

@Override
Expand All @@ -142,16 +147,6 @@ public Object deserializeWithType(JsonParser jp, DeserializationContext ctxt,
return typeDeserializer.deserializeTypedFromAny(jp, ctxt);
}

@Override
public JsonNode getNullValue() {
return NullNode.getInstance();
}

@Override
public Class<?> handledType() {
return JsonNode.class;
}

/*
/**********************************************************
/* Overridable methods
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
package com.fasterxml.jackson.databind.node;

import java.io.*;

import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.BaseMapTest;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;

/**
* This unit test suite tries to verify that JsonNode-based trees
Expand Down Expand Up @@ -115,4 +116,24 @@ public void testNullHandling() throws Exception
assertNotNull(n);
assertTrue(n.isNull());
}

final static class CovarianceBean {
ObjectNode _object;
ArrayNode _array;

public void setObject(ObjectNode n) { _object = n; }
public void setArray(ArrayNode n) { _array = n; }
}

public void testNullHandlingCovariance() throws Exception
{
String JSON = "{\"object\" : null, \"array\" : null }";
CovarianceBean bean = objectMapper().readValue(JSON, CovarianceBean.class);

ObjectNode on = bean._object;
assertNull(on);

ArrayNode an = bean._array;
assertNull(an);
}
}

0 comments on commit 3e3a30e

Please sign in to comment.