Repository: olingo-odata4
Updated Branches:
  refs/heads/master 570f4317c -> dbf7fd386


OLINGO-898: making sure the  payload correctly deserializes the extended entity


Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/dbf7fd38
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/dbf7fd38
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/dbf7fd38

Branch: refs/heads/master
Commit: dbf7fd386c1f9294fc3ab631d8e7787bcbf5eceb
Parents: 570f431
Author: Ramesh Reddy <[email protected]>
Authored: Mon Mar 21 12:11:28 2016 -0500
Committer: Ramesh Reddy <[email protected]>
Committed: Mon Mar 21 13:33:20 2016 -0500

----------------------------------------------------------------------
 .../json/ODataJsonDeserializer.java             |  6 ++--
 .../tecsvc/provider/EntityTypeProvider.java     |  7 +++++
 .../json/ODataJsonDeserializerEntityTest.java   | 30 ++++++++++++++++++++
 3 files changed, 41 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/dbf7fd38/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 da57309..67f961f 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
@@ -389,17 +389,19 @@ public class ODataJsonDeserializer implements 
ODataDeserializer {
     link.setTitle(navigationPropertyName);
     final ExpandTreeBuilder childExpandBuilder = (expandBuilder != null) ?
         expandBuilder.expand(edmNavigationProperty) : null;
+        EdmEntityType derivedEdmEntityType = (EdmEntityType)getDerivedType(
+            edmNavigationProperty.getType(), jsonNode);
         if (jsonNode.isArray() && edmNavigationProperty.isCollection()) {
           link.setType(Constants.ENTITY_SET_NAVIGATION_LINK_TYPE);
           EntityCollection inlineEntitySet = new EntityCollection();
           inlineEntitySet.getEntities().addAll(
-              consumeEntitySetArray(edmNavigationProperty.getType(), jsonNode, 
childExpandBuilder));
+              consumeEntitySetArray(derivedEdmEntityType, jsonNode, 
childExpandBuilder));
           link.setInlineEntitySet(inlineEntitySet);
         } else if (!jsonNode.isArray() && (!jsonNode.isValueNode() || 
jsonNode.isNull())
             && !edmNavigationProperty.isCollection()) {
           link.setType(Constants.ENTITY_NAVIGATION_LINK_TYPE);
           if (!jsonNode.isNull()) {
-            Entity inlineEntity = 
consumeEntityNode(edmNavigationProperty.getType(), (ObjectNode) jsonNode,
+            Entity inlineEntity = consumeEntityNode(derivedEdmEntityType, 
(ObjectNode) jsonNode,
                 childExpandBuilder);
             link.setInlineEntity(inlineEntity);
           }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/dbf7fd38/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/EntityTypeProvider.java
----------------------------------------------------------------------
diff --git 
a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/EntityTypeProvider.java
 
b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/EntityTypeProvider.java
index 71c576d..c2397c4 100644
--- 
a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/EntityTypeProvider.java
+++ 
b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/EntityTypeProvider.java
@@ -55,6 +55,8 @@ public class EntityTypeProvider {
   public static final FullQualifiedName nameETKeyNav = new 
FullQualifiedName(SchemaProvider.NAMESPACE, "ETKeyNav");
   public static final FullQualifiedName nameETKeyPrimNav = new 
FullQualifiedName(SchemaProvider.NAMESPACE,
       "ETKeyPrimNav");
+  public static final FullQualifiedName nameETKeyPrimNavDerived = new 
FullQualifiedName(SchemaProvider.NAMESPACE,
+      "ETKeyPrimNavDerived");
   public static final FullQualifiedName nameETKeyNavCont = new 
FullQualifiedName(SchemaProvider.NAMESPACE,
       "ETKeyNavCont");
   public static final FullQualifiedName nameETTwoKeyNavCont = new 
FullQualifiedName(SchemaProvider.NAMESPACE,
@@ -333,6 +335,11 @@ public class EntityTypeProvider {
           .setNavigationProperties(
               Arrays.asList(
                   PropertyProvider.navPropertyETKeyPrimNavOne_ETKeyPrimNav));
+    } else if (entityTypeName.equals(nameETKeyPrimNavDerived)) {
+      return new CsdlEntityType()
+      .setName("ETKeyPrimNavDerived")
+      .setBaseType(nameETKeyPrimNav)
+      
.setProperties(Arrays.asList(PropertyProvider.propertyBoolean_NotNullable));
     } else if (entityTypeName.equals(nameETKeyNavCont)) {
       return new CsdlEntityType()
           .setName("ETKeyNavCont")

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/dbf7fd38/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerEntityTest.java
----------------------------------------------------------------------
diff --git 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerEntityTest.java
 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerEntityTest.java
index 48dc870..8ebf598 100644
--- 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerEntityTest.java
+++ 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerEntityTest.java
@@ -37,6 +37,7 @@ import java.util.List;
 import org.apache.olingo.commons.api.Constants;
 import org.apache.olingo.commons.api.data.ComplexValue;
 import org.apache.olingo.commons.api.data.Entity;
+import org.apache.olingo.commons.api.data.EntityCollection;
 import org.apache.olingo.commons.api.data.Link;
 import org.apache.olingo.commons.api.data.Property;
 import org.apache.olingo.commons.api.data.ValueType;
@@ -250,6 +251,35 @@ public class ODataJsonDeserializerEntityTest extends 
AbstractODataDeserializerTe
         false));
   }  
   
+  @Test
+  public void extendedEntityProperty() throws Exception {
+    final String payload = "{\n" + 
+        "   \"@odata.context\":\"$metadata#ETKeyPrimNav/$entity\",\n" + 
+        "   \"@odata.metadataEtag\":\"W/metadataETag\",\n" + 
+        "   \"@odata.etag\":\"W/32767\",\n" + 
+        "   \"PropertyInt16\":32767,\n" + 
+        "   \"PropertyString\":\"string\",\n" + 
+        "   \"NavPropertyETKeyPrimNavOne\":\n" + 
+        "      {\n" + 
+        "         
\"@odata.type\":\"#olingo.odata.test1.ETKeyPrimNavDerived\",\n" + 
+        "         \"PropertyInt16\":32767,\n" + 
+        "         \"PropertyString\":\"First Resource - first\",\n" + 
+        "         \"PropertyBoolean\":true\n" + 
+        "      }\n" + 
+        "   \n" + 
+        "}";
+    final Entity result = deserialize(payload, "ETKeyPrimNav");
+    Assert.assertNotNull(result);
+    Link navProperty = result.getNavigationLink("NavPropertyETKeyPrimNavOne");
+    Assert.assertNotNull(navProperty);
+    Entity e = navProperty.getInlineEntity();
+    Assert.assertNotNull(e);
+    Assert.assertEquals("olingo.odata.test1.ETKeyPrimNavDerived", e.getType());
+    Assert.assertEquals(new Short((short)32767), 
e.getProperty("PropertyInt16").getValue());
+    Assert.assertEquals("First Resource - first", 
e.getProperty("PropertyString").getValue());
+    Assert.assertEquals(true, e.getProperty("PropertyBoolean").getValue());
+  }
+  
   private Property getCVProperty(ComplexValue cv, String name) {
     for (Property p : cv.getValue()) {
       if (p.getName().equals(name)) {

Reply via email to