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/10/16 15:38:50 UTC

olingo-odata2 git commit: [OLINGO-802] Added option to skip facet validation for Producer

Repository: olingo-odata2
Updated Branches:
  refs/heads/master 52c515e5e -> 0a70933b5


[OLINGO-802] Added option to skip facet validation for Producer


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

Branch: refs/heads/master
Commit: 0a70933b5d10913fef2d73199422bcd1223130f1
Parents: 52c515e
Author: mibo <mi...@mirb.de>
Authored: Fri Oct 16 15:33:47 2015 +0200
Committer: mibo <mi...@mirb.de>
Committed: Fri Oct 16 15:33:47 2015 +0200

----------------------------------------------------------------------
 .../api/ep/EntityProviderWriteProperties.java   | 11 ++++
 .../odata2/core/ep/AtomEntityProvider.java      |  6 +-
 .../ep/producer/AtomEntryEntityProducer.java    | 10 ++--
 .../producer/JsonCollectionEntityProducer.java  |  2 +-
 .../ep/producer/JsonEntryEntityProducer.java    |  9 ++-
 .../ep/producer/JsonPropertyEntityProducer.java | 17 +++---
 .../producer/XmlCollectionEntityProducer.java   |  2 +-
 .../ep/producer/XmlPropertyEntityProducer.java  | 19 ++++--
 .../core/ep/producer/AtomEntryProducerTest.java | 43 +++++++++++++-
 .../producer/JsonEntryEntityProducerTest.java   | 62 ++++++++++++++++++--
 .../ep/producer/JsonPropertyProducerTest.java   | 29 +++++++--
 .../ep/producer/XmlPropertyProducerTest.java    | 19 ++++++
 12 files changed, 186 insertions(+), 43 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/0a70933b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProviderWriteProperties.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProviderWriteProperties.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProviderWriteProperties.java
index 838c431..f1333d2 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProviderWriteProperties.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/ep/EntityProviderWriteProperties.java
@@ -45,6 +45,7 @@ public class EntityProviderWriteProperties {
   private boolean omitJsonWrapper;
   private boolean contentOnly;
   private boolean omitETag;
+  private boolean validatingFacets = true;
 
   private EntityProviderWriteProperties() {}
 
@@ -135,6 +136,10 @@ public class EntityProviderWriteProperties {
     return new ODataEntityProviderPropertiesBuilder().serviceRoot(serviceRoot);
   }
 
+  public boolean isValidatingFacets() {
+    return validatingFacets;
+  }
+
   public static class ODataEntityProviderPropertiesBuilder {
     private final EntityProviderWriteProperties properties = new EntityProviderWriteProperties();
 
@@ -235,6 +240,11 @@ public class EntityProviderWriteProperties {
       return this;
     }
 
+    public ODataEntityProviderPropertiesBuilder validatingFacets(final boolean validatingFacets) {
+      properties.validatingFacets = validatingFacets;
+      return this;
+    }
+
     public ODataEntityProviderPropertiesBuilder fromProperties(final EntityProviderWriteProperties properties) {
       this.properties.inlineCountType = properties.getInlineCountType();
       this.properties.inlineCount = properties.getInlineCount();
@@ -247,6 +257,7 @@ public class EntityProviderWriteProperties {
       this.properties.omitJsonWrapper = properties.omitJsonWrapper;
       this.properties.contentOnly = properties.contentOnly;
       this.properties.omitETag = properties.omitETag;
+      this.properties.validatingFacets = properties.validatingFacets;
       return this;
     }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/0a70933b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/AtomEntityProvider.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/AtomEntityProvider.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/AtomEntityProvider.java
index e788403..6dc6b7a 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/AtomEntityProvider.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/AtomEntityProvider.java
@@ -81,10 +81,6 @@ public class AtomEntityProvider implements ContentTypeBasedEntityProvider {
     this(ODataFormat.ATOM);
   }
 
-  public AtomEntityProvider(final ContentType contentType) throws EntityProviderException {
-    this(contentType.getODataFormat());
-  }
-
   public AtomEntityProvider(final ODataFormat odataFormat) throws EntityProviderException {
     if (odataFormat != ODataFormat.ATOM && odataFormat != ODataFormat.XML) {
       throw new EntityProviderException(EntityProviderException.ILLEGAL_ARGUMENT
@@ -205,7 +201,7 @@ public class AtomEntityProvider implements ContentTypeBasedEntityProvider {
       XMLStreamWriter writer = XMLOutputFactory.newInstance().createXMLStreamWriter(outStream, DEFAULT_CHARSET);
       writer.writeStartDocument(DEFAULT_CHARSET, XML_VERSION);
 
-      XmlPropertyEntityProducer ps = new XmlPropertyEntityProducer(false);
+      XmlPropertyEntityProducer ps = new XmlPropertyEntityProducer(false, true);
       ps.append(writer, propertyInfo, value);
 
       writer.flush();

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/0a70933b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/AtomEntryEntityProducer.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/AtomEntryEntityProducer.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/AtomEntryEntityProducer.java
index 9715f3d..c8da1d8 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/AtomEntryEntityProducer.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/AtomEntryEntityProducer.java
@@ -107,7 +107,7 @@ public class AtomEntryEntityProducer {
       if (eia.getEntityType().hasStream()) {
         // write all links
         if (!properties.isContentOnly()) {
-          appendAtomEditLink(writer, eia, data, selfLink);
+          appendAtomEditLink(writer, eia, selfLink);
           appendAtomContentLink(writer, eia, data, selfLink);
           appendAtomNavigationLinks(writer, eia, data);
         } else {
@@ -122,7 +122,7 @@ public class AtomEntryEntityProducer {
       } else {
         // write all links
         if (!properties.isContentOnly()) {
-          appendAtomEditLink(writer, eia, data, selfLink);
+          appendAtomEditLink(writer, eia, selfLink);
           appendAtomNavigationLinks(writer, eia, data);
         } else {
           appendAdditinalLinks(writer, eia, data);
@@ -173,7 +173,7 @@ public class AtomEntryEntityProducer {
     for (String tpName : noneSyndicationTargetPaths) {
       EntityPropertyInfo info = eia.getTargetPathInfo(tpName);
       final String name = info.getName();
-      XmlPropertyEntityProducer aps = new XmlPropertyEntityProducer(properties.isIncludeSimplePropertyType());
+      XmlPropertyEntityProducer aps = new XmlPropertyEntityProducer(properties);
       aps.appendCustomProperty(writer, name, info, data.get(name));
     }
   }
@@ -336,7 +336,7 @@ public class AtomEntryEntityProducer {
   }
 
   private void appendAtomEditLink(final XMLStreamWriter writer, final EntityInfoAggregator eia,
-      final Map<String, Object> data, final String selfLink) throws EntityProviderException {
+      final String selfLink) throws EntityProviderException {
     try {
       writer.writeStartElement(FormatXml.ATOM_LINK);
       writer.writeAttribute(FormatXml.ATOM_HREF, selfLink);
@@ -593,7 +593,7 @@ public class AtomEntryEntityProducer {
 
           if (isNotMappedViaCustomMapping(propertyInfo)) {
             Object value = data.get(propertyName);
-            XmlPropertyEntityProducer aps = new XmlPropertyEntityProducer(properties.isIncludeSimplePropertyType());
+            XmlPropertyEntityProducer aps = new XmlPropertyEntityProducer(properties);
             aps.append(writer, propertyInfo.getName(), propertyInfo, value);
           }
         }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/0a70933b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonCollectionEntityProducer.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonCollectionEntityProducer.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonCollectionEntityProducer.java
index 48900bf..4ba8577 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonCollectionEntityProducer.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonCollectionEntityProducer.java
@@ -62,7 +62,7 @@ public class JsonCollectionEntityProducer {
         } else {
           jsonStreamWriter.separator();
         }
-        JsonPropertyEntityProducer.appendPropertyValue(jsonStreamWriter, propertyInfo, item);
+        JsonPropertyEntityProducer.appendPropertyValue(jsonStreamWriter, propertyInfo, item, true);
       }
       jsonStreamWriter.endArray();
 

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/0a70933b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducer.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducer.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducer.java
index 63d3704..19736cf 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducer.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducer.java
@@ -186,14 +186,17 @@ public class JsonEntryEntityProducer {
     }
     for (final String propertyName : type.getPropertyNames()) {
       if (entityInfo.getSelectedPropertyNames().contains(propertyName)) {
-        if (omitComma == true) {
+        if (omitComma) {
           omitComma = false;
         } else {
           jsonStreamWriter.separator();
         }
         jsonStreamWriter.name(propertyName);
-        JsonPropertyEntityProducer.appendPropertyValue(jsonStreamWriter, entityInfo.getPropertyInfo(propertyName),
-            data.get(propertyName));
+
+        JsonPropertyEntityProducer.appendPropertyValue(jsonStreamWriter,
+            entityInfo.getPropertyInfo(propertyName),
+            data.get(propertyName),
+            properties.isValidatingFacets());
       }
     }
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/0a70933b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonPropertyEntityProducer.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonPropertyEntityProducer.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonPropertyEntityProducer.java
index ad222ba..6947910 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonPropertyEntityProducer.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/JsonPropertyEntityProducer.java
@@ -22,12 +22,7 @@ import java.io.IOException;
 import java.io.Writer;
 import java.util.Map;
 
-import org.apache.olingo.odata2.api.edm.Edm;
-import org.apache.olingo.odata2.api.edm.EdmException;
-import org.apache.olingo.odata2.api.edm.EdmLiteralKind;
-import org.apache.olingo.odata2.api.edm.EdmSimpleType;
-import org.apache.olingo.odata2.api.edm.EdmSimpleTypeKind;
-import org.apache.olingo.odata2.api.edm.EdmType;
+import org.apache.olingo.odata2.api.edm.*;
 import org.apache.olingo.odata2.api.ep.EntityProviderException;
 import org.apache.olingo.odata2.core.ep.aggregator.EntityComplexPropertyInfo;
 import org.apache.olingo.odata2.core.ep.aggregator.EntityPropertyInfo;
@@ -52,7 +47,7 @@ public class JsonPropertyEntityProducer {
 
       jsonStreamWriter.name(propertyInfo.getName());
       appendPropertyValue(jsonStreamWriter, propertyInfo.isComplex() ? (EntityComplexPropertyInfo) propertyInfo
-          : propertyInfo, value);
+          : propertyInfo, value, true);
 
       jsonStreamWriter.endObject()
           .endObject();
@@ -66,7 +61,8 @@ public class JsonPropertyEntityProducer {
   }
 
   protected static void appendPropertyValue(final JsonStreamWriter jsonStreamWriter,
-      final EntityPropertyInfo propertyInfo, final Object value) throws IOException, EdmException,
+                                            final EntityPropertyInfo propertyInfo, final Object value,
+                                            boolean validatingFacets) throws IOException, EdmException,
       EntityProviderException {
     if (propertyInfo.isComplex()) {
       if (value == null || value instanceof Map<?, ?>) {
@@ -78,7 +74,7 @@ public class JsonPropertyEntityProducer {
           final String name = childPropertyInfo.getName();
           jsonStreamWriter.name(name);
           appendPropertyValue(jsonStreamWriter, childPropertyInfo,
-              value == null ? null : ((Map<?, ?>) value).get(name));
+              value == null ? null : ((Map<?, ?>) value).get(name), validatingFacets);
         }
         jsonStreamWriter.endObject();
       } else {
@@ -88,7 +84,8 @@ public class JsonPropertyEntityProducer {
     } else {
       final EdmSimpleType type = (EdmSimpleType) propertyInfo.getType();
       final Object contentValue = value instanceof Map ? ((Map<?, ?>) value).get(propertyInfo.getName()) : value;
-      final String valueAsString = type.valueToString(contentValue, EdmLiteralKind.JSON, propertyInfo.getFacets());
+      final EdmFacets facets = validatingFacets ? propertyInfo.getFacets(): null;
+      final String valueAsString = type.valueToString(contentValue, EdmLiteralKind.JSON, facets);
       switch (EdmSimpleTypeKind.valueOf(type.getName())) {
       case String:
         jsonStreamWriter.stringValue(valueAsString);

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/0a70933b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/XmlCollectionEntityProducer.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/XmlCollectionEntityProducer.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/XmlCollectionEntityProducer.java
index ef6fcb7..bf0bc8c 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/XmlCollectionEntityProducer.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/XmlCollectionEntityProducer.java
@@ -42,7 +42,7 @@ public class XmlCollectionEntityProducer {
       if (propertyInfo.isComplex()) {
         writer.writeNamespace(Edm.PREFIX_M, Edm.NAMESPACE_M_2007_08);
       }
-      XmlPropertyEntityProducer provider = new XmlPropertyEntityProducer(false);
+      XmlPropertyEntityProducer provider = new XmlPropertyEntityProducer(false, true);
       for (final Object propertyData : data) {
         provider.append(writer, FormatXml.D_ELEMENT, propertyInfo, propertyData);
       }

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/0a70933b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/XmlPropertyEntityProducer.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/XmlPropertyEntityProducer.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/XmlPropertyEntityProducer.java
index bf89349..433e79e 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/XmlPropertyEntityProducer.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/producer/XmlPropertyEntityProducer.java
@@ -27,9 +27,11 @@ import javax.xml.stream.XMLStreamWriter;
 import org.apache.olingo.odata2.api.edm.Edm;
 import org.apache.olingo.odata2.api.edm.EdmCustomizableFeedMappings;
 import org.apache.olingo.odata2.api.edm.EdmException;
+import org.apache.olingo.odata2.api.edm.EdmFacets;
 import org.apache.olingo.odata2.api.edm.EdmLiteralKind;
 import org.apache.olingo.odata2.api.edm.EdmSimpleType;
 import org.apache.olingo.odata2.api.ep.EntityProviderException;
+import org.apache.olingo.odata2.api.ep.EntityProviderWriteProperties;
 import org.apache.olingo.odata2.core.ep.aggregator.EntityComplexPropertyInfo;
 import org.apache.olingo.odata2.core.ep.aggregator.EntityPropertyInfo;
 import org.apache.olingo.odata2.core.ep.util.FormatXml;
@@ -40,10 +42,16 @@ import org.apache.olingo.odata2.core.ep.util.FormatXml;
  */
 public class XmlPropertyEntityProducer {
 
-  private final boolean inculdeSimplePropertyType;
+  private final boolean includeSimplePropertyType;
+  private final boolean validateFacets;
 
-  public XmlPropertyEntityProducer(final boolean inculdeSimplePropertyType) {
-    this.inculdeSimplePropertyType = inculdeSimplePropertyType;
+  public XmlPropertyEntityProducer(final EntityProviderWriteProperties writeProperties) {
+    this(writeProperties.isIncludeSimplePropertyType(), writeProperties.isValidatingFacets());
+  }
+
+  public XmlPropertyEntityProducer(final boolean includeSimplePropertyType, final boolean validateFacets) {
+    this.includeSimplePropertyType = includeSimplePropertyType;
+    this.validateFacets = validateFacets;
   }
 
   /**
@@ -193,12 +201,13 @@ public class XmlPropertyEntityProducer {
     }
 
     final EdmSimpleType type = (EdmSimpleType) prop.getType();
-    if (inculdeSimplePropertyType) {
+    if (includeSimplePropertyType) {
       String fqnTypeName = type.getNamespace() + Edm.DELIMITER + type.getName();
       writer.writeAttribute(Edm.NAMESPACE_M_2007_08, FormatXml.ATOM_TYPE, fqnTypeName);
     }
 
-    final String valueAsString = type.valueToString(contentValue, EdmLiteralKind.DEFAULT, prop.getFacets());
+    final EdmFacets facets = validateFacets ? prop.getFacets() : null;
+    final String valueAsString = type.valueToString(contentValue, EdmLiteralKind.DEFAULT, facets);
     if (valueAsString == null) {
       writer.writeAttribute(Edm.NAMESPACE_M_2007_08, FormatXml.ATOM_NULL, FormatXml.ATOM_VALUE_TRUE);
     } else {

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/0a70933b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/AtomEntryProducerTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/AtomEntryProducerTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/AtomEntryProducerTest.java
index f3e4545..ff429af 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/AtomEntryProducerTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/AtomEntryProducerTest.java
@@ -40,6 +40,7 @@ import java.util.TimeZone;
 import javax.xml.stream.FactoryConfigurationError;
 import javax.xml.stream.XMLStreamException;
 
+import junit.framework.Assert;
 import org.apache.olingo.odata2.api.edm.Edm;
 import org.apache.olingo.odata2.api.edm.EdmConcurrencyMode;
 import org.apache.olingo.odata2.api.edm.EdmCustomizableFeedMappings;
@@ -277,8 +278,7 @@ public class AtomEntryProducerTest extends AbstractProviderTest {
 
     AtomEntityProvider ser = createAtomEntityProvider();
     ODataResponse response =
-        ser.writeEntry(entitySet, localEmployeeData,
-            properties);
+        ser.writeEntry(entitySet, localEmployeeData, properties);
     String xmlString = verifyResponse(response);
     assertXpathExists("/a:entry", xmlString);
     assertXpathEvaluatesTo(BASE_URI.toASCIIString(), "/a:entry/@xml:base", xmlString);
@@ -1012,6 +1012,45 @@ public class AtomEntryProducerTest extends AbstractProviderTest {
     assertXpathEvaluatesTo("W/\"<\">.3\"", "/a:entry/@m:etag", xmlString);
   }
 
+  @Test(expected = EntityProviderException.class)
+  public void serializeWithFacetsValidation() throws Exception {
+    Edm edm = MockFacade.getMockEdm();
+    EdmTyped roomNameProperty = edm.getEntityType("RefScenario", "Room").getProperty("Name");
+    EdmFacets facets = mock(EdmFacets.class);
+    when(facets.getMaxLength()).thenReturn(3);
+    when(((EdmProperty) roomNameProperty).getFacets()).thenReturn(facets);
+
+    roomData.put("Name", "1234567");
+    AtomEntityProvider ser = createAtomEntityProvider();
+    ODataResponse response =
+      ser.writeEntry(edm.getDefaultEntityContainer().getEntitySet("Rooms"), roomData, DEFAULT_PROPERTIES);
+    Assert.assertNotNull(response);
+  }
+
+  @Test
+  public void serializeWithoutFacetsValidation() throws Exception {
+    Edm edm = MockFacade.getMockEdm();
+    EdmTyped roomNameProperty = edm.getEntityType("RefScenario", "Room").getProperty("Name");
+    EdmFacets facets = mock(EdmFacets.class);
+    when(facets.getMaxLength()).thenReturn(3);
+    when(((EdmProperty) roomNameProperty).getFacets()).thenReturn(facets);
+
+    String name = "1234567";
+    roomData.put("Name", name);
+    AtomEntityProvider ser = createAtomEntityProvider();
+    EntityProviderWriteProperties properties = EntityProviderWriteProperties
+        .fromProperties(DEFAULT_PROPERTIES).validatingFacets(false).build();
+    ODataResponse response =
+        ser.writeEntry(edm.getDefaultEntityContainer().getEntitySet("Rooms"), roomData, properties);
+    assertNotNull(response);
+
+
+    assertNotNull(response.getEntity());
+    String xmlString = StringHelper.inputStreamToString((InputStream) response.getEntity());
+
+    assertXpathEvaluatesTo(name, "/a:entry/a:content/m:properties/d:Name/text()", xmlString);
+  }
+
   @Test
   public void serializeCustomMapping() throws IOException, XpathException, SAXException, XMLStreamException,
       FactoryConfigurationError, ODataException {

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/0a70933b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducerTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducerTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducerTest.java
index 069457b..67b65d2 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducerTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonEntryEntityProducerTest.java
@@ -39,11 +39,7 @@ import java.util.Map;
 import java.util.TimeZone;
 
 import org.apache.olingo.odata2.api.ODataCallback;
-import org.apache.olingo.odata2.api.edm.EdmEntitySet;
-import org.apache.olingo.odata2.api.edm.EdmEntityType;
-import org.apache.olingo.odata2.api.edm.EdmFacets;
-import org.apache.olingo.odata2.api.edm.EdmMapping;
-import org.apache.olingo.odata2.api.edm.EdmProperty;
+import org.apache.olingo.odata2.api.edm.*;
 import org.apache.olingo.odata2.api.ep.EntityProviderException;
 import org.apache.olingo.odata2.api.ep.EntityProviderWriteProperties;
 import org.apache.olingo.odata2.api.ep.callback.OnWriteEntryContent;
@@ -315,6 +311,62 @@ public class JsonEntryEntityProducerTest extends BaseTest {
         json);
   }
 
+  @Test(expected = EdmSimpleTypeException.class)
+  public void serializeWithFacetsValidation() throws Throwable {
+    Edm edm = MockFacade.getMockEdm();
+    EdmTyped roomNameProperty = edm.getEntityType("RefScenario", "Room").getProperty("Name");
+    EdmFacets facets = mock(EdmFacets.class);
+    when(facets.getMaxLength()).thenReturn(3);
+    when(((EdmProperty) roomNameProperty).getFacets()).thenReturn(facets);
+    EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Rooms");
+
+    String name = "1234567";
+    Map<String, Object> roomData = new HashMap<String, Object>();
+    roomData.put("Id", "4711");
+    roomData.put("Name", name);
+    EntityProviderWriteProperties properties = EntityProviderWriteProperties
+        .fromProperties(DEFAULT_PROPERTIES).validatingFacets(true).build();
+    try {
+      final ODataResponse response = new JsonEntityProvider().writeEntry(entitySet, roomData, properties);
+      final String json = verifyResponse(response);
+      assertNotNull(response);
+      assertEquals("{\"__metadata\":{\"id\":\"" + BASE_URI + "Teams('1')\","
+              + "\"uri\":\"" + BASE_URI + "Teams('1')\",\"type\":\"RefScenario.Team\"},"
+              + "\"Id\":\"1\",\"Name\":null,\"isScrumTeam\":true,"
+              + "\"nt_Employees\":{\"__deferred\":{\"uri\":\"" + BASE_URI + "Teams('1')/nt_Employees\"}}}",
+          json);
+    } catch(EntityProviderException e) {
+      throw e.getCause();
+    }
+  }
+
+  @Test
+  public void serializeWithoutFacetsValidation() throws Exception {
+    Edm edm = MockFacade.getMockEdm();
+    EdmTyped roomNameProperty = edm.getEntityType("RefScenario", "Room").getProperty("Name");
+    EdmFacets facets = mock(EdmFacets.class);
+    when(facets.getMaxLength()).thenReturn(3);
+    when(((EdmProperty) roomNameProperty).getFacets()).thenReturn(facets);
+    EdmEntitySet entitySet = edm.getDefaultEntityContainer().getEntitySet("Rooms");
+
+    String name = "1234567890";
+    Map<String, Object> roomData = new HashMap<String, Object>();
+    roomData.put("Id", "4711");
+    roomData.put("Name", name);
+    EntityProviderWriteProperties properties = EntityProviderWriteProperties
+        .fromProperties(DEFAULT_PROPERTIES).validatingFacets(false).build();
+    final ODataResponse response = new JsonEntityProvider().writeEntry(entitySet, roomData, properties);
+    final String json = verifyResponse(response);
+    assertNotNull(response);
+    assertEquals("{\"d\":{\"__metadata\":{\"id\":\"http://host:80/service/Rooms('4711')\"," +
+            "\"uri\":\"http://host:80/service/Rooms('4711')\",\"type\":\"RefScenario.Room\"}," +
+            "\"Id\":\"4711\",\"Name\":\"1234567890\",\"Seats\":null,\"Version\":null," +
+            "\"nr_Employees\":{\"__deferred\":{\"uri\":\"http://host:80/service/Rooms('4711')/nr_Employees\"}}," +
+            "\"nr_Building\":{\"__deferred\":{\"uri\":\"http://host:80/service/Rooms('4711')/nr_Building\"}}}}",
+        json);
+  }
+
+
   @Test(expected = EntityProviderException.class)
   public void entryWithNullData() throws Exception {
     final EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Teams");

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/0a70933b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonPropertyProducerTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonPropertyProducerTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonPropertyProducerTest.java
index ac31a80..b6515ce 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonPropertyProducerTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/JsonPropertyProducerTest.java
@@ -18,10 +18,6 @@
  ******************************************************************************/
 package org.apache.olingo.odata2.core.ep.producer;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-
 import java.io.InputStream;
 import java.util.Arrays;
 import java.util.Calendar;
@@ -32,6 +28,9 @@ import java.util.Map;
 import org.apache.olingo.odata2.api.ODataServiceVersion;
 import org.apache.olingo.odata2.api.commons.ODataHttpHeaders;
 import org.apache.olingo.odata2.api.edm.EdmProperty;
+import org.apache.olingo.odata2.api.edm.EdmSimpleTypeException;
+import org.apache.olingo.odata2.api.edm.EdmTyped;
+import org.apache.olingo.odata2.api.ep.EntityProviderException;
 import org.apache.olingo.odata2.api.processor.ODataResponse;
 import org.apache.olingo.odata2.core.ep.JsonEntityProvider;
 import org.apache.olingo.odata2.testutil.fit.BaseTest;
@@ -39,6 +38,8 @@ import org.apache.olingo.odata2.testutil.helper.StringHelper;
 import org.apache.olingo.odata2.testutil.mock.MockFacade;
 import org.junit.Test;
 
+import static org.junit.Assert.*;
+
 /**
  *  
  */
@@ -52,7 +53,7 @@ public class JsonPropertyProducerTest extends BaseTest {
     final ODataResponse response = new JsonEntityProvider().writeProperty(property, "\"Игорь\tНиколаевич\tЛарионов\"");
     assertNotNull(response);
     assertNotNull(response.getEntity());
-    assertNull("EntitypProvider must not set content header", response.getContentHeader());
+    assertNull("EntityProvider must not set content header", response.getContentHeader());
     assertEquals(ODataServiceVersion.V10, response.getHeader(ODataHttpHeaders.DATASERVICEVERSION));
 
     final String json = StringHelper.inputStreamToString((InputStream) response.getEntity());
@@ -71,7 +72,7 @@ public class JsonPropertyProducerTest extends BaseTest {
     final ODataResponse response = new JsonEntityProvider().writeProperty(property, propertyValue);
     assertNotNull(response);
     assertNotNull(response.getEntity());
-    assertNull("EntitypProvider must not set content header", response.getContentHeader());
+    assertNull("EntityProvider must not set content header", response.getContentHeader());
     assertEquals(ODataServiceVersion.V10, response.getHeader(ODataHttpHeaders.DATASERVICEVERSION));
 
     final String json = StringHelper.inputStreamToString((InputStream) response.getEntity());
@@ -80,6 +81,22 @@ public class JsonPropertyProducerTest extends BaseTest {
   }
 
   @Test
+  public void serializeRoomIdWithFacets() throws Exception {
+    EdmTyped edmTyped = MockFacade.getMockEdm().getEntityType("RefScenario", "Room").getProperty("Id");
+    EdmProperty edmProperty = (EdmProperty) edmTyped;
+
+    String id = StringHelper.generateData(1000);
+    try {
+      final ODataResponse response = new JsonEntityProvider().writeProperty(edmProperty, id);
+      assertNotNull(response);
+    } catch(EntityProviderException e) {
+      assertNotNull(e.getCause());
+      assertTrue(e.getCause() instanceof EdmSimpleTypeException);
+    }
+  }
+
+
+  @Test
   public void serializeNumber() throws Exception {
     final EdmProperty property =
         (EdmProperty) MockFacade.getMockEdm().getEntityType("RefScenario", "Employee").getProperty("Age");

http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/0a70933b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/XmlPropertyProducerTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/XmlPropertyProducerTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/XmlPropertyProducerTest.java
index c04b9c4..001e2ba 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/XmlPropertyProducerTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/producer/XmlPropertyProducerTest.java
@@ -22,12 +22,15 @@ import static org.custommonkey.xmlunit.XMLAssert.assertXpathEvaluatesTo;
 import static org.custommonkey.xmlunit.XMLAssert.assertXpathExists;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 
 import java.io.InputStream;
 
 import org.apache.olingo.odata2.api.edm.EdmEntityType;
 import org.apache.olingo.odata2.api.edm.EdmProperty;
+import org.apache.olingo.odata2.api.edm.EdmSimpleTypeException;
 import org.apache.olingo.odata2.api.edm.EdmTyped;
+import org.apache.olingo.odata2.api.ep.EntityProviderException;
 import org.apache.olingo.odata2.api.processor.ODataResponse;
 import org.apache.olingo.odata2.core.ep.AbstractProviderTest;
 import org.apache.olingo.odata2.core.ep.AtomEntityProvider;
@@ -63,6 +66,22 @@ public class XmlPropertyProducerTest extends AbstractProviderTest {
   }
 
   @Test
+  public void serializeRoomIdWithFacets() throws Exception {
+    AtomEntityProvider s = createAtomEntityProvider();
+    EdmTyped edmTyped = MockFacade.getMockEdm().getEntityType("RefScenario", "Room").getProperty("Id");
+    EdmProperty edmProperty = (EdmProperty) edmTyped;
+
+    String id = StringHelper.generateData(1000);
+    try {
+      ODataResponse response = s.writeProperty(edmProperty, id);
+      assertNotNull(response);
+    } catch(EntityProviderException e) {
+      assertNotNull(e.getCause());
+      assertTrue(e.getCause() instanceof EdmSimpleTypeException);
+    }
+  }
+
+  @Test
   public void serializeAge() throws Exception {
     AtomEntityProvider s = createAtomEntityProvider();