Repository: olingo-odata4
Updated Branches:
  refs/heads/master a16a16841 -> f55205561


[OLINGO-975] Olingo client sends incorrect types for collection members

Signed-off-by: Christian Amend <[email protected]>


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

Branch: refs/heads/master
Commit: 173f0d78ad0b5388ee75d744e91e7694b9da9671
Parents: a16a168
Author: i050510 <[email protected]>
Authored: Thu Apr 27 14:17:50 2017 +0530
Committer: Christian Amend <[email protected]>
Committed: Thu Apr 27 13:00:35 2017 +0200

----------------------------------------------------------------------
 .../olingo/fit/tecsvc/client/BasicITCase.java   | 30 ++++++++++++++++++
 .../OdataTypesInBaseAndDerivedTypes.json        | 33 ++++++++++++++++++++
 .../core/serialization/JsonDeserializer.java    |  3 --
 3 files changed, 63 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/173f0d78/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java
----------------------------------------------------------------------
diff --git 
a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java 
b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java
index 87dc3c3..1e5cce3 100644
--- a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/BasicITCase.java
@@ -1574,4 +1574,34 @@ public class BasicITCase extends 
AbstractParamTecSvcITCase {
     assertNull(entity.getProperty(PROPERTY_COMP_TWO_PRIM).getComplexValue().
         get(PROPERTY_COMP_TWO_PRIM).getComplexValue());
   }
+  
+  @Test
+  public void testOLINGO975() throws ODataDeserializerException {
+    EdmMetadataRequest request = 
getClient().getRetrieveRequestFactory().getMetadataRequest(SERVICE_URI);
+    assertNotNull(request);
+    setCookieHeader(request);    
+    
+    ODataRetrieveResponse<Edm> response = request.execute();
+    saveCookieHeader(response);
+    assertEquals(HttpStatusCode.OK.getStatusCode(), response.getStatusCode());
+
+    Edm edm = response.getBody();
+    
+    EdmEnabledODataClient odataClient = 
ODataClientFactory.getEdmEnabledClient(SERVICE_URI, edm, null);
+    final InputStream input = Thread.currentThread().getContextClassLoader().
+        getResourceAsStream("OdataTypesInBaseAndDerivedTypes.json");
+    ClientEntity entity = odataClient.getReader().readEntity(input, 
ContentType.JSON);
+    assertEquals("NavPropertyETTwoPrimMany", 
entity.getNavigationLinks().get(0).getName());
+    assertNotNull(entity.getNavigationLinks().get(0).asInlineEntitySet());
+    assertEquals(2, 
entity.getNavigationLinks().get(0).asInlineEntitySet().getEntitySet().getEntities().size());
+    assertEquals(3, 
entity.getNavigationLinks().get(0).asInlineEntitySet().getEntitySet().getEntities().get(0).
+        getProperties().size());
+    assertEquals(1, 
entity.getNavigationLinks().get(0).asInlineEntitySet().getEntitySet().getEntities().get(1).
+        getProperties().size());
+    assertEquals("olingo.odata.test1.ETBase", 
entity.getNavigationLinks().get(0).asInlineEntitySet().getEntitySet().
+        getEntities().get(0).getTypeName().toString());
+    assertEquals("olingo.odata.test1.ETBase", 
entity.getNavigationLinks().get(0).asInlineEntitySet().getEntitySet().
+        getEntities().get(1).getTypeName().toString());
+    assertEquals("olingo.odata.test1.ETAllPrim", 
entity.getTypeName().toString());
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/173f0d78/fit/src/test/resources/OdataTypesInBaseAndDerivedTypes.json
----------------------------------------------------------------------
diff --git a/fit/src/test/resources/OdataTypesInBaseAndDerivedTypes.json 
b/fit/src/test/resources/OdataTypesInBaseAndDerivedTypes.json
new file mode 100644
index 0000000..88ae6b5
--- /dev/null
+++ b/fit/src/test/resources/OdataTypesInBaseAndDerivedTypes.json
@@ -0,0 +1,33 @@
+{
+  "@odata.context": "$metadata#ESAllPrim/$entity",
+  "@odata.metadataEtag": "W/\"e5db7a43-370a-44d7-9600-9f0443e6e351\"",
+  "PropertyInt16": 32767,
+  "PropertyString": "First Resource - positive values",
+  "PropertyBoolean": true,
+  "PropertyByte": 255,
+  "PropertySByte": 127,
+  "PropertyInt32": 2147483647,
+  "PropertyInt64": 9223372036854775807,
+  "PropertySingle": 17900,
+  "PropertyDouble": -179000,
+  "PropertyDecimal": 34,
+  "PropertyBinary": "ASNFZ4mrze8=",
+  "PropertyDate": "2012-12-03",
+  "PropertyDateTimeOffset": "2012-12-03T07:16:23Z",
+  "PropertyDuration": "PT6S",
+  "PropertyGuid": "01234567-89ab-cdef-0123-456789abcdef",
+  "PropertyTimeOfDay": "03:26:05",
+  "[email protected]": 
"#Collection(olingo.odata.test1.ETTwoPrim)",
+  "NavPropertyETTwoPrimMany": [
+    {
+      "@odata.type": "olingo.odata.test1.ETBase",
+      "PropertyInt16": -365,
+      "PropertyString": "Test String2",
+      "AdditionalPropertyString_5": "ABC"
+    },
+    {
+      "@odata.type": "olingo.odata.test1.ETBase",
+      "AdditionalPropertyString_5": "ABC"
+    }
+  ]
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/173f0d78/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/JsonDeserializer.java
----------------------------------------------------------------------
diff --git 
a/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/JsonDeserializer.java
 
b/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/JsonDeserializer.java
index 3691d8b..3e06443 100644
--- 
a/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/JsonDeserializer.java
+++ 
b/lib/client-core/src/main/java/org/apache/olingo/client/core/serialization/JsonDeserializer.java
@@ -333,9 +333,6 @@ public class JsonDeserializer implements ODataDeserializer {
           values.add(child.asText());
         }
       } else if (child.isContainerNode()) {
-        if (child.has(Constants.JSON_TYPE)) {
-          ((ObjectNode) child).remove(Constants.JSON_TYPE);
-        }
         final Object value = fromComplex((ObjectNode) child, codec);
         valueType = ValueType.COLLECTION_COMPLEX;
         values.add(value);

Reply via email to