Repository: olingo-odata4
Updated Branches:
  refs/heads/master 3baa3993e -> 824c174d7


[OLINGO-931] Replace NPE with correct exception


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

Branch: refs/heads/master
Commit: 824c174d75bb28a29d177bc48376225c093439e8
Parents: 3baa399
Author: Michael Bolz <[email protected]>
Authored: Thu Apr 14 08:20:22 2016 +0200
Committer: Michael Bolz <[email protected]>
Committed: Thu Apr 14 08:20:22 2016 +0200

----------------------------------------------------------------------
 .../api/serializer/SerializerException.java     |  2 ++
 .../serializer/json/ODataJsonSerializer.java    | 20 ++++++++++++---
 .../server-core-exceptions-i18n.properties      |  1 +
 .../json/ODataJsonSerializerTest.java           | 27 ++++++++++++++++++++
 4 files changed, 47 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/824c174d/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/SerializerException.java
----------------------------------------------------------------------
diff --git 
a/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/SerializerException.java
 
b/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/SerializerException.java
index 99dda4b..be3416b 100644
--- 
a/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/SerializerException.java
+++ 
b/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/SerializerException.java
@@ -41,6 +41,8 @@ public class SerializerException extends 
ODataLibraryException {
     INCONSISTENT_PROPERTY_TYPE,
     /** parameter: property name */
     MISSING_PROPERTY,
+    /** parameter: - */
+    MISSING_ID,
     /** parameters: property name, property value */
     WRONG_PROPERTY_VALUE,
     /** parameters: primitive-type name, value */

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/824c174d/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
----------------------------------------------------------------------
diff --git 
a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
index 3e03bb5..396261f 100644
--- 
a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
+++ 
b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
@@ -267,7 +267,7 @@ public class ODataJsonSerializer extends 
AbstractODataSerializer {
     for (final Entity entity : entitySet) {
       if (onlyReference) {
         json.writeStartObject();
-        json.writeStringField(Constants.JSON_ID, 
entity.getId().toASCIIString());
+        json.writeStringField(Constants.JSON_ID, getEntityId(entity));
         json.writeEndObject();
       } else {
         writeEntity(metadata, entityType, entity, null, expand, select, false, 
json);
@@ -276,6 +276,20 @@ public class ODataJsonSerializer extends 
AbstractODataSerializer {
     json.writeEndArray();
   }
 
+  /**
+   * Get the ascii representation of the entity id
+   * or thrown an {@link SerializerException} if id is <code>null</code>.
+   *
+   * @param entity the entity
+   * @return ascii representation of the entity id
+   */
+  private String getEntityId(Entity entity) throws SerializerException {
+    if(entity.getId() == null) {
+      throw new SerializerException("Entity id is null.", 
SerializerException.MessageKeys.MISSING_ID);
+    }
+    return entity.getId().toASCIIString();
+  }
+
   private boolean areKeyPredicateNamesSelected(SelectOption select, 
EdmEntityType type) {
     if (select == null || ExpandSelectHelper.isAll(select)) {
       return true;
@@ -319,14 +333,14 @@ public class ODataJsonSerializer extends 
AbstractODataSerializer {
       }
     }
     if (onlyReference) {
-      json.writeStringField(Constants.JSON_ID, entity.getId().toASCIIString());
+      json.writeStringField(Constants.JSON_ID, getEntityId(entity));
     } else {
       final EdmEntityType resolvedType = resolveEntityType(metadata, 
entityType, entity.getType());
       if (!isODataMetadataNone && !resolvedType.equals(entityType)) {
         json.writeStringField(Constants.JSON_TYPE, "#" + entity.getType());
       }
       if (!isODataMetadataNone && !areKeyPredicateNamesSelected(select, 
resolvedType)) {
-        json.writeStringField(Constants.JSON_ID, 
entity.getId().toASCIIString());
+        json.writeStringField(Constants.JSON_ID, getEntityId(entity));
       }
       writeProperties(metadata, resolvedType, entity.getProperties(), select, 
json);
       writeNavigationProperties(metadata, resolvedType, entity, expand, json);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/824c174d/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 c563a67..3b63c1b 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
@@ -107,6 +107,7 @@ SerializerException.NO_CONTEXT_URL=No context URL has been 
provided.
 SerializerException.UNSUPPORTED_PROPERTY_TYPE=The type of the property '%1$s' 
is not yet supported.
 SerializerException.INCONSISTENT_PROPERTY_TYPE=An inconsistency has been 
detected in the type definition of property '%1$s'.
 SerializerException.MISSING_PROPERTY=The non-nullable property '%1$s' is 
missing.
+SerializerException.MISSING_ID=The entity id value is missing.
 SerializerException.WRONG_PROPERTY_VALUE=The value '%2$s' is not valid for 
property '%1$s'.
 SerializerException.WRONG_PRIMITIVE_VALUE=The value '%2$s' is not valid for 
the primitive type '%1$s' and the given facets.
 SerializerException.UNKNOWN_TYPE=Type '%1s' not found in metadata.

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/824c174d/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
----------------------------------------------------------------------
diff --git 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
index 022132c..e4f62c2 100644
--- 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
+++ 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java
@@ -719,6 +719,33 @@ public class ODataJsonSerializerTest {
         resultString);
   }
 
+
+  @Test(expected = SerializerException.class)
+  public void selectMissingId() throws Exception {
+    final EdmEntitySet edmEntitySet = 
entityContainer.getEntitySet("ESAllPrim");
+    final EdmEntityType entityType = edmEntitySet.getEntityType();
+    final Entity entity = data.readAll(edmEntitySet).getEntities().get(0);
+    entity.setId(null);
+    final SelectItem selectItem1 = 
ExpandSelectMock.mockSelectItem(edmEntitySet, "PropertyDate");
+    final SelectItem selectItem2 = 
ExpandSelectMock.mockSelectItem(edmEntitySet, "PropertyBoolean");
+    final SelectOption select = 
ExpandSelectMock.mockSelectOption(Arrays.asList(
+        selectItem1, selectItem2, selectItem2));
+
+    try {
+    serializer.entity(metadata, entityType, entity,
+            EntitySerializerOptions.with()
+                .contextURL(ContextURL.with().entitySet(edmEntitySet)
+                    .selectList(helper.buildContextURLSelectList(entityType, 
null, select))
+                    .suffix(Suffix.ENTITY).build())
+                .select(select)
+                .build()).getContent();
+      Assert.fail("Expected exception not thrown!");
+    } catch (final SerializerException e) {
+      Assert.assertEquals(SerializerException.MessageKeys.MISSING_ID, 
e.getMessageKey());
+      throw e;
+    }
+  }
+
   @Test
   public void expand() throws Exception {
     final EdmEntitySet edmEntitySet = 
entityContainer.getEntitySet("ESTwoPrim");

Reply via email to