Repository: olingo-odata4 Updated Branches: refs/heads/master 8b4947b86 -> 4768048fb
[OLINGO-590] Fix: Single value navigation properties with null values will be correctly deserialized Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/f6fa1eec Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/f6fa1eec Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/f6fa1eec Branch: refs/heads/master Commit: f6fa1eeca738e744375357a5fd223534ba1d17e7 Parents: 8b4947b Author: Christian Holzer <[email protected]> Authored: Wed Mar 11 17:19:42 2015 +0100 Committer: Christian Holzer <[email protected]> Committed: Thu Mar 12 16:52:19 2015 +0100 ---------------------------------------------------------------------- .../json/ODataJsonDeserializer.java | 3 ++- .../json/ODataDeserializerDeepInsertTest.java | 20 +++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f6fa1eec/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializer.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializer.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializer.java index 492c586..6892aff 100644 --- a/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializer.java +++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializer.java @@ -250,7 +250,8 @@ public class ODataJsonDeserializer implements ODataDeserializer { EntitySetImpl inlineEntitySet = new EntitySetImpl(); inlineEntitySet.getEntities().addAll(consumeEntitySetArray(edmNavigationProperty.getType(), jsonNode)); link.setInlineEntitySet(inlineEntitySet); - } else if (!jsonNode.isArray() && !jsonNode.isValueNode() && !edmNavigationProperty.isCollection()) { + } else if (!jsonNode.isArray() && (!jsonNode.isValueNode() || jsonNode.isNull()) + && !edmNavigationProperty.isCollection()) { link.setType(ODataLinkType.ENTITY_NAVIGATION.toString()); if (!jsonNode.isNull()) { Entity inlineEntity = consumeEntityNode(edmNavigationProperty.getType(), (ObjectNode) jsonNode); http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f6fa1eec/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataDeserializerDeepInsertTest.java ---------------------------------------------------------------------- diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataDeserializerDeepInsertTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataDeserializerDeepInsertTest.java index 417e371..f2a65cd 100644 --- a/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataDeserializerDeepInsertTest.java +++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataDeserializerDeepInsertTest.java @@ -121,7 +121,25 @@ public class ODataDeserializerDeepInsertTest extends AbstractODataDeserializerTe throw e; } } - + + @Test + public void expandedToOneValidNullValue() throws Exception { + String entityString = + "{\"PropertyInt16\":32767," + + "\"NavPropertyETAllPrimOne\":null" + + "}"; + InputStream stream = new ByteArrayInputStream(entityString.getBytes()); + EdmEntityType edmEntityType = edm.getEntityType(new FullQualifiedName("Namespace1_Alias", "ETTwoPrim")); + final Entity entity = OData.newInstance().createDeserializer(ODataFormat.JSON).entity(stream, edmEntityType); + + assertEquals(1, entity.getNavigationLinks().size()); + final Link link = entity.getNavigationLinks().get(0); + + assertEquals("NavPropertyETAllPrimOne", link.getTitle()); + assertNull(link.getInlineEntity()); + assertNull(link.getInlineEntitySet()); + } + @Test(expected = DeserializerException.class) public void expandedToOneInvalidStringValue() throws Exception { String entityString =
