You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2014/10/20 06:38:11 UTC
git commit: [OLINGO-422] type guessing in client deserializer also
for collections
Repository: olingo-odata4
Updated Branches:
refs/heads/master 096946a70 -> 35f24e98f
[OLINGO-422] type guessing in client deserializer also for collections
Change-Id: Id5b6e6b6b41f310d2ed3a3227824a55d5497f18a
Signed-off-by: Michael Bolz <mi...@sap.com>
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/35f24e98
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/35f24e98
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/35f24e98
Branch: refs/heads/master
Commit: 35f24e98f07410756beb8c80aba97aac4eecc565
Parents: 096946a
Author: Klaus Straubinger <kl...@sap.com>
Authored: Fri Oct 17 09:15:48 2014 +0200
Committer: Michael Bolz <mi...@sap.com>
Committed: Mon Oct 20 06:30:18 2014 +0200
----------------------------------------------------------------------
.../olingo/fit/tecsvc/client/BasicITCase.java | 1 -
.../core/serialization/JsonDeserializer.java | 42 ++++++++++----------
2 files changed, 21 insertions(+), 22 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35f24e98/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 dc34f65..4d55013 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
@@ -170,7 +170,6 @@ public class BasicITCase extends AbstractBaseTestITCase {
}
}
- @Ignore("wrong value type!")
@Test
public void readEntity() throws IOException {
final ODataEntityRequest<ODataEntity> request = getClient().getRetrieveRequestFactory()
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35f24e98/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonDeserializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonDeserializer.java
index e1b8b1f..0258edc 100755
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonDeserializer.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/serialization/JsonDeserializer.java
@@ -25,6 +25,7 @@ import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
+
import org.apache.commons.lang3.StringUtils;
import org.apache.olingo.commons.api.Constants;
import org.apache.olingo.commons.api.data.Annotatable;
@@ -53,6 +54,7 @@ import org.apache.olingo.commons.core.data.LinkImpl;
import org.apache.olingo.commons.core.data.LinkedComplexValueImpl;
import org.apache.olingo.commons.core.data.PropertyImpl;
import org.apache.olingo.commons.core.edm.EdmTypeInfo;
+
import java.io.IOException;
import java.io.InputStream;
import java.util.AbstractMap.SimpleEntry;
@@ -243,35 +245,20 @@ public class JsonDeserializer implements ODataDeserializer {
private Map.Entry<ODataPropertyType, EdmTypeInfo> guessPropertyType(final JsonNode node) {
ODataPropertyType type;
- EdmTypeInfo typeInfo = null;
+ String typeExpression = null;
if (node.isValueNode() || node.isNull()) {
type = ODataPropertyType.PRIMITIVE;
-
- EdmPrimitiveTypeKind kind = EdmPrimitiveTypeKind.String;
- if (node.isShort()) {
- kind = EdmPrimitiveTypeKind.Int16;
- } else if (node.isInt()) {
- kind = EdmPrimitiveTypeKind.Int32;
- } else if (node.isLong()) {
- kind = EdmPrimitiveTypeKind.Int64;
- } else if (node.isBoolean()) {
- kind = EdmPrimitiveTypeKind.Boolean;
- } else if (node.isFloat()) {
- kind = EdmPrimitiveTypeKind.Single;
- } else if (node.isDouble()) {
- kind = EdmPrimitiveTypeKind.Double;
- } else if (node.isBigDecimal()) {
- kind = EdmPrimitiveTypeKind.Decimal;
- }
- typeInfo = new EdmTypeInfo.Builder().setTypeExpression(kind.getFullQualifiedName().toString()).build();
+ typeExpression = guessPrimitiveTypeKind(node).getFullQualifiedName().toString();
} else if (node.isArray()) {
type = ODataPropertyType.COLLECTION;
+ if (node.has(0) && node.get(0).isValueNode()) {
+ typeExpression = "Collection(" + guessPrimitiveTypeKind(node.get(0)) + ')';
+ }
} else if (node.isObject()) {
if (node.has(Constants.ATTR_TYPE)) {
type = ODataPropertyType.PRIMITIVE;
- typeInfo = new EdmTypeInfo.Builder().
- setTypeExpression("Edm.Geography" + node.get(Constants.ATTR_TYPE).asText()).build();
+ typeExpression = "Edm.Geography" + node.get(Constants.ATTR_TYPE).asText();
} else {
type = ODataPropertyType.COMPLEX;
}
@@ -279,9 +266,22 @@ public class JsonDeserializer implements ODataDeserializer {
type = ODataPropertyType.EMPTY;
}
+ final EdmTypeInfo typeInfo = typeExpression == null ? null :
+ new EdmTypeInfo.Builder().setTypeExpression(typeExpression).build();
return new SimpleEntry<ODataPropertyType, EdmTypeInfo>(type, typeInfo);
}
+ private EdmPrimitiveTypeKind guessPrimitiveTypeKind(final JsonNode node) {
+ return node.isShort() ? EdmPrimitiveTypeKind.Int16 :
+ node.isInt() ? EdmPrimitiveTypeKind.Int32 :
+ node.isLong() ? EdmPrimitiveTypeKind.Int64 :
+ node.isBoolean() ? EdmPrimitiveTypeKind.Boolean :
+ node.isFloat() ? EdmPrimitiveTypeKind.Single :
+ node.isDouble() ? EdmPrimitiveTypeKind.Double :
+ node.isBigDecimal() ? EdmPrimitiveTypeKind.Decimal :
+ EdmPrimitiveTypeKind.String;
+ }
+
protected void populate(final Annotatable annotatable, final List<Property> properties,
final ObjectNode tree, final ObjectCodec codec)
throws IOException, EdmPrimitiveTypeException {