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