You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ch...@apache.org on 2015/01/19 11:05:21 UTC

olingo-odata4 git commit: [OLINGO-538] Fix: MetadataDocumentXmlSerializer serializes abstract property of complex types

Repository: olingo-odata4
Updated Branches:
  refs/heads/master 2591c86c8 -> af64cb1fa


[OLINGO-538] Fix: MetadataDocumentXmlSerializer serializes abstract property of complex types

Signed-off-by: Christian Amend <ch...@apache.org>


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

Branch: refs/heads/master
Commit: af64cb1fa9f5815c750748ea1976c9992f06af27
Parents: 2591c86
Author: Christian Holzer <c....@sap.com>
Authored: Mon Jan 19 10:31:34 2015 +0100
Committer: Christian Amend <ch...@apache.org>
Committed: Mon Jan 19 10:58:31 2015 +0100

----------------------------------------------------------------------
 .../xml/MetadataDocumentXmlSerializer.java      |  9 ++++-
 .../xml/MetadataDocumentXmlSerializerTest.java  | 40 +++++++++++++++++++-
 2 files changed, 46 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/af64cb1f/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java
index 2ab7809..d962d82 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializer.java
@@ -58,6 +58,7 @@ import org.apache.olingo.server.api.serializer.ODataSerializer;
 
 public class MetadataDocumentXmlSerializer {
 
+  private static final String TRUE = "true";
   private static final String XML_EXTENDS = "Extends";
   private static final String XML_TARGET = "Target";
   private static final String XML_PATH = "Path";
@@ -423,7 +424,11 @@ public class MetadataDocumentXmlSerializer {
       if (complexType.getBaseType() != null) {
         writer.writeAttribute(XML_BASE_TYPE, getAliasedFullQualifiedName(complexType.getBaseType(), false));
       }
-
+      
+      if(complexType.isAbstract()) {
+        writer.writeAttribute(ABSTRACT, TRUE);
+      }
+      
       appendProperties(writer, complexType);
 
       appendNavigationProperties(writer, complexType);
@@ -447,7 +452,7 @@ public class MetadataDocumentXmlSerializer {
       }
 
       if (entityType.isAbstract()) {
-        writer.writeAttribute(ABSTRACT, "true");
+        writer.writeAttribute(ABSTRACT, TRUE);
       }
 
       appendKey(writer, entityType);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/af64cb1f/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializerTest.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializerTest.java b/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializerTest.java
index 55e5279..8b54fdf 100644
--- a/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializerTest.java
+++ b/lib/server-core/src/test/java/org/apache/olingo/server/core/serializer/xml/MetadataDocumentXmlSerializerTest.java
@@ -34,6 +34,7 @@ import java.util.List;
 import org.apache.commons.io.IOUtils;
 import org.apache.olingo.commons.api.ODataException;
 import org.apache.olingo.commons.api.edm.Edm;
+import org.apache.olingo.commons.api.edm.EdmComplexType;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
 import org.apache.olingo.commons.api.edm.EdmSchema;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
@@ -65,6 +66,7 @@ import org.apache.olingo.server.api.edmx.EdmxReferenceIncludeAnnotation;
 import org.apache.olingo.server.api.serializer.ODataSerializer;
 import org.apache.olingo.server.api.serializer.SerializerException;
 import org.apache.olingo.server.core.ServiceMetadataImpl;
+import org.apache.olingo.server.core.edm.provider.EdmComplexTypeImpl;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
@@ -227,7 +229,43 @@ public class MetadataDocumentXmlSerializerTest {
     assertTrue(metadata.contains("<FunctionImport Name=\"FINRTInt16\" " +
         "Function=\"Alias.UFNRTInt16\" IncludeInServiceDocument=\"true\"/>"));
   }
-
+  
+  @Test
+  public void writeAbstractComplexType() throws Exception {
+    EdmSchema schema = mock(EdmSchema.class);
+    when(schema.getNamespace()).thenReturn("MyNamespace");
+    Edm edm = mock(Edm.class);
+    when(edm.getSchemas()).thenReturn(Arrays.asList(schema));
+    ServiceMetadata serviceMetadata = mock(ServiceMetadata.class);
+    when(serviceMetadata.getEdm()).thenReturn(edm);
+    List<EdmComplexType> complexTypes = new ArrayList<EdmComplexType>();
+
+    FullQualifiedName name = new FullQualifiedName("namespace", "ComplexType");
+    ComplexType complexType = new ComplexType();
+    complexType.setAbstract(true);
+    complexType.setName(name.getName());
+    complexType.setOpenType(true);
+    List<Property> properties = new ArrayList<Property>();
+    
+    properties.add(new Property().setName("prop1").setType(EdmPrimitiveTypeKind.String.getFullQualifiedName()));
+    properties.add(new Property().setName("prop2").setType(EdmPrimitiveTypeKind.String.getFullQualifiedName()));
+    
+    complexType.setProperties(properties);
+    EdmComplexTypeImpl c1 = EdmComplexTypeImpl.getInstance(edm, name, complexType);
+    complexTypes.add(c1);
+    
+    when(schema.getComplexTypes()).thenReturn(complexTypes);
+    
+    
+    InputStream metadataStream = serializer.metadataDocument(serviceMetadata);
+    String metadata = IOUtils.toString(metadataStream);
+    
+    assertTrue(metadata.contains("<ComplexType Name=\"ComplexType\" Abstract=\"true\">" 
+        + "<Property Name=\"prop1\" Type=\"Edm.String\"/>" 
+        + "<Property Name=\"prop2\" Type=\"Edm.String\"/>" 
+        + "</ComplexType>"));
+  }
+  
   private class LocalProvider extends EdmProvider {
     private final static String nameSpace = "namespace";