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 2015/11/06 09:13:15 UTC
olingo-odata4 git commit: [OLINGO-806] small fix for JSON deserializer
Repository: olingo-odata4
Updated Branches:
refs/heads/master 303c4e869 -> ac828a355
[OLINGO-806] small fix for JSON deserializer
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/ac828a35
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/ac828a35
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/ac828a35
Branch: refs/heads/master
Commit: ac828a3554a8737139fba3b2e9328f2b917042f5
Parents: 303c4e8
Author: Klaus Straubinger <kl...@sap.com>
Authored: Fri Nov 6 09:06:30 2015 +0100
Committer: Michael Bolz <mi...@sap.com>
Committed: Fri Nov 6 09:08:49 2015 +0100
----------------------------------------------------------------------
.../json/ODataJsonDeserializer.java | 8 +--
.../json/ODataJsonDeserializerBasicTest.java | 51 ++++----------------
.../json/ODataJsonDeserializerEntityTest.java | 42 +++++++---------
3 files changed, 31 insertions(+), 70 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ac828a35/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 9b9de1d..efe1531 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
@@ -213,12 +213,12 @@ public class ODataJsonDeserializer implements ODataDeserializer {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.configure(DeserializationFeature.FAIL_ON_READING_DUP_TREE_KEY, true);
JsonParser parser = new JsonFactory(objectMapper).createParser(stream);
- final ObjectNode tree = parser.getCodec().readTree(parser);
- if (tree == null) {
+ final JsonNode tree = parser.getCodec().readTree(parser);
+ if (tree == null || !tree.isObject()) {
throw new DeserializerException("Invalid JSON syntax.",
DeserializerException.MessageKeys.JSON_SYNTAX_EXCEPTION);
}
- return tree;
+ return (ObjectNode) tree;
}
private Map<String, Parameter> consumeParameters(final EdmAction edmAction, final ObjectNode node)
@@ -757,7 +757,7 @@ public class ODataJsonDeserializer implements ODataDeserializer {
@Override
public DeserializerResult entityReferences(final InputStream stream) throws DeserializerException {
try {
- ArrayList<URI> parsedValues = new ArrayList<URI>();
+ List<URI> parsedValues = new ArrayList<URI>();
final ObjectNode tree = parseJsonTree(stream);
final String key = Constants.JSON_ID;
JsonNode jsonNode = tree.get(Constants.VALUE);
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ac828a35/lib/server-core/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerBasicTest.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerBasicTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerBasicTest.java
index 9e22c6c..8160165 100644
--- a/lib/server-core/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerBasicTest.java
+++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerBasicTest.java
@@ -40,34 +40,6 @@ public class ODataJsonDeserializerBasicTest {
}
@Test
- public void collectionProperties() throws Exception {
- String payload = "{\n" +
- " \"@odata.context\": \"http://host/service/$metadata#Collection($ref)\",\n" +
- " \"value\": [\n" +
- " { \"@odata.id\": \"Orders(10643)\" },\n" +
- " { \"@odata.id\": \"Orders(10759)\" }\n" +
- " ]\n" +
- "}";
- List<URI> values = deserializer.entityReferences(new ByteArrayInputStream(payload.getBytes()))
- .getEntityReferences();
- assertEquals(2, values.size());
- assertEquals("Orders(10643)", values.get(0).toASCIIString());
- assertEquals("Orders(10759)", values.get(1).toASCIIString());
- }
-
- @Test
- public void properties() throws Exception {
- String payload = "{\n" +
- " \"@odata.context\": \"http://host/service/$metadata#$ref\",\n" +
- " \"@odata.id\": \"Orders(10643)\"\n" +
- "}";
- List<URI> values = deserializer.entityReferences(new ByteArrayInputStream(payload
- .getBytes())).getEntityReferences();
- assertEquals(1, values.size());
- assertEquals("Orders(10643)", values.get(0).toASCIIString());
- }
-
- @Test
public void reference() throws Exception {
String entityString = "{"
+ "\"@odata.context\": \"$metadata#$ref\","
@@ -76,7 +48,6 @@ public class ODataJsonDeserializerBasicTest {
InputStream stream = new ByteArrayInputStream(entityString.getBytes());
final List<URI> entityReferences = deserializer.entityReferences(stream).getEntityReferences();
-
assertEquals(1, entityReferences.size());
assertEquals("ESAllPrim(0)", entityReferences.get(0).toASCIIString());
}
@@ -135,15 +106,12 @@ public class ODataJsonDeserializerBasicTest {
@Test
public void referenceEmpty() throws Exception {
- String entityString = "{" +
- " \"@odata.context\": \"$metadata#Collection($ref)\"," +
- " \"value\": [" +
- " ]" +
- "}";
+ final String entityString = "{\"@odata.context\": \"$metadata#Collection($ref)\","
+ + " \"value\": [ ]"
+ + "}";
InputStream stream = new ByteArrayInputStream(entityString.getBytes());
final List<URI> entityReferences = deserializer.entityReferences(stream).getEntityReferences();
-
assertEquals(0, entityReferences.size());
}
@@ -153,9 +121,7 @@ public class ODataJsonDeserializerBasicTest {
* See OData JSON Format chapter 13
* ... the object that MUST contain the id of the referenced entity
*/
- String entityString = "{ }";
-
- InputStream stream = new ByteArrayInputStream(entityString.getBytes());
+ InputStream stream = new ByteArrayInputStream(new byte[] { '{', '}' });
deserializer.entityReferences(stream).getEntityReferences();
}
@@ -165,13 +131,16 @@ public class ODataJsonDeserializerBasicTest {
}
@Test(expected = DeserializerException.class)
+ public void referencesInvalidJson() throws Exception {
+ deserializer.entityReferences(new ByteArrayInputStream(new byte[] { 'A' }));
+ }
+
+ @Test(expected = DeserializerException.class)
public void referenceValueIsNotAnArray() throws Exception {
String entityString = "{" +
" \"@odata.context\": \"$metadata#Collection($ref)\"," +
" \"value\": \"ESAllPrim(0)\"" + // This is not allowed. Value must be followed by an array
"}";
-
- InputStream stream = new ByteArrayInputStream(entityString.getBytes());
- deserializer.entityReferences(stream);
+ deserializer.entityReferences(new ByteArrayInputStream(entityString.getBytes()));
}
}
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/ac828a35/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerEntityTest.java
----------------------------------------------------------------------
diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerEntityTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerEntityTest.java
index c5fcfe2..b528b28 100644
--- a/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerEntityTest.java
+++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerEntityTest.java
@@ -504,9 +504,7 @@ public class ODataJsonDeserializerEntityTest extends AbstractODataDeserializerTe
@Test
public void validJsonValueForComplexTypeNull() throws Exception {
- final String entityString = "{"
- + "\"PropertyComp\":null"
- + "}";
+ final String entityString = "{\"PropertyComp\":null}";
final Entity entity = deserialize(entityString, "ETMixPrimCollComp");
assertNull(entity.getProperty("PropertyComp").getValue());
}
@@ -550,9 +548,7 @@ public class ODataJsonDeserializerEntityTest extends AbstractODataDeserializerTe
@Test
public void eTMixEnumDefCollCompMultipleValuesForEnum() throws Exception {
- String entityString = "{"
- + "\"PropertyEnumString\" : \"String1,String2\""
- + "}";
+ final String entityString = "{\"PropertyEnumString\": \"String1,String2\"}";
final Entity entity = deserialize(entityString, "ETMixEnumDefCollComp");
assertEquals((short) 3, entity.getProperty("PropertyEnumString").getValue());
}
@@ -560,7 +556,7 @@ public class ODataJsonDeserializerEntityTest extends AbstractODataDeserializerTe
@Test
public void mappingTest() throws Exception {
EdmEntityType entityType = mock(EdmEntityType.class);
- when(entityType.getFullQualifiedName()).thenReturn(new FullQualifiedName("napespace", "name"));
+ when(entityType.getFullQualifiedName()).thenReturn(new FullQualifiedName("namespace", "name"));
List<String> propertyNames = new ArrayList<String>();
propertyNames.add("PropertyDate");
propertyNames.add("PropertyDateTimeOffset");
@@ -606,6 +602,13 @@ public class ODataJsonDeserializerEntityTest extends AbstractODataDeserializerTe
}
@Test
+ public void nonJsonInput() throws Exception {
+ expectException("0", "ETAllPrim", DeserializerException.MessageKeys.JSON_SYNTAX_EXCEPTION);
+ expectException("[]", "ETAllPrim", DeserializerException.MessageKeys.JSON_SYNTAX_EXCEPTION);
+ expectException("}{", "ETAllPrim", DeserializerException.MessageKeys.JSON_SYNTAX_EXCEPTION);
+ }
+
+ @Test
public void etAllPrimWithInvalidNullValue() throws Exception {
String entityString =
"{\"PropertyInt16\":null," +
@@ -957,24 +960,21 @@ public class ODataJsonDeserializerEntityTest extends AbstractODataDeserializerTe
@Test
public void invalidJsonSyntax() throws Exception {
- String entityString =
- "{\"PropertyInt16\":32767,}";
+ final String entityString = "{\"PropertyInt16\":32767,}";
expectException(entityString, "ETAllPrim",
DeserializerException.MessageKeys.JSON_SYNTAX_EXCEPTION);
}
@Test
public void invalidJsonValueForPrimTypeArray() throws Exception {
- String entityString =
- "{\"PropertyInt16\":[]}";
+ final String entityString = "{\"PropertyInt16\":[]}";
expectException(entityString, "ETAllPrim",
DeserializerException.MessageKeys.INVALID_JSON_TYPE_FOR_PROPERTY);
}
@Test
public void invalidJsonValueForPrimTypeObject() throws Exception {
- String entityString =
- "{\"PropertyInt16\":{}}";
+ final String entityString = "{\"PropertyInt16\":{}}";
expectException(entityString, "ETAllPrim",
DeserializerException.MessageKeys.INVALID_JSON_TYPE_FOR_PROPERTY);
}
@@ -991,18 +991,14 @@ public class ODataJsonDeserializerEntityTest extends AbstractODataDeserializerTe
@Test
public void invalidJsonValueForComplexTypeTypeString() throws Exception {
- final String entityString = "{"
- + "\"PropertyComp\":\"InvalidString\""
- + "}";
+ final String entityString = "{\"PropertyComp\":\"InvalidString\"}";
expectException(entityString, "ETMixPrimCollComp",
DeserializerException.MessageKeys.INVALID_JSON_TYPE_FOR_PROPERTY);
}
@Test
public void invalidNullValueForComplexTypeNullableFalse() throws Exception {
- final String entityString = "{"
- + "\"PropertyComp\":null"
- + "}";
+ final String entityString = "{\"PropertyComp\":null}";
expectException(entityString, "ETTwoKeyNav",
DeserializerException.MessageKeys.INVALID_NULL_PROPERTY);
}
@@ -1040,18 +1036,14 @@ public class ODataJsonDeserializerEntityTest extends AbstractODataDeserializerTe
@Test
public void invalidNullValueForPrimIntCollectionNullableFalse() throws Exception {
- final String entityString = "{"
- + "\"CollPropertyInt16\":[123,\"null\",4711]"
- + "}";
+ final String entityString = "{\"CollPropertyInt16\":[123,\"null\",4711]}";
expectException(entityString, "ETCollAllPrim",
DeserializerException.MessageKeys.INVALID_VALUE_FOR_PROPERTY);
}
@Test
public void provokedPrimitiveTypeException() throws Exception {
- final String entityString = "{"
- + "\"PropertyInt16\":32767000000000000000000000000000000000000"
- + "}";
+ final String entityString = "{\"PropertyInt16\":32767000000000000000000000000000000000000}";
expectException(entityString, "ETMixPrimCollComp",
DeserializerException.MessageKeys.INVALID_VALUE_FOR_PROPERTY);
}