You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ch...@apache.org on 2015/04/04 19:05:44 UTC

[38/50] [abbrv] olingo-odata4 git commit: [OLINGO-603] Action Parameter deserialization based on type kind

[OLINGO-603] Action Parameter deserialization based on type kind


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

Branch: refs/heads/OLINGO-549-ODataV4-JPA
Commit: ef6ed4e3efea2464faa5c08bdffad6f50bf2cccd
Parents: 26be7d2
Author: Christian Amend <ch...@apache.org>
Authored: Wed Apr 1 10:18:52 2015 +0200
Committer: Christian Amend <ch...@apache.org>
Committed: Wed Apr 1 14:29:02 2015 +0200

----------------------------------------------------------------------
 .../commons/api/edm/constants/EdmTypeKind.java  |  2 +-
 .../api/deserializer/DeserializerException.java |  4 +++-
 .../json/ODataJsonDeserializer.java             | 20 ++++++++++++++++----
 .../server-core-exceptions-i18n.properties      |  2 ++
 .../core/edm/provider/EdmTypeImplTest.java      |  4 ++--
 5 files changed, 24 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ef6ed4e3/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/constants/EdmTypeKind.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/constants/EdmTypeKind.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/constants/EdmTypeKind.java
index bf24673..b55ec16 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/constants/EdmTypeKind.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/constants/EdmTypeKind.java
@@ -23,6 +23,6 @@ package org.apache.olingo.commons.api.edm.constants;
  */
 public enum EdmTypeKind {
 
-  UNDEFINED, PRIMITIVE, ENUM, DEFINITION, COMPLEX, ENTITY, NAVIGATION, ACTION, FUNCTION, SYSTEM
+  PRIMITIVE, ENUM, DEFINITION, COMPLEX, ENTITY, NAVIGATION, ACTION, FUNCTION
 
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ef6ed4e3/lib/server-api/src/main/java/org/apache/olingo/server/api/deserializer/DeserializerException.java
----------------------------------------------------------------------
diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/deserializer/DeserializerException.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/deserializer/DeserializerException.java
index 8ccb253..1989df1 100644
--- a/lib/server-api/src/main/java/org/apache/olingo/server/api/deserializer/DeserializerException.java
+++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/deserializer/DeserializerException.java
@@ -45,7 +45,9 @@ public class DeserializerException extends ODataTranslatedException {
     /** parameter: navigationPropertyName */NAVIGATION_PROPERTY_NOT_FOUND, 
     /** parameter: annotationName */INVALID_ANNOTATION_TYPE, 
     /** parameter: annotationName */INVALID_NULL_ANNOTATION, 
-    /** parameter: binding link */INVALID_ENTITY_BINDING_LINK;
+    /** parameter: binding link */INVALID_ENTITY_BINDING_LINK, 
+    /** parameter: action parameter name */INVALID_ACTION_PARAMETER_TYPE, 
+    /** parameter: parameterName */ INVALID_NULL_PARAMETER;
 
     @Override
     public String getKey() {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ef6ed4e3/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 74c73c8..b9fe770 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
@@ -215,13 +215,17 @@ public class ODataJsonDeserializer implements ODataDeserializer {
       ParameterImpl parameter = new ParameterImpl();
       parameter.setName(name);
       JsonNode jsonNode = node.get(name);
-      if (jsonNode == null) {
+      if (jsonNode == null || jsonNode.isNull()) {
         if (!edmParameter.isNullable()) {
-          // TODO: new message key.
           throw new DeserializerException("Non-nullable parameter not present or null",
-              DeserializerException.MessageKeys.INVALID_NULL_PROPERTY, name);
+              DeserializerException.MessageKeys.INVALID_NULL_PARAMETER, name);
         }
-      } else {
+      }
+
+      switch (edmParameter.getType().getKind()) {
+      case PRIMITIVE:
+      case DEFINITION:
+      case ENUM:
         Property consumePropertyNode =
             consumePropertyNode(edmParameter.getName(), edmParameter.getType(), edmParameter.isCollection(),
                 edmParameter.isNullable(), edmParameter.getMaxLength(), edmParameter.getPrecision(), edmParameter
@@ -231,6 +235,14 @@ public class ODataJsonDeserializer implements ODataDeserializer {
         parameter.setValue(consumePropertyNode.getValueType(), consumePropertyNode.getValue());
         parameters.add(parameter);
         node.remove(name);
+        break;
+      case COMPLEX:
+      case ENTITY:
+        throw new DeserializerException("Entity an complex parameters currently not Implemented",
+            DeserializerException.MessageKeys.NOT_IMPLEMENTED);
+      default:
+        throw new DeserializerException("Invalid type kind " + edmParameter.getType().getKind().toString()
+            + " for action parameter: " + name, DeserializerException.MessageKeys.INVALID_ACTION_PARAMETER_TYPE, name);
       }
     }
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ef6ed4e3/lib/server-core/src/main/resources/server-core-exceptions-i18n.properties
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/resources/server-core-exceptions-i18n.properties b/lib/server-core/src/main/resources/server-core-exceptions-i18n.properties
index 76266ea..71013d2 100644
--- a/lib/server-core/src/main/resources/server-core-exceptions-i18n.properties
+++ b/lib/server-core/src/main/resources/server-core-exceptions-i18n.properties
@@ -115,6 +115,8 @@ DeserializerException.UNKNOWN_PRIMITIVE_TYPE=Unknown primitive type '%1$s' for p
 DeserializerException.NAVIGATION_PROPERTY_NOT_FOUND=Can`t find navigation property with name: '%1$s'.
 DeserializerException.INVALID_ANNOTATION_TYPE=The annotation '%1$s' has the wrong JSON type.
 DeserializerException.INVALID_ENTITY_BINDING_LINK=The binding link '%1$s' is malformed.
+DeserializerException.INVALID_ACTION_PARAMETER_TYPE=The action parameter '%1$s' must be either primitive, complex or an entity or a collection of those types.
+DeserializerException.INVALID_NULL_PARAMETER=The parameter '%1$s' must not be null.
 
 BatchDeserializerException.INVALID_BOUNDARY=Invalid boundary at line '%1$s'.
 BatchDeserializerException.INVALID_CHANGESET_METHOD=Invalid method: a ChangeSet cannot contain retrieve requests at line '%1$s'.

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ef6ed4e3/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmTypeImplTest.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmTypeImplTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmTypeImplTest.java
index ddfd15d..b9f6db6 100644
--- a/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmTypeImplTest.java
+++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/edm/provider/EdmTypeImplTest.java
@@ -37,10 +37,10 @@ public class EdmTypeImplTest {
 
   @Test
   public void getterTest() {
-    EdmType type = new EdmTypeImplTester(new FullQualifiedName("namespace", "name"), EdmTypeKind.UNDEFINED);
+    EdmType type = new EdmTypeImplTester(new FullQualifiedName("namespace", "name"), EdmTypeKind.PRIMITIVE);
     assertEquals("name", type.getName());
     assertEquals("namespace", type.getNamespace());
-    assertEquals(EdmTypeKind.UNDEFINED, type.getKind());
+    assertEquals(EdmTypeKind.PRIMITIVE, type.getKind());
     EdmAnnotatable an = (EdmAnnotatable) type;
     assertNotNull(an.getAnnotations().get(0));
   }