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

Reply via email to