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