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/01/26 11:02:39 UTC

olingo-odata4 git commit: [OLINGO-530] Extended test scenario EDM and added more test cases

Repository: olingo-odata4
Updated Branches:
  refs/heads/master e827ce122 -> de3f3453b


[OLINGO-530] Extended test scenario EDM and added more test cases


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

Branch: refs/heads/master
Commit: de3f3453b777d743a4d0935bb50b1b12d3fdfc61
Parents: e827ce1
Author: Michael Bolz <mi...@sap.com>
Authored: Mon Jan 26 10:49:54 2015 +0100
Committer: Michael Bolz <mi...@sap.com>
Committed: Mon Jan 26 10:56:10 2015 +0100

----------------------------------------------------------------------
 .../json/ODataJsonDeserializer.java             |  21 +-
 .../tecsvc/provider/ComplexTypeProvider.java    |   3 +-
 .../tecsvc/provider/EntityTypeProvider.java     |  14 +-
 .../tecsvc/provider/PropertyProvider.java       | 746 +++++++++++--------
 .../json/ODataJsonDeserializerEntityTest.java   |  87 ++-
 5 files changed, 532 insertions(+), 339 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/de3f3453/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 2fa54a0..6d03215 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
@@ -431,7 +431,7 @@ public class ODataJsonDeserializer implements ODataDeserializer {
   }
 
   private Object readComplexValue(EdmProperty edmComplexProperty, JsonNode jsonNode) throws DeserializerException {
-    if(isNullable(edmComplexProperty) && jsonNode.isNull()) {
+    if(isValidNull(edmComplexProperty, jsonNode)) {
       return null;
     }
     if (jsonNode.isArray() || !jsonNode.isContainerNode()) {
@@ -465,7 +465,7 @@ public class ODataJsonDeserializer implements ODataDeserializer {
 
   private Object readTypeDefinitionValue(EdmProperty edmProperty, JsonNode jsonNode) throws DeserializerException {
     checkForValueNode(edmProperty, jsonNode);
-    if(isNullable(edmProperty) && jsonNode.isNull()) {
+    if(isValidNull(edmProperty, jsonNode)) {
       return null;
     }
     try {
@@ -483,9 +483,22 @@ public class ODataJsonDeserializer implements ODataDeserializer {
     }
   }
 
+  private boolean isValidNull(EdmProperty edmProperty, JsonNode jsonNode) throws DeserializerException {
+    if (jsonNode.isNull()) {
+      if (isNullable(edmProperty)) {
+        return true;
+      } else {
+        throw new DeserializerException("Property: " + edmProperty.getName() + " must not be null.",
+            DeserializerException.MessageKeys.INVALID_NULL_PROPERTY, edmProperty.getName());
+      }
+
+    }
+    return false;
+  }
+
   private Object readEnumValue(EdmProperty edmProperty, JsonNode jsonNode) throws DeserializerException {
     checkForValueNode(edmProperty, jsonNode);
-    if(isNullable(edmProperty) && jsonNode.isNull()) {
+    if(isValidNull(edmProperty, jsonNode)) {
       return null;
     }
     try {
@@ -503,7 +516,7 @@ public class ODataJsonDeserializer implements ODataDeserializer {
 
   private Object readPrimitiveValue(EdmProperty edmProperty, JsonNode jsonNode) throws DeserializerException {
     checkForValueNode(edmProperty, jsonNode);
-    if(isNullable(edmProperty) && jsonNode.isNull()) {
+    if(isValidNull(edmProperty, jsonNode)) {
       return null;
     }
     try {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/de3f3453/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ComplexTypeProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ComplexTypeProvider.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ComplexTypeProvider.java
index 3c23d79..bf30b32 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ComplexTypeProvider.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ComplexTypeProvider.java
@@ -89,7 +89,8 @@ public class ComplexTypeProvider {
     } else if (complexTypeName.equals(nameCTTwoPrim)) {
       return new ComplexType()
           .setName("CTTwoPrim")
-          .setProperties(Arrays.asList(PropertyProvider.propertyInt16, PropertyProvider.propertyString));
+          .setProperties(Arrays.asList(PropertyProvider.propertyInt16_NotNullable,
+                                        PropertyProvider.propertyString_NotNullable));
 
     } else if (complexTypeName.equals(nameCTCompNav)) {
       return new ComplexType()

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/de3f3453/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/EntityTypeProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/EntityTypeProvider.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/EntityTypeProvider.java
index 7230a55..55ec15f 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/EntityTypeProvider.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/EntityTypeProvider.java
@@ -103,15 +103,19 @@ public class EntityTypeProvider {
 
           .setProperties(
               Arrays.asList(
-                  PropertyProvider.propertyInt16_NotNullable, PropertyProvider.collPropertyString,
+                  PropertyProvider.propertyInt16_NotNullable,
+                  PropertyProvider.collPropertyString_NotNullable,
                   PropertyProvider.collPropertyBoolean, PropertyProvider.collPropertyByte,
-                  PropertyProvider.collPropertySByte, PropertyProvider.collPropertyInt16,
+                  PropertyProvider.collPropertySByte,
+                  PropertyProvider.collPropertyInt16_NotNullable,
                   PropertyProvider.collPropertyInt32, PropertyProvider.collPropertyInt64,
                   PropertyProvider.collPropertySingle, PropertyProvider.collPropertyDouble,
                   PropertyProvider.collPropertyDecimal, PropertyProvider.collPropertyBinary,
-                  PropertyProvider.collPropertyDate, PropertyProvider.collPropertyDateTimeOffset,
-                  PropertyProvider.collPropertyDuration, PropertyProvider.collPropertyGuid,
-                  PropertyProvider.collPropertyTimeOfDay /* TODO add propertyStream */));
+                  PropertyProvider.collPropertyDate_NotNullable,
+                  PropertyProvider.collPropertyDateTimeOffset_NotNullable,
+                  PropertyProvider.collPropertyDuration_NotNullable,
+                  PropertyProvider.collPropertyGuid, PropertyProvider.collPropertyTimeOfDay
+                  /* TODO add propertyStream */));
 
     } else if (entityTypeName.equals(nameETTwoPrim)) {
       return new EntityType()

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/de3f3453/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/PropertyProvider.java
----------------------------------------------------------------------
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/PropertyProvider.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/PropertyProvider.java
index 72eb8d5..7b1ef0f 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/PropertyProvider.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/PropertyProvider.java
@@ -32,7 +32,7 @@ public class PropertyProvider {
 
   public static final FullQualifiedName nameDate = EdmPrimitiveTypeKind.Date.getFullQualifiedName();
   public static final FullQualifiedName nameDateTimeOffset =
-      EdmPrimitiveTypeKind.DateTimeOffset.getFullQualifiedName();
+          EdmPrimitiveTypeKind.DateTimeOffset.getFullQualifiedName();
 
   public static final FullQualifiedName nameDecimal = EdmPrimitiveTypeKind.Decimal.getFullQualifiedName();
   public static final FullQualifiedName nameDouble = EdmPrimitiveTypeKind.Double.getFullQualifiedName();
@@ -51,407 +51,503 @@ public class PropertyProvider {
 
   // Primitive Properties --------------------------------------------------------------------------------------------
   public static final Property collPropertyBinary = new Property()
-      .setName("CollPropertyBinary")
-      .setType(nameBinary)
-      .setCollection(true);
+          .setName("CollPropertyBinary")
+          .setType(nameBinary)
+          .setCollection(true);
 
   public static final Property collPropertyBinary_ExplicitNullable = new Property()
-      .setName("CollPropertyBinary")
-      .setType(nameBinary)
-      .setNullable(true)
-      .setCollection(true);
+          .setName("CollPropertyBinary")
+          .setType(nameBinary)
+          .setNullable(true)
+          .setCollection(true);
+
+  public static final Property collPropertyBinary_NotNullable = new Property()
+          .setName("CollPropertyBinary")
+          .setType(nameBinary)
+          .setNullable(false)
+          .setCollection(true);
 
   public static final Property collPropertyBoolean = new Property()
-      .setName("CollPropertyBoolean")
-      .setType(nameBoolean)
-      .setCollection(true);
+          .setName("CollPropertyBoolean")
+          .setType(nameBoolean)
+          .setCollection(true);
 
   public static final Property collPropertyBoolean_ExplicitNullable = new Property()
-      .setName("CollPropertyBoolean")
-      .setType(nameBoolean)
-      .setNullable(true)
-      .setCollection(true);
+          .setName("CollPropertyBoolean")
+          .setType(nameBoolean)
+          .setNullable(true)
+          .setCollection(true);
+
+  public static final Property collPropertyBoolean_NotNullable = new Property()
+          .setName("CollPropertyBoolean")
+          .setType(nameBoolean)
+          .setNullable(true)
+          .setCollection(true);
 
   public static final Property collPropertyByte = new Property()
-      .setName("CollPropertyByte")
-      .setType(nameByte)
-      .setCollection(true);
+          .setName("CollPropertyByte")
+          .setType(nameByte)
+          .setCollection(true);
 
   public static final Property collPropertyByte_ExplicitNullable = new Property()
-      .setName("CollPropertyByte")
-      .setType(nameByte)
-      .setNullable(true)
-      .setCollection(true);
+          .setName("CollPropertyByte")
+          .setType(nameByte)
+          .setNullable(true)
+          .setCollection(true);
+
+  public static final Property collPropertyByte_NotNullable = new Property()
+          .setName("CollPropertyByte")
+          .setType(nameByte)
+          .setNullable(false)
+          .setCollection(true);
 
   public static final Property collPropertyDate = new Property()
-      .setName("CollPropertyDate")
-      .setType(nameDate)
-      .setCollection(true);
+          .setName("CollPropertyDate")
+          .setType(nameDate)
+          .setCollection(true);
 
   public static final Property collPropertyDate_ExplicitNullable = new Property()
-      .setName("CollPropertyDate")
-      .setType(nameDate)
-      .setNullable(true)
-      .setCollection(true);
+          .setName("CollPropertyDate")
+          .setType(nameDate)
+          .setNullable(true)
+          .setCollection(true);
+
+  public static final Property collPropertyDate_NotNullable = new Property()
+          .setName("CollPropertyDate")
+          .setType(nameDate)
+          .setNullable(false)
+          .setCollection(true);
 
   public static final Property collPropertyDateTimeOffset = new Property()
-      .setName("CollPropertyDateTimeOffset")
-      .setType(nameDateTimeOffset)
-      .setCollection(true);
+          .setName("CollPropertyDateTimeOffset")
+          .setType(nameDateTimeOffset)
+          .setCollection(true);
 
   public static final Property collPropertyDateTimeOffset_ExplicitNullable = new Property()
-      .setName("CollPropertyDateTimeOffset")
-      .setType(nameDateTimeOffset)
-      .setNullable(true)
-      .setCollection(true);
+          .setName("CollPropertyDateTimeOffset")
+          .setType(nameDateTimeOffset)
+          .setNullable(true)
+          .setCollection(true);
+
+  public static final Property collPropertyDateTimeOffset_NotNullable = new Property()
+          .setName("CollPropertyDateTimeOffset")
+          .setType(nameDateTimeOffset)
+          .setNullable(false)
+          .setCollection(true);
 
   public static final Property collPropertyDecimal = new Property()
-      .setName("CollPropertyDecimal")
-      .setType(nameDecimal)
-      .setCollection(true);
+          .setName("CollPropertyDecimal")
+          .setType(nameDecimal)
+          .setCollection(true);
 
   public static final Property collPropertyDecimal_ExplicitNullable = new Property()
-      .setName("CollPropertyDecimal")
-      .setType(nameDecimal)
-      .setNullable(true)
-      .setCollection(true);
+          .setName("CollPropertyDecimal")
+          .setType(nameDecimal)
+          .setNullable(true)
+          .setCollection(true);
+
+  public static final Property collPropertyDecimal_NotNullable = new Property()
+          .setName("CollPropertyDecimal")
+          .setType(nameDecimal)
+          .setNullable(false)
+          .setCollection(true);
 
   public static final Property collPropertyDouble = new Property()
-      .setName("CollPropertyDouble")
-      .setType(nameDouble)
-      .setCollection(true);
+          .setName("CollPropertyDouble")
+          .setType(nameDouble)
+          .setCollection(true);
 
   public static final Property collPropertyDouble_ExplicitNullable = new Property()
-      .setName("CollPropertyDouble")
-      .setType(nameDouble)
-      .setNullable(true)
-      .setCollection(true);
+          .setName("CollPropertyDouble")
+          .setType(nameDouble)
+          .setNullable(true)
+          .setCollection(true);
+
+  public static final Property collPropertyDouble_NotNullable = new Property()
+          .setName("CollPropertyDouble")
+          .setType(nameDouble)
+          .setNullable(false)
+          .setCollection(true);
 
   public static final Property collPropertyDuration = new Property()
-      .setName("CollPropertyDuration")
-      .setType(nameDuration)
-      .setCollection(true);
+          .setName("CollPropertyDuration")
+          .setType(nameDuration)
+          .setCollection(true);
 
   public static final Property collPropertyDuration_ExplicitNullable = new Property()
-      .setName("CollPropertyDuration")
-      .setType(nameDuration)
-      .setNullable(true)
-      .setCollection(true);
+          .setName("CollPropertyDuration")
+          .setType(nameDuration)
+          .setNullable(true)
+          .setCollection(true);
+
+  public static final Property collPropertyDuration_NotNullable = new Property()
+          .setName("CollPropertyDuration")
+          .setType(nameDuration)
+          .setNullable(false)
+          .setCollection(true);
 
   public static final Property collPropertyGuid = new Property()
-      .setName("CollPropertyGuid")
-      .setType(nameGuid)
-      .setCollection(true);
+          .setName("CollPropertyGuid")
+          .setType(nameGuid)
+          .setCollection(true);
 
   public static final Property collPropertyGuid_ExplicitNullable = new Property()
-      .setName("CollPropertyGuid")
-      .setType(nameGuid)
-      .setNullable(true)
-      .setCollection(true);
+          .setName("CollPropertyGuid")
+          .setType(nameGuid)
+          .setNullable(true)
+          .setCollection(true);
+
+  public static final Property collPropertyGuid_NotNullable = new Property()
+          .setName("CollPropertyGuid")
+          .setType(nameGuid)
+          .setNullable(false)
+          .setCollection(true);
 
   public static final Property collPropertyInt16 = new Property()
-      .setName("CollPropertyInt16")
-      .setType(nameInt16)
-      .setCollection(true);
+          .setName("CollPropertyInt16")
+          .setType(nameInt16)
+          .setCollection(true);
 
   public static final Property collPropertyInt16_ExplicitNullable = new Property()
-      .setName("CollPropertyInt16")
-      .setType(nameInt16)
-      .setNullable(true)
-      .setCollection(true);
+          .setName("CollPropertyInt16")
+          .setType(nameInt16)
+          .setNullable(true)
+          .setCollection(true);
+
+  public static final Property collPropertyInt16_NotNullable = new Property()
+          .setName("CollPropertyInt16")
+          .setType(nameInt16)
+          .setNullable(false)
+          .setCollection(true);
 
   public static final Property collPropertyInt32 = new Property()
-      .setName("CollPropertyInt32")
-      .setType(nameInt32)
-      .setCollection(true);
+          .setName("CollPropertyInt32")
+          .setType(nameInt32)
+          .setCollection(true);
 
   public static final Property collPropertyInt32_ExplicitNullable = new Property()
-      .setName("CollPropertyInt32")
-      .setType(nameInt32)
-      .setNullable(true)
-      .setCollection(true);
+          .setName("CollPropertyInt32")
+          .setType(nameInt32)
+          .setNullable(true)
+          .setCollection(true);
+
+  public static final Property collPropertyInt32_NotNullable = new Property()
+          .setName("CollPropertyInt32")
+          .setType(nameInt32)
+          .setNullable(false)
+          .setCollection(true);
 
   public static final Property collPropertyInt64 = new Property()
-      .setName("CollPropertyInt64")
-      .setType(nameInt64)
-      .setCollection(true);
+          .setName("CollPropertyInt64")
+          .setType(nameInt64)
+          .setCollection(true);
 
   public static final Property collPropertyInt64_ExplicitNullable = new Property()
-      .setName("CollPropertyInt64")
-      .setType(nameInt64)
-      .setNullable(true)
-      .setCollection(true);
+          .setName("CollPropertyInt64")
+          .setType(nameInt64)
+          .setNullable(true)
+          .setCollection(true);
+
+  public static final Property collPropertyInt64_NotNullable = new Property()
+          .setName("CollPropertyInt64")
+          .setType(nameInt64)
+          .setNullable(false)
+          .setCollection(true);
 
   public static final Property collPropertySByte = new Property()
-      .setName("CollPropertySByte")
-      .setType(nameSByte)
-      .setCollection(true);
+          .setName("CollPropertySByte")
+          .setType(nameSByte)
+          .setCollection(true);
 
   public static final Property collPropertySByte_ExplicitNullable = new Property()
-      .setName("CollPropertySByte")
-      .setType(nameSByte)
-      .setNullable(true)
-      .setCollection(true);
+          .setName("CollPropertySByte")
+          .setType(nameSByte)
+          .setNullable(true)
+          .setCollection(true);
+
+  public static final Property collPropertySByte_NotNullable = new Property()
+          .setName("CollPropertySByte")
+          .setType(nameSByte)
+          .setNullable(false)
+          .setCollection(true);
 
   public static final Property collPropertySingle = new Property()
-      .setName("CollPropertySingle")
-      .setType(nameSingle)
-      .setCollection(true);
+          .setName("CollPropertySingle")
+          .setType(nameSingle)
+          .setCollection(true);
 
   public static final Property collPropertySingle_ExplicitNullable = new Property()
-      .setName("CollPropertySingle")
-      .setType(nameSingle)
-      .setNullable(true)
-      .setCollection(true);
+          .setName("CollPropertySingle")
+          .setType(nameSingle)
+          .setNullable(true)
+          .setCollection(true);
+
+  public static final Property collPropertySingle_NotNullable = new Property()
+          .setName("CollPropertySingle")
+          .setType(nameSingle)
+          .setNullable(false)
+          .setCollection(true);
 
   public static final Property collPropertyString = new Property()
-      .setName("CollPropertyString")
-      .setType(nameString)
-      .setCollection(true);
+          .setName("CollPropertyString")
+          .setType(nameString)
+          .setCollection(true);
 
   public static final Property collPropertyString_ExplicitNullable = new Property()
-      .setName("CollPropertyString")
-      .setType(nameString)
-      .setNullable(true)
-      .setCollection(true);
+          .setName("CollPropertyString")
+          .setType(nameString)
+          .setNullable(true)
+          .setCollection(true);
+
+  public static final Property collPropertyString_NotNullable = new Property()
+          .setName("CollPropertyString")
+          .setType(nameString)
+          .setNullable(false)
+          .setCollection(true);
 
   public static final Property collPropertyTimeOfDay = new Property()
-      .setName("CollPropertyTimeOfDay")
-      .setType(nameTimeOfDay)
-      .setCollection(true);
+          .setName("CollPropertyTimeOfDay")
+          .setType(nameTimeOfDay)
+          .setCollection(true);
 
   public static final Property collPropertyTimeOfDay_ExplicitNullable = new Property()
-      .setName("CollPropertyTimeOfDay")
-      .setType(nameTimeOfDay)
-      .setNullable(true)
-      .setCollection(true);
+          .setName("CollPropertyTimeOfDay")
+          .setType(nameTimeOfDay)
+          .setNullable(true)
+          .setCollection(true);
+
+  public static final Property collPropertyTimeOfDay_NotNullable = new Property()
+          .setName("CollPropertyTimeOfDay")
+          .setType(nameTimeOfDay)
+          .setNullable(false)
+          .setCollection(true);
 
   public static final Property propertyBinary = new Property()
-      .setName("PropertyBinary")
-      .setType(nameBinary);
+          .setName("PropertyBinary")
+          .setType(nameBinary);
 
   public static final Property propertyBinary_NotNullable = new Property()
-      .setName("PropertyBinary")
-      .setType(nameBinary)
-      .setNullable(false);
+          .setName("PropertyBinary")
+          .setType(nameBinary)
+          .setNullable(false);
 
   public static final Property propertyBinary_ExplicitNullable = new Property()
-      .setName("PropertyBinary")
-      .setType(nameBinary)
-      .setNullable(true);
+          .setName("PropertyBinary")
+          .setType(nameBinary)
+          .setNullable(true);
 
   public static final Property propertyBoolean = new Property()
-      .setName("PropertyBoolean")
-      .setType(nameBoolean);
+          .setName("PropertyBoolean")
+          .setType(nameBoolean);
 
   public static final Property propertyBoolean_NotNullable = new Property()
-      .setName("PropertyBoolean")
-      .setType(nameBoolean)
-      .setNullable(false);
+          .setName("PropertyBoolean")
+          .setType(nameBoolean)
+          .setNullable(false);
 
   public static final Property propertyBoolean_ExplicitNullable = new Property()
-      .setName("PropertyBoolean")
-      .setType(nameBoolean)
-      .setNullable(true);
+          .setName("PropertyBoolean")
+          .setType(nameBoolean)
+          .setNullable(true);
 
   public static final Property propertyByte = new Property()
-      .setName("PropertyByte")
-      .setType(nameByte);
+          .setName("PropertyByte")
+          .setType(nameByte);
 
   public static final Property propertyByte_NotNullable = new Property()
-      .setName("PropertyByte")
-      .setType(nameByte)
-      .setNullable(false);
+          .setName("PropertyByte")
+          .setType(nameByte)
+          .setNullable(false);
 
   public static final Property propertyByte_ExplicitNullable = new Property()
-      .setName("PropertyByte")
-      .setType(nameByte)
-      .setNullable(true);
+          .setName("PropertyByte")
+          .setType(nameByte)
+          .setNullable(true);
 
   public static final Property propertyDate = new Property()
-      .setName("PropertyDate")
-      .setType(nameDate);
+          .setName("PropertyDate")
+          .setType(nameDate);
 
   public static final Property propertyDate_NotNullable = new Property()
-      .setName("PropertyDate")
-      .setType(nameDate)
-      .setNullable(false);
+          .setName("PropertyDate")
+          .setType(nameDate)
+          .setNullable(false);
 
   public static final Property propertyDate_ExplicitNullable = new Property()
-      .setName("PropertyDate")
-      .setType(nameDate)
-      .setNullable(true);
+          .setName("PropertyDate")
+          .setType(nameDate)
+          .setNullable(true);
 
   public static final Property propertyDateTimeOffset = new Property()
-      .setName("PropertyDateTimeOffset")
-      .setPrecision(20)
-      .setType(nameDateTimeOffset);
+          .setName("PropertyDateTimeOffset")
+          .setPrecision(20)
+          .setType(nameDateTimeOffset);
 
   public static final Property propertyDateTimeOffset_NotNullable = new Property()
-      .setName("PropertyDateTimeOffset")
-      .setType(nameDateTimeOffset)
-      .setNullable(false);
+          .setName("PropertyDateTimeOffset")
+          .setType(nameDateTimeOffset)
+          .setNullable(false);
 
   public static final Property propertyDateTimeOffset_ExplicitNullable = new Property()
-      .setName("PropertyDateTimeOffset")
-      .setType(nameDateTimeOffset)
-      .setNullable(true);
+          .setName("PropertyDateTimeOffset")
+          .setType(nameDateTimeOffset)
+          .setNullable(true);
 
   public static final Property propertyDecimal = new Property()
-      .setName("PropertyDecimal")
-      .setScale(10)
-      .setType(nameDecimal);
+          .setName("PropertyDecimal")
+          .setScale(10)
+          .setType(nameDecimal);
 
   public static final Property propertyDecimal_NotNullable = new Property()
-      .setName("PropertyDecimal")
-      .setType(nameDecimal)
-      .setNullable(false);
+          .setName("PropertyDecimal")
+          .setType(nameDecimal)
+          .setNullable(false);
 
   public static final Property propertyDecimal_ExplicitNullable = new Property()
-      .setName("PropertyDecimal")
-      .setType(nameDecimal)
-      .setNullable(true);
+          .setName("PropertyDecimal")
+          .setType(nameDecimal)
+          .setNullable(true);
 
   public static final Property propertyDouble = new Property()
-      .setName("PropertyDouble")
-      .setType(nameDouble);
+          .setName("PropertyDouble")
+          .setType(nameDouble);
 
   public static final Property propertyDouble_NotNullable = new Property()
-      .setName("PropertyDouble")
-      .setType(nameDouble)
-      .setNullable(false);
+          .setName("PropertyDouble")
+          .setType(nameDouble)
+          .setNullable(false);
 
   public static final Property propertyDouble_ExplicitNullable = new Property()
-      .setName("PropertyDouble")
-      .setType(nameDouble)
-      .setNullable(true);
+          .setName("PropertyDouble")
+          .setType(nameDouble)
+          .setNullable(true);
 
   public static final Property propertyDuration = new Property()
-      .setName("PropertyDuration")
-      .setType(nameDuration);
+          .setName("PropertyDuration")
+          .setType(nameDuration);
 
   public static final Property propertyDuration_NotNullable = new Property()
-      .setName("PropertyDuration")
-      .setType(nameDuration)
-      .setNullable(false);
+          .setName("PropertyDuration")
+          .setType(nameDuration)
+          .setNullable(false);
 
   public static final Property propertyDuration_ExplicitNullable = new Property()
-      .setName("PropertyDuration")
-      .setType(nameDuration)
-      .setNullable(true);
+          .setName("PropertyDuration")
+          .setType(nameDuration)
+          .setNullable(true);
 
   public static final Property propertyGuid = new Property()
-      .setName("PropertyGuid")
-      .setType(nameGuid);
+          .setName("PropertyGuid")
+          .setType(nameGuid);
 
   public static final Property propertyGuid_NotNullable = new Property()
-      .setName("PropertyGuid")
-      .setType(nameGuid)
-      .setNullable(false);
+          .setName("PropertyGuid")
+          .setType(nameGuid)
+          .setNullable(false);
 
   public static final Property propertyGuid_ExplicitNullable = new Property()
-      .setName("PropertyGuid")
-      .setType(nameGuid)
-      .setNullable(true);
+          .setName("PropertyGuid")
+          .setType(nameGuid)
+          .setNullable(true);
 
   public static final Property propertyInt16 = new Property()
-      .setName("PropertyInt16")
-      .setType(nameInt16);
+          .setName("PropertyInt16")
+          .setType(nameInt16);
 
   public static final Property propertyInt16_NotNullable = new Property()
-      .setName("PropertyInt16")
-      .setType(nameInt16)
-      .setNullable(false);
+          .setName("PropertyInt16")
+          .setType(nameInt16)
+          .setNullable(false);
 
   public static final Property propertyInt16_ExplicitNullable = new Property()
-      .setName("PropertyInt16")
-      .setType(nameInt16)
-      .setNullable(true);
+          .setName("PropertyInt16")
+          .setType(nameInt16)
+          .setNullable(true);
 
   public static final Property propertyInt32 = new Property()
-      .setName("PropertyInt32")
-      .setType(nameInt32);
+          .setName("PropertyInt32")
+          .setType(nameInt32);
 
   public static final Property propertyInt32_NotNullable = new Property()
-      .setName("PropertyInt32")
-      .setType(nameInt32)
-      .setNullable(false);
+          .setName("PropertyInt32")
+          .setType(nameInt32)
+          .setNullable(false);
 
   public static final Property propertyInt32_ExplicitNullable = new Property()
-      .setName("PropertyInt32")
-      .setType(nameInt32)
-      .setNullable(true);
+          .setName("PropertyInt32")
+          .setType(nameInt32)
+          .setNullable(true);
 
   public static final Property propertyInt64 = new Property()
-      .setName("PropertyInt64")
-      .setType(nameInt64);
+          .setName("PropertyInt64")
+          .setType(nameInt64);
 
   public static final Property propertyInt64_NotNullable = new Property()
-      .setName("PropertyInt64")
-      .setType(nameInt64)
-      .setNullable(false);
+          .setName("PropertyInt64")
+          .setType(nameInt64)
+          .setNullable(false);
 
   public static final Property propertyInt64_ExplicitNullable = new Property()
-      .setName("PropertyInt64")
-      .setType(nameInt64)
-      .setNullable(true);
+          .setName("PropertyInt64")
+          .setType(nameInt64)
+          .setNullable(true);
 
   public static final Property propertySByte = new Property()
-      .setName("PropertySByte")
-      .setType(nameSByte);
+          .setName("PropertySByte")
+          .setType(nameSByte);
 
   public static final Property propertySByte_NotNullable = new Property()
-      .setName("PropertySByte")
-      .setType(nameSByte)
-      .setNullable(false);
+          .setName("PropertySByte")
+          .setType(nameSByte)
+          .setNullable(false);
 
   public static final Property propertySByte_ExplicitNullable = new Property()
-      .setName("PropertySByte")
-      .setType(nameSByte)
-      .setNullable(true);
+          .setName("PropertySByte")
+          .setType(nameSByte)
+          .setNullable(true);
 
   public static final Property propertySingle = new Property()
-      .setName("PropertySingle")
-      .setType(nameSingle);
+          .setName("PropertySingle")
+          .setType(nameSingle);
 
   public static final Property propertySingle_NotNullable = new Property()
-      .setName("PropertySingle")
-      .setType(nameSingle)
-      .setNullable(false);
+          .setName("PropertySingle")
+          .setType(nameSingle)
+          .setNullable(false);
 
   public static final Property propertySingle_ExplicitNullable = new Property()
-      .setName("PropertySingle")
-      .setType(nameSingle)
-      .setNullable(true);
+          .setName("PropertySingle")
+          .setType(nameSingle)
+          .setNullable(true);
 
   public static final Property propertyString = new Property()
-      .setName("PropertyString")
-      .setType(nameString);
+          .setName("PropertyString")
+          .setType(nameString);
 
   public static final Property propertyString_NotNullable = new Property()
-      .setName("PropertyString")
-      .setType(nameString)
-      .setNullable(false);
+          .setName("PropertyString")
+          .setType(nameString)
+          .setNullable(false);
 
   public static final Property propertyString_ExplicitNullable = new Property()
-      .setName("PropertyString")
-      .setType(nameString)
-      .setNullable(true);
+          .setName("PropertyString")
+          .setType(nameString)
+          .setNullable(true);
 
   public static final Property propertyTimeOfDay = new Property()
-      .setName("PropertyTimeOfDay")
-      .setPrecision(10)
-      .setType(nameTimeOfDay);
+          .setName("PropertyTimeOfDay")
+          .setPrecision(10)
+          .setType(nameTimeOfDay);
 
   public static final Property propertyTimeOfDay_NotNullable = new Property()
-      .setName("PropertyTimeOfDay")
-      .setType(nameTimeOfDay)
-      .setNullable(false);
+          .setName("PropertyTimeOfDay")
+          .setType(nameTimeOfDay)
+          .setNullable(false);
 
   public static final Property propertyTimeOfDay_ExplicitNullable = new Property()
-      .setName("PropertyTimeOfDay")
-      .setType(nameTimeOfDay)
-      .setNullable(true);
+          .setName("PropertyTimeOfDay")
+          .setType(nameTimeOfDay)
+          .setNullable(true);
 
   /*
    * TODO add propertyStream
@@ -462,150 +558,150 @@ public class PropertyProvider {
 
   // Complex Properties ----------------------------------------------------------------------------------------------
   public static final Property collPropertyComp_CTPrimComp = new Property()
-      .setName("CollPropertyComp")
-      .setType(ComplexTypeProvider.nameCTPrimComp)
-      .setCollection(true);
+          .setName("CollPropertyComp")
+          .setType(ComplexTypeProvider.nameCTPrimComp)
+          .setCollection(true);
 
   public static final Property collPropertyComp_CTTwoPrim = new Property()
-      .setName("CollPropertyComp")
-      .setType(ComplexTypeProvider.nameCTTwoPrim)
-      .setCollection(true);
+          .setName("CollPropertyComp")
+          .setType(ComplexTypeProvider.nameCTTwoPrim)
+          .setCollection(true);
 
   public static final Property propertyComp_CTAllPrim = new Property()
-      .setName("PropertyComp")
-      .setType(ComplexTypeProvider.nameCTAllPrim);
+          .setName("PropertyComp")
+          .setType(ComplexTypeProvider.nameCTAllPrim);
 
   public static final Property propertyComp_CTCollAllPrim = new Property()
-      .setName("PropertyComp")
-      .setType(ComplexTypeProvider.nameCTCollAllPrim);
+          .setName("PropertyComp")
+          .setType(ComplexTypeProvider.nameCTCollAllPrim);
 
   public static final Property propertyComp_CTCompCollComp = new Property()
-      .setName("PropertyComp")
-      .setType(ComplexTypeProvider.nameCTCompCollComp);
+          .setName("PropertyComp")
+          .setType(ComplexTypeProvider.nameCTCompCollComp);
 
   public static final Property propertyComp_CTCompComp = new Property()
-      .setName("PropertyComp")
-      .setType(ComplexTypeProvider.nameCTCompComp);
+          .setName("PropertyComp")
+          .setType(ComplexTypeProvider.nameCTCompComp);
 
   public static final Property propertyComp_CTNavFiveProp = new Property()
-      .setName("PropertyComp")
-      .setType(ComplexTypeProvider.nameCTNavFiveProp);
+          .setName("PropertyComp")
+          .setType(ComplexTypeProvider.nameCTNavFiveProp);
 
   public static final Property propertyComp_CTPrimComp_NotNullable = new Property()
-      .setName("PropertyComp")
-      .setType(ComplexTypeProvider.nameCTPrimComp)
-      .setNullable(false);
+          .setName("PropertyComp")
+          .setType(ComplexTypeProvider.nameCTPrimComp)
+          .setNullable(false);
 
   public static final Property propertyComp_CTTwoPrim = new Property()
-      .setName("PropertyComp")
-      .setType(ComplexTypeProvider.nameCTTwoPrim);
+          .setName("PropertyComp")
+          .setType(ComplexTypeProvider.nameCTTwoPrim);
 
   public static final Property propertyCompAllPrim_CTAllPrim = new Property()
-      .setName("PropertyCompAllPrim")
-      .setType(ComplexTypeProvider.nameCTAllPrim);
+          .setName("PropertyCompAllPrim")
+          .setType(ComplexTypeProvider.nameCTAllPrim);
 
   public static final Property propertyCompComp_CTCompComp = new Property()
-      .setName("PropertyCompComp")
-      .setType(ComplexTypeProvider.nameCTCompComp);
+          .setName("PropertyCompComp")
+          .setType(ComplexTypeProvider.nameCTCompComp);
 
   public static final Property propertyCompTwoPrim_CTTwoPrim = new Property()
-      .setName("PropertyCompTwoPrim")
-      .setType(ComplexTypeProvider.nameCTTwoPrim);
+          .setName("PropertyCompTwoPrim")
+          .setType(ComplexTypeProvider.nameCTTwoPrim);
 
   public static final Property propertyMixedPrimCollComp_CTMixPrimCollComp = new Property()
-      .setName("PropertyMixedPrimCollComp")
-      .setType(ComplexTypeProvider.nameCTMixPrimCollComp);
+          .setName("PropertyMixedPrimCollComp")
+          .setType(ComplexTypeProvider.nameCTMixPrimCollComp);
 
   public static final Property propertyComp_CTMixEnumTypeDefColl = new Property()
-      .setName("PropertyCompMixedEnumDef")
-      .setType(ComplexTypeProvider.nameCTMixEnumDef);
+          .setName("PropertyCompMixedEnumDef")
+          .setType(ComplexTypeProvider.nameCTMixEnumDef);
 
   public static final Property propertyCompColl_CTMixEnumTypeDefColl = new Property()
-      .setName("CollPropertyCompMixedEnumDef")
-      .setType(ComplexTypeProvider.nameCTMixEnumDef)
-      .setCollection(true);
+          .setName("CollPropertyCompMixedEnumDef")
+          .setType(ComplexTypeProvider.nameCTMixEnumDef)
+          .setCollection(true);
 
   // Navigation Properties -------------------------------------------------------------------------------------------
   public static final NavigationProperty collectionNavPropertyETKeyNavMany_ETKeyNav = new NavigationProperty()
-      .setName("NavPropertyETKeyNavMany")
-      .setType(EntityTypeProvider.nameETKeyNav)
-      .setCollection(true);
+          .setName("NavPropertyETKeyNavMany")
+          .setType(EntityTypeProvider.nameETKeyNav)
+          .setCollection(true);
 
   public static final NavigationProperty collectionNavPropertyETMediaMany_ETMedia = new NavigationProperty()
-      .setName("NavPropertyETMediaMany")
-      .setType(EntityTypeProvider.nameETMedia)
-      .setCollection(true);
+          .setName("NavPropertyETMediaMany")
+          .setType(EntityTypeProvider.nameETMedia)
+          .setCollection(true);
 
   public static final NavigationProperty collectionNavPropertyETTwoKeyNavMany_ETTwoKeyNav = new NavigationProperty()
-      .setName("NavPropertyETTwoKeyNavMany")
-      .setType(EntityTypeProvider.nameETTwoKeyNav)
-      .setCollection(true)
-      .setPartner("NavPropertyETKeyNavOne");
+          .setName("NavPropertyETTwoKeyNavMany")
+          .setType(EntityTypeProvider.nameETTwoKeyNav)
+          .setCollection(true)
+          .setPartner("NavPropertyETKeyNavOne");
 
   public static final NavigationProperty collectionNavPropertyETTwoKeyNavOne_ETTwoKeyNav = new NavigationProperty()
-      .setName("NavPropertyETTwoKeyNavOne")
-      .setType(EntityTypeProvider.nameETTwoKeyNav);
+          .setName("NavPropertyETTwoKeyNavOne")
+          .setType(EntityTypeProvider.nameETTwoKeyNav);
 
   public static final NavigationProperty collectionNavPropertyETTwoPrimMany_ETTwoPrim = new NavigationProperty()
-      .setName("NavPropertyETTwoPrimMany")
-      .setType(EntityTypeProvider.nameETTwoPrim)
-      .setCollection(true)
-      .setNullable(false);
+          .setName("NavPropertyETTwoPrimMany")
+          .setType(EntityTypeProvider.nameETTwoPrim)
+          .setCollection(true)
+          .setNullable(false);
 
   public static final NavigationProperty collectionNavPropertyETAllPrimMany_ETAllPrim = new NavigationProperty()
-      .setName("NavPropertyETAllPrimMany")
-      .setType(EntityTypeProvider.nameETAllPrim)
-      .setCollection(true);
+          .setName("NavPropertyETAllPrimMany")
+          .setType(EntityTypeProvider.nameETAllPrim)
+          .setCollection(true);
 
   public static final NavigationProperty navPropertyETKeyNavOne_ETKeyNav = new NavigationProperty()
-      .setName("NavPropertyETKeyNavOne")
-      .setType(EntityTypeProvider.nameETKeyNav);
+          .setName("NavPropertyETKeyNavOne")
+          .setType(EntityTypeProvider.nameETKeyNav);
 
   public static final NavigationProperty navPropertyETMediaOne_ETMedia = new NavigationProperty()
-      .setName("NavPropertyETMediaOne")
-      .setType(EntityTypeProvider.nameETMedia);
+          .setName("NavPropertyETMediaOne")
+          .setType(EntityTypeProvider.nameETMedia);
 
   public static final NavigationProperty navPropertyETKeyPrimNavOne_ETKeyPrimNav = new NavigationProperty()
-      .setName("NavPropertyETKeyPrimNavOne")
-      .setType(EntityTypeProvider.nameETKeyPrimNav);
+          .setName("NavPropertyETKeyPrimNavOne")
+          .setType(EntityTypeProvider.nameETKeyPrimNav);
 
   public static final NavigationProperty navPropertyETTwoKeyNavOne_ETTwoKeyNav_NotNullable = new NavigationProperty()
-      .setName("NavPropertyETTwoKeyNavOne")
-      .setType(EntityTypeProvider.nameETTwoKeyNav)
-      .setNullable(false);
+          .setName("NavPropertyETTwoKeyNavOne")
+          .setType(EntityTypeProvider.nameETTwoKeyNav)
+          .setNullable(false);
 
   public static final NavigationProperty navPropertyETTwoKeyNavOne_ETTwoKeyNav = new NavigationProperty()
-      .setName("NavPropertyETTwoKeyNavOne")
-      .setType(EntityTypeProvider.nameETTwoKeyNav);
+          .setName("NavPropertyETTwoKeyNavOne")
+          .setType(EntityTypeProvider.nameETTwoKeyNav);
 
   public static final NavigationProperty navPropertyETTwoPrimOne_ETTwoPrim = new NavigationProperty()
-      .setName("NavPropertyETTwoPrimOne")
-      .setType(EntityTypeProvider.nameETTwoPrim)
-      .setNullable(false);
+          .setName("NavPropertyETTwoPrimOne")
+          .setType(EntityTypeProvider.nameETTwoPrim)
+          .setNullable(false);
 
   public static final NavigationProperty navPropertyETAllPrimOne_ETAllPrim = new NavigationProperty()
-      .setName("NavPropertyETAllPrimOne")
-      .setType(EntityTypeProvider.nameETAllPrim);
+          .setName("NavPropertyETAllPrimOne")
+          .setType(EntityTypeProvider.nameETAllPrim);
 
   // EnumProperties --------------------------------------------------------------------------------------------------
   public static final Property propertyEnumString_ENString = new Property()
-      .setName("PropertyEnumString")
-      .setType(EnumTypeProvider.nameENString);
+          .setName("PropertyEnumString")
+          .setType(EnumTypeProvider.nameENString);
 
   public static final Property collPropertyEnumString_ENString = new Property()
-      .setName("CollPropertyEnumString")
-      .setType(EnumTypeProvider.nameENString)
-      .setCollection(true);
+          .setName("CollPropertyEnumString")
+          .setType(EnumTypeProvider.nameENString)
+          .setCollection(true);
 
   // TypeDefinition Properties ---------------------------------------------------------------------------------------
   public static final Property propertyTypeDefinition_TDString = new Property()
-      .setName("PropertyDefString")
-      .setType(TypeDefinitionProvider.nameTDString)
-      .setMaxLength(15);
+          .setName("PropertyDefString")
+          .setType(TypeDefinitionProvider.nameTDString)
+          .setMaxLength(15);
 
   public static final Property collPropertyTypeDefinition_TDString = new Property()
-      .setName("CollPropertyDefString")
-      .setType(TypeDefinitionProvider.nameTDString)
-      .setMaxLength(15)
-      .setCollection(true);
+          .setName("CollPropertyDefString")
+          .setType(TypeDefinitionProvider.nameTDString)
+          .setMaxLength(15)
+          .setCollection(true);
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/de3f3453/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 c467f2e..6c48d73 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
@@ -574,15 +574,15 @@ public class ODataJsonDeserializerEntityTest extends AbstractODataDeserializerTe
   @Test
   public void validJsonValueForPrimPropertyInComplexTypeNull() throws Exception {
     final String entityString = "{"
-            + "\"PropertyComp\":{\"PropertyInt16\":null,\"PropertyString\":\"TEST A\"}"
+            + "\"PropertyComp\":{\"PropertyString\":\"TEST A\",\"PropertyInt16\":null}"
             + "}";
     InputStream stream = new ByteArrayInputStream(entityString.getBytes());
     ODataDeserializer deserializer = OData.newInstance().createDeserializer(ODataFormat.JSON);
     Entity entity = deserializer.entity(stream, edm.getEntityType(
-            new FullQualifiedName("Namespace1_Alias", "ETMixPrimCollComp")));
+            new FullQualifiedName("Namespace1_Alias", "ETCompAllPrim")));
 
-    assertNull(entity.getProperty("PropertyComp").asComplex().get(0).getValue());
-    assertEquals("TEST A", entity.getProperty("PropertyComp").asComplex().get(1).getValue());
+    assertEquals("TEST A", entity.getProperty("PropertyComp").asComplex().get(0).getValue());
+    assertNull(entity.getProperty("PropertyComp").asComplex().get(1).getValue());
   }
 
   @Test
@@ -1148,6 +1148,85 @@ public class ODataJsonDeserializerEntityTest extends AbstractODataDeserializerTe
   }
 
   @Test(expected = DeserializerException.class)
+  public void invalidNullValueForComplexTypeNullableFalse() throws Exception {
+    final String entityString = "{"
+        + "\"PropertyComp\":null"
+        + "}";
+    InputStream stream = new ByteArrayInputStream(entityString.getBytes());
+    ODataDeserializer deserializer = OData.newInstance().createDeserializer(ODataFormat.JSON);
+    try {
+      deserializer.entity(stream, edm.getEntityType(new FullQualifiedName("Namespace1_Alias", "ETTwoKeyNav")));
+    } catch (DeserializerException e) {
+      assertEquals(DeserializerException.MessageKeys.INVALID_NULL_PROPERTY, e.getMessageKey());
+      throw e;
+    }
+  }
+
+  @Test(expected = DeserializerException.class)
+  public void invalidNullValueForPrimBeforeComplexTypeNullableFalse() throws Exception {
+    final String entityString = "{"
+            + "\"PropertyInt16\": null, \"PropertyString\": \"321\", "
+            + "\"PropertyComp\":{\"PropertyInt16\": null, "
+            + "\"PropertyComp\": {\"PropertyString\":\"StringValue\"}}"
+            + "}";
+    InputStream stream = new ByteArrayInputStream(entityString.getBytes());
+    ODataDeserializer deserializer = OData.newInstance().createDeserializer(ODataFormat.JSON);
+    try {
+      deserializer.entity(stream, edm.getEntityType(new FullQualifiedName("Namespace1_Alias", "ETTwoKeyNav")));
+    } catch (DeserializerException e) {
+      assertEquals(DeserializerException.MessageKeys.INVALID_NULL_PROPERTY, e.getMessageKey());
+      throw e;
+    }
+  }
+
+  @Test(expected = DeserializerException.class)
+  public void invalidNullValueForComplexTypePropertyNullableFalse() throws Exception {
+    final String entityString = "{"
+            + "\"PropertyInt16\": 123, "
+            + "\"PropertyCompTwoPrim\":{\"PropertyInt16\": null, \"PropertyString\":\"StringValue\"}"
+            + "}";
+    InputStream stream = new ByteArrayInputStream(entityString.getBytes());
+    ODataDeserializer deserializer = OData.newInstance().createDeserializer(ODataFormat.JSON);
+    try {
+      deserializer.entity(stream, edm.getEntityType(new FullQualifiedName("Namespace1_Alias", "ETKeyNav")));
+    } catch (DeserializerException e) {
+      assertEquals(DeserializerException.MessageKeys.INVALID_NULL_PROPERTY, e.getMessageKey());
+      throw e;
+    }
+  }
+
+  @Test(expected = DeserializerException.class)
+  public void invalidNullValueForPrimCollectionNullableFalse() throws Exception {
+    final String entityString = "{"
+        + "\"CollPropertyString\":["
+        + "null,"
+        + "\"StringValue_1\",\"TEST 3\"]}";
+    InputStream stream = new ByteArrayInputStream(entityString.getBytes());
+    ODataDeserializer deserializer = OData.newInstance().createDeserializer(ODataFormat.JSON);
+    try {
+      deserializer.entity(stream, edm.getEntityType(new FullQualifiedName("Namespace1_Alias", "ETCollAllPrim")));
+    } catch (DeserializerException e) {
+      assertEquals(DeserializerException.MessageKeys.INVALID_NULL_PROPERTY, e.getMessageKey());
+      throw e;
+    }
+  }
+
+  @Test(expected = DeserializerException.class)
+  public void invalidNullValueForPrimIntCollectionNullableFalse() throws Exception {
+    final String entityString = "{"
+            + "\"CollPropertyInt16\":[123,\"null\",4711]"
+            + "}";
+    InputStream stream = new ByteArrayInputStream(entityString.getBytes());
+    ODataDeserializer deserializer = OData.newInstance().createDeserializer(ODataFormat.JSON);
+    try {
+      deserializer.entity(stream, edm.getEntityType(new FullQualifiedName("Namespace1_Alias", "ETCollAllPrim")));
+    } catch (DeserializerException e) {
+      assertEquals(DeserializerException.MessageKeys.INVALID_VALUE_FOR_PROPERTY, e.getMessageKey());
+      throw e;
+    }
+  }
+
+  @Test(expected = DeserializerException.class)
   public void provokedPrimitiveTypeException() throws Exception {
     final String entityString = "{"
         + "\"PropertyInt16\":32767000000000000000000000000000000000000"