added method writeComplex to xml reader to fix the bug. Modified constant default_charset.
Signed-off-by: Christian Amend <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/olingo-odata4/repo Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata4/commit/d3c30cfd Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/d3c30cfd Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/d3c30cfd Branch: refs/heads/master Commit: d3c30cfd28f821c7053a91697fbd1f10ce746ac6 Parents: be1228c Author: Morten Riedel <[email protected]> Authored: Tue Jul 26 09:28:22 2016 +0200 Committer: Christian Amend <[email protected]> Committed: Wed Jul 27 10:20:49 2016 +0200 ---------------------------------------------------------------------- .../server/api/serializer/ODataSerializer.java | 3 +- .../core/serializer/xml/ODataXmlSerializer.java | 38 ++++++++++++-------- .../json/ODataJsonSerializerTest.java | 1 - 3 files changed, 25 insertions(+), 17 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d3c30cfd/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/ODataSerializer.java ---------------------------------------------------------------------- diff --git a/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/ODataSerializer.java b/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/ODataSerializer.java index 432e1de..4f6974d 100644 --- a/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/ODataSerializer.java +++ b/lib/server-api/src/main/java/org/apache/olingo/server/api/serializer/ODataSerializer.java @@ -18,6 +18,7 @@ */ package org.apache.olingo.server.api.serializer; +import org.apache.olingo.commons.api.Constants; import org.apache.olingo.commons.api.data.Entity; import org.apache.olingo.commons.api.data.AbstractEntityCollection; import org.apache.olingo.commons.api.data.EntityIterator; @@ -33,7 +34,7 @@ import org.apache.olingo.server.api.ServiceMetadata; public interface ODataSerializer { /** The default character set is UTF-8. */ - public static final String DEFAULT_CHARSET = "UTF-8"; + public static final String DEFAULT_CHARSET = Constants.UTF8; /** * Writes the service document into an InputStream. http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d3c30cfd/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/ODataXmlSerializer.java ---------------------------------------------------------------------- diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/ODataXmlSerializer.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/ODataXmlSerializer.java index b3d815b..6f8d513 100644 --- a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/ODataXmlSerializer.java +++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/ODataXmlSerializer.java @@ -81,7 +81,6 @@ import org.apache.olingo.server.core.serializer.utils.ExpandSelectHelper; public class ODataXmlSerializer extends AbstractODataSerializer { /** The default character set is UTF-8. */ - public static final String DEFAULT_CHARSET = Constants.UTF8; private static final String ATOM = "a"; private static final String NS_ATOM = Constants.NS_ATOM; private static final String METADATA = Constants.PREFIX_METADATA; @@ -770,10 +769,7 @@ public class ODataXmlSerializer extends AbstractODataSerializer { writeComplexCollection(metadata, (EdmComplexType) edmProperty.getType(), property, selectedPaths, xml10InvalidCharReplacement, writer); } else { - writer.writeAttribute(METADATA, NS_METADATA, Constants.ATTR_TYPE, - "#" + complexType(metadata, (EdmComplexType) edmProperty.getType(), property.getType())); - writeComplexValue(metadata, property, (EdmComplexType) edmProperty.getType(), property.asComplex().getValue(), - selectedPaths, xml10InvalidCharReplacement, writer); + writeComplex(metadata, edmProperty, property, selectedPaths, xml10InvalidCharReplacement, writer); } } else { throw new SerializerException("Property type not yet supported!", @@ -786,6 +782,22 @@ public class ODataXmlSerializer extends AbstractODataSerializer { } } + private void writeComplex(final ServiceMetadata metadata, + final EdmProperty edmProperty, final Property property, + final Set<List<String>> selectedPaths, + final String xml10InvalidCharReplacement, final XMLStreamWriter writer) + throws XMLStreamException, SerializerException{ + + writer.writeAttribute(METADATA, NS_METADATA, Constants.ATTR_TYPE, + "#" + complexType(metadata, (EdmComplexType) edmProperty.getType(), + property.getType())); + String derivedName = property.getType(); + final EdmComplexType resolvedType = resolveComplexType(metadata, + (EdmComplexType) edmProperty.getType(), derivedName); + + writeComplexValue(metadata, resolvedType, property.asComplex().getValue(), + selectedPaths, xml10InvalidCharReplacement, writer); + } private void writePrimitiveCollection(final EdmPrimitiveType type, final Property property, final Boolean isNullable, final Integer maxLength, final Integer precision, final Integer scale, final Boolean isUnicode, final String xml10InvalidCharReplacement, @@ -820,7 +832,7 @@ public class ODataXmlSerializer extends AbstractODataSerializer { } switch (property.getValueType()) { case COLLECTION_COMPLEX: - writeComplexValue(metadata, property, type, + writeComplexValue(metadata, type, ((ComplexValue) value).getValue(), selectedPaths, xml10InvalidCharReplacement, writer); break; @@ -875,18 +887,14 @@ public class ODataXmlSerializer extends AbstractODataSerializer { } protected void writeComplexValue(final ServiceMetadata metadata, - Property complexProperty, final EdmComplexType type, - final List<Property> properties, final Set<List<String>> selectedPaths, - final String xml10InvalidCharReplacement, final XMLStreamWriter writer) - throws XMLStreamException, SerializerException { - - final EdmComplexType resolvedType = resolveComplexType(metadata, - type, complexProperty.getType()); + final EdmComplexType type, final List<Property> properties, + final Set<List<String>> selectedPaths, final String xml10InvalidCharReplacement, + final XMLStreamWriter writer) throws XMLStreamException, SerializerException { - for (final String propertyName : resolvedType.getPropertyNames()) { + for (final String propertyName : type.getPropertyNames()) { final Property property = findProperty(propertyName, properties); if (selectedPaths == null || ExpandSelectHelper.isSelected(selectedPaths, propertyName)) { - writeProperty(metadata, (EdmProperty) resolvedType.getProperty(propertyName), property, + writeProperty(metadata, (EdmProperty) type.getProperty(propertyName), property, selectedPaths == null ? null : ExpandSelectHelper.getReducedSelectedPaths(selectedPaths, propertyName), xml10InvalidCharReplacement, writer); } http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d3c30cfd/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java ---------------------------------------------------------------------- diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java index 156420e..536c1ac 100644 --- a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java +++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerTest.java @@ -953,7 +953,6 @@ public class ODataJsonSerializerTest { "\"PropertyComp\":{\"@odata.type\":\"#olingo.odata.test1.CTCompCompExtended\"," + "\"PropertyComp\":{\"PropertyInt16\":987,\"PropertyString\":\"String 2\"},\"PropertyDate\":\"2012-12-03\"}}]}"; Assert.assertEquals(expected, resultString); - } @Test
