Repository: olingo-odata4
Updated Branches:
  refs/heads/master ae97061e3 -> 87fa79ad9


[OLINGO-604] Ignore odata annotations for action requests


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

Branch: refs/heads/master
Commit: 87fa79ad933dd85ae875a19e5b3171101e0585fe
Parents: ae97061
Author: Christian Amend <[email protected]>
Authored: Mon Apr 27 14:48:56 2015 +0200
Committer: Christian Amend <[email protected]>
Committed: Mon Apr 27 14:48:56 2015 +0200

----------------------------------------------------------------------
 .../deserializer/json/ODataJsonDeserializer.java    | 16 ++++++++++++++++
 .../ODataJsonDeserializerActionParametersTest.java  | 16 ++++++++++++++++
 2 files changed, 32 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/87fa79ad/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 66da3fc..a6c3e8d 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
@@ -195,6 +195,22 @@ public class ODataJsonDeserializer implements 
ODataDeserializer {
       Map<String, Parameter> parameters = new LinkedHashMap<String, 
Parameter>();
       if (tree != null) {
         consumeParameters(edmAction, tree, parameters);
+        
+        final List<String> toRemove = new ArrayList<String>();
+        Iterator<Entry<String, JsonNode>> fieldsIterator = tree.fields();
+        while (fieldsIterator.hasNext()) {
+          Map.Entry<String, JsonNode> field = fieldsIterator.next();
+
+          if (field.getKey().contains(ODATA_CONTROL_INFORMATION_PREFIX)) {
+            // Control Information is ignored for requests as per 
specification chapter "4.5 Control Information"
+            toRemove.add(field.getKey());
+          } else if (field.getKey().contains(ODATA_ANNOTATION_MARKER)) {
+            throw new DeserializerException("Custom annotation with field 
name: " + field.getKey() + " not supported",
+                DeserializerException.MessageKeys.NOT_IMPLEMENTED);
+          }
+        }
+        // remove here to avoid iterator issues.
+        tree.remove(toRemove);
         assertJsonNodeIsEmpty(tree);
       }
       return 
DeserializerResultImpl.with().actionParameters(parameters).build();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/87fa79ad/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerActionParametersTest.java
----------------------------------------------------------------------
diff --git 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerActionParametersTest.java
 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerActionParametersTest.java
index 01166a2..9df2b34 100644
--- 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerActionParametersTest.java
+++ 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerActionParametersTest.java
@@ -65,6 +65,22 @@ public class ODataJsonDeserializerActionParametersTest 
extends AbstractODataDese
     assertTrue(parameters.isEmpty());
   }
 
+  @Test
+  public void ignoreODataAnnotations() throws Exception {
+    final String input =
+        "{\"[email protected]\":\"Edm.Duration\","
+        + "\"ParameterDuration\":\"P42DT11H22M33S\",\"ParameterInt16\":42}";
+    final Map<String, Parameter> parameters = deserialize(input, 
"UARTTwoParam");
+    assertNotNull(parameters);
+    assertEquals(2, parameters.size());
+    Parameter parameter = parameters.get("ParameterInt16");
+    assertNotNull(parameter);
+    assertEquals((short) 42, parameter.getValue());
+    parameter = parameters.get("ParameterDuration");
+    assertNotNull(parameter);
+    assertEquals(BigDecimal.valueOf(3669753), parameter.getValue());
+  }
+
   @Test(expected = DeserializerException.class)
   public void bindingParameter() throws Exception {
     deserialize("{\"ParameterETAllPrim\":{\"PropertyInt16\":42}}", 
"BAETAllPrimRT", "ETAllPrim");

Reply via email to