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 <[email protected]> Authored: Fri Oct 16 15:33:47 2015 +0200 Committer: mibo <[email protected]> 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();
