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);
