Repository: olingo-odata4
Updated Branches:
  refs/heads/master deb1d2036 -> 37a1e110c


[OLINGO-1004] removed CTCompCompExtended and added CTBase in ESFourKeyAlias 
instead

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/d30f47ec
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata4/tree/d30f47ec
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata4/diff/d30f47ec

Branch: refs/heads/master
Commit: d30f47ec6b476e99904ccbdc3521a16a39c261a4
Parents: deb1d20
Author: Morten Riedel <[email protected]>
Authored: Tue Aug 16 15:11:43 2016 +0200
Committer: Christian Amend <[email protected]>
Committed: Wed Aug 17 09:43:38 2016 +0200

----------------------------------------------------------------------
 .../olingo/server/tecsvc/data/DataCreator.java  |  10 +-
 .../tecsvc/provider/ComplexTypeProvider.java    |   8 -
 .../json/ODataJsonDeserializerEntityTest.java   |  45 ++--
 .../xml/ODataXmlDeserializerTest.java           |  65 +++--
 .../json/ODataJsonSerializerTest.java           |  96 ++++---
 .../serializer/xml/ODataXmlSerializerTest.java  | 266 ++++++++-----------
 6 files changed, 234 insertions(+), 256 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d30f47ec/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataCreator.java
----------------------------------------------------------------------
diff --git 
a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataCreator.java
 
b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataCreator.java
index aac9a34..542e393 100644
--- 
a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataCreator.java
+++ 
b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/data/DataCreator.java
@@ -196,9 +196,10 @@ public class DataCreator {
         .addProperty(createComplex("PropertyCompComp",
             ComplexTypeProvider.nameCTCompComp.getFullQualifiedNameAsString(),
             createComplex("PropertyComp",
-                
ComplexTypeProvider.nameCTTwoPrim.getFullQualifiedNameAsString(),
+                ComplexTypeProvider.nameCTBase.getFullQualifiedNameAsString(),
                 createPrimitive("PropertyInt16", (short) 111),
-                createPrimitive("PropertyString", "Num111")
+                createPrimitive("PropertyString", "Num111"),
+                createPrimitive("AdditionalPropString", "Test123")
             )
             ))
         );
@@ -1197,12 +1198,11 @@ public class DataCreator {
     entity = new Entity();
     entity.addProperty(createPrimitive("PropertyInt16", (short) 2));
     entity.addProperty(createComplex("PropertyComp", 
-        
ComplexTypeProvider.nameCTCompCompExtended.getFullQualifiedNameAsString(), 
+        ComplexTypeProvider.nameCTCompComp.getFullQualifiedNameAsString(), 
         createComplex("PropertyComp",
             ComplexTypeProvider.nameCTTwoPrim.getFullQualifiedNameAsString(),
             createPrimitive("PropertyInt16", (short) 987),
-            createPrimitive("PropertyString", "String 2")),
-        createPrimitive("PropertyDate", getDate(2012, 12, 3))));
+            createPrimitive("PropertyString", "String 2"))));
     entityCollection.getEntities().add(entity);
 
     setEntityType(entityCollection, 
edm.getEntityType(EntityTypeProvider.nameETCompComp));

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d30f47ec/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ComplexTypeProvider.java
----------------------------------------------------------------------
diff --git 
a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ComplexTypeProvider.java
 
b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ComplexTypeProvider.java
index 7d539b6..b04b3d1 100644
--- 
a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ComplexTypeProvider.java
+++ 
b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/provider/ComplexTypeProvider.java
@@ -38,8 +38,6 @@ public class ComplexTypeProvider {
   public static final FullQualifiedName nameCTCompCollComp = new 
FullQualifiedName(SchemaProvider.NAMESPACE,
       "CTCompCollComp");
   public static final FullQualifiedName nameCTCompComp = new 
FullQualifiedName(SchemaProvider.NAMESPACE, "CTCompComp");
-  public static final FullQualifiedName nameCTCompCompExtended = new 
FullQualifiedName(
-      SchemaProvider.NAMESPACE, "CTCompCompExtended");
   public static final FullQualifiedName nameCTCompNav = new 
FullQualifiedName(SchemaProvider.NAMESPACE, "CTCompNav");
 
   public static final FullQualifiedName nameCTMixPrimCollComp = new 
FullQualifiedName(SchemaProvider.NAMESPACE,
@@ -126,12 +124,6 @@ public class ComplexTypeProvider {
       return new CsdlComplexType()
           .setName("CTCompComp")
           
.setProperties(Arrays.asList(PropertyProvider.propertyComp_CTTwoPrim));
-
-    } else if (complexTypeName.equals(nameCTCompCompExtended)) {
-      return new CsdlComplexType()
-        .setName("CTCompCompExtended")
-        .setBaseType(nameCTCompComp)
-        .setProperties(Arrays.asList(PropertyProvider.propertyDate));
       
     } else if (complexTypeName.equals(nameCTCompCollComp)) {
       return new CsdlComplexType()

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d30f47ec/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerEntityTest.java
----------------------------------------------------------------------
diff --git 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerEntityTest.java
 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerEntityTest.java
index c92edfc..d91f3ff 100644
--- 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerEntityTest.java
+++ 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/json/ODataJsonDeserializerEntityTest.java
@@ -46,7 +46,6 @@ import org.apache.olingo.commons.api.edm.EdmProperty;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.edm.provider.CsdlMapping;
 import org.apache.olingo.commons.api.format.ContentType;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmDate;
 import org.apache.olingo.server.api.OData;
 import org.apache.olingo.server.api.deserializer.DeserializerException;
 import org.apache.olingo.server.api.deserializer.DeserializerResult;
@@ -229,26 +228,34 @@ public class ODataJsonDeserializerEntityTest extends 
AbstractODataDeserializerTe
         + "\"@odata.etag\":\"W/\\\"32767\\\"\","
         + "\"PropertyInt16\":32767,"
         + "\"PropertyComp\":{"
-        + "\"@odata.type\":\"#olingo.odata.test1.CTCompCompExtended\","
-        +   "\"PropertyComp\":{"
-        +   "\"@odata.type\":\"#olingo.odata.test1.CTTwoPrim\","
-        +   "\"PropertyInt16\":32767,"
-        +   "\"PropertyString\":\"First Resource - first\""
-        +   "},"
-        +   "\"PropertyDate\":\"2012-10-03\""
-        + "}}";
-    final Entity result = deserialize(payload, "ETCompComp");
+            +  "\"@odata.type\":\"#olingo.odata.test1.CTTwoPrim\","
+            +  "\"PropertyInt16\":11,"
+            +  "\"PropertyString\":\"Num11\""
+        +  "},"
+        +  "\"PropertyCompComp\":{"
+            +  "\"@odata.type\":\"#olingo.odata.test1.CTCompComp\","
+            +  "\"PropertyComp\":{"
+            +  "\"@odata.type\":\"#olingo.odata.test1.CTBase\","
+            +  "\"PropertyInt16\":32767,"
+            +  "\"PropertyString\":\"Num111\","
+            +  "\"AdditionalPropString\":\"Test123\""
+        +  "}}}";
+    final Entity result = deserialize(payload, "ETFourKeyAlias");
     
     Assert.assertNotNull(result);
-    Property property = result.getProperty("PropertyComp");
-    Assert.assertEquals("PropertyComp", property.getName());    
-    Assert.assertTrue(property.isComplex());
-    final ComplexValue cv = property.asComplex();
-    Assert.assertEquals("olingo.odata.test1.CTCompCompExtended", 
property.getType());
-    Assert.assertEquals(
-        "2012-10-03",
-        EdmDate.getInstance().valueToString(getCVProperty(cv, 
"PropertyDate").asPrimitive(), false, 10, 3, 0,
-        false));
+    Property propertyCompComp = result.getProperty("PropertyCompComp");
+    Assert.assertEquals("PropertyCompComp", propertyCompComp.getName());   
+    Assert.assertEquals("olingo.odata.test1.CTCompComp", 
propertyCompComp.getType());
+    Assert.assertTrue(propertyCompComp.isComplex());
+    
+    ComplexValue complexValuePropComp = propertyCompComp.asComplex();    
+    Property propertyComp = getCVProperty(complexValuePropComp, 
"PropertyComp");
+    Assert.assertEquals("PropertyComp", propertyComp.getName()); 
+    Assert.assertEquals("olingo.odata.test1.CTBase", propertyComp.getType());
+    Assert.assertTrue(propertyComp.isComplex());  
+    
+    final ComplexValue cvAdditionalString = propertyComp.asComplex();
+    Assert.assertEquals("Test123",getCVProperty(cvAdditionalString, 
"AdditionalPropString").asPrimitive());
   }  
   
   @Test

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d30f47ec/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/xml/ODataXmlDeserializerTest.java
----------------------------------------------------------------------
diff --git 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/xml/ODataXmlDeserializerTest.java
 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/xml/ODataXmlDeserializerTest.java
index 416c219..0daee4d 100644
--- 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/xml/ODataXmlDeserializerTest.java
+++ 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/deserializer/xml/ODataXmlDeserializerTest.java
@@ -32,6 +32,7 @@ import org.apache.olingo.commons.api.data.Link;
 import org.apache.olingo.commons.api.data.Property;
 import org.apache.olingo.commons.api.edm.EdmEntityContainer;
 import org.apache.olingo.commons.api.edm.EdmEntitySet;
+import org.apache.olingo.commons.api.edm.EdmEntityType;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
@@ -537,42 +538,50 @@ public class ODataXmlDeserializerTest extends 
AbstractODataDeserializerTest {
 
   @Test
   public void extendedComplexProperty() throws Exception {
-    final EdmEntitySet edmEntitySet = 
entityContainer.getEntitySet("ESCompComp");
+    final EdmEntitySet edmEntitySet = 
entityContainer.getEntitySet("ESFourKeyAlias");
     
     String payload = "<?xml version='1.0' encoding='UTF-8'?>"
         + "<atom:entry xmlns:atom=\"http://www.w3.org/2005/Atom\"; "
         + "xmlns:metadata=\"http://docs.oasis-open.org/odata/ns/metadata\"; "
-        + "xmlns:data=\"http://docs.oasis-open.org/odata/ns/data\"; "
-        + "metadata:etag=\"W/&quot;32767&quot;\">"
+        + "xmlns:data=\"http://docs.oasis-open.org/odata/ns/data\";>"
           + "<atom:category 
scheme=\"http://docs.oasis-open.org/odata/ns/scheme\"; "
-          + "term=\"#olingo.odata.test1.ETCompComp\"/>"
-          + "<atom:content type=\"application/xml\">"
-            + "<metadata:properties>"
-              + "<data:PropertyInt16>32767</data:PropertyInt16>"
-              + "<data:PropertyComp 
metadata:type=\"#olingo.odata.test1.CTCompCompExtended\">"
-                + "<data:PropertyComp 
metadata:type=\"#olingo.odata.test1.CTTwoPrim\">"
-                  + "<data:PropertyInt16>32767</data:PropertyInt16>"
-                  + "<data:PropertyString>First Resource - 
first</data:PropertyString>"
-                  + "</data:PropertyComp>"
-                  + "<data:PropertyDate>2012-10-03</data:PropertyDate>"
-              + "</data:PropertyComp>"
-            + "</metadata:properties>"
-          + "</atom:content>"
-        + "</atom:entry>";
+          + "term=\"#olingo.odata.test1.ETFourKeyAlias\"/>"
+          +  "<atom:content type=\"application/xml\">"
+                +  "<metadata:properties>"
+                    +  "<data:PropertyInt16 
metadata:type=\"Int16\">1</data:PropertyInt16>"
+                    +  "<data:PropertyComp 
metadata:type=\"#olingo.odata.test1.CTTwoPrim\">"
+                        +  "<data:PropertyInt16 
metadata:type=\"Int16\">11</data:PropertyInt16>"
+                        +  "<data:PropertyString>Num11</data:PropertyString>"
+                    +  "</data:PropertyComp>"
+                    +  "<data:PropertyCompComp 
metadata:type=\"#olingo.odata.test1.CTCompComp\">"
+                        +  "<data:PropertyComp 
metadata:type=\"#olingo.odata.test1.CTBase\">"
+                            +  "<data:PropertyInt16 
metadata:type=\"Int16\">111</data:PropertyInt16>"
+                            +  
"<data:PropertyString>Num111</data:PropertyString>"
+                            +  
"<data:AdditionalPropString>Test123</data:AdditionalPropString>"
+                        +  "</data:PropertyComp>"
+                    +  "</data:PropertyCompComp>"
+                +  "</metadata:properties>"
+              +  "</atom:content>"
+          +  "</atom:entry>";
     
-    Entity result = deserializer.entity(new 
ByteArrayInputStream(payload.getBytes()), 
-        edmEntitySet.getEntityType()).getEntity();
+    EdmEntityType entityType = edmEntitySet.getEntityType();
+    Entity result = deserializer.entity(new 
ByteArrayInputStream(payload.getBytes()), entityType)
+            .getEntity();
 
     Assert.assertNotNull(result);
-    Property property = result.getProperty("PropertyComp");
-    Assert.assertEquals("PropertyComp", property.getName());    
-    Assert.assertTrue(property.isComplex());
-    final ComplexValue cv = property.asComplex();
-    Assert.assertEquals("olingo.odata.test1.CTCompCompExtended", 
property.getType());
-    Assert.assertEquals(
-        "2012-10-03",
-        EdmDate.getInstance().valueToString(getCVProperty(cv, 
"PropertyDate").asPrimitive(), false, 10, 3, 0,
-        false));
+    Property propertyCompComp = result.getProperty("PropertyCompComp");
+    Assert.assertEquals("PropertyCompComp", propertyCompComp.getName());   
+    Assert.assertEquals("olingo.odata.test1.CTCompComp", 
propertyCompComp.getType());
+    Assert.assertTrue(propertyCompComp.isComplex());
+    
+    ComplexValue complexValuePropComp = propertyCompComp.asComplex();    
+    Property propertyComp = getCVProperty(complexValuePropComp, 
"PropertyComp");
+    Assert.assertEquals("PropertyComp", propertyComp.getName()); 
+    Assert.assertEquals("olingo.odata.test1.CTBase", propertyComp.getType());
+    Assert.assertTrue(propertyComp.isComplex());  
+    
+    final ComplexValue cvAdditionalString = propertyComp.asComplex();
+    Assert.assertEquals("Test123",getCVProperty(cvAdditionalString, 
"AdditionalPropString").asPrimitive());
   }
   
   @Test

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d30f47ec/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 536c1ac..22b8807 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
@@ -904,11 +904,12 @@ public class ODataJsonSerializerTest {
 
   @Test
   public void selectComplex() throws Exception {
-    final EdmEntitySet edmEntitySet = 
entityContainer.getEntitySet("ESCompComp");
+    final EdmEntitySet edmEntitySet = 
entityContainer.getEntitySet("ESFourKeyAlias");
     final EdmEntityType entityType = edmEntitySet.getEntityType();
     final EntityCollection entitySet = data.readAll(edmEntitySet);
-    final SelectOption select = 
ExpandSelectMock.mockSelectOption(Collections.singletonList(
-        ExpandSelectMock.mockSelectItem(edmEntitySet, "PropertyComp", 
"PropertyComp", "PropertyString")));
+   final SelectOption select = ExpandSelectMock.mockSelectOption(Arrays.asList(
+        ExpandSelectMock.mockSelectItem(edmEntitySet, "PropertyInt16"),
+        ExpandSelectMock.mockSelectItem(edmEntitySet,"PropertyCompComp", 
"PropertyComp", "PropertyString")));
     InputStream result = serializer
         .entityCollection(metadata, entityType, entitySet,
             EntityCollectionSerializerOptions.with()
@@ -918,21 +919,26 @@ public class ODataJsonSerializerTest {
                 .select(select)
                 .build()).getContent();
     final String resultString = IOUtils.toString(result);
-    Assert.assertEquals("{"
-        + 
"\"@odata.context\":\"$metadata#ESCompComp(PropertyComp/PropertyComp/PropertyString)\","
-        + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\","
-        + "\"value\":["
-        + "{\"@odata.id\":\"ESCompComp(1)\",\"PropertyComp\":"
-        + "{\"PropertyComp\":{\"PropertyString\":\"String 1\"}}},"
-        + "{\"@odata.id\":\"ESCompComp(2)\",\"PropertyComp\":"
-        + "{\"@odata.type\":\"#olingo.odata.test1.CTCompCompExtended\","
-        + "\"PropertyComp\":{\"PropertyString\":\"String 2\"}}}]}",
-        resultString);
+    final String expected = "{"
+           +     "\"@odata.context\":\"$metadata#ESFourKeyAlias"
+           +        
"(PropertyInt16,PropertyCompComp/PropertyComp/PropertyString)\"," 
+           +     "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\","
+           +     "\"value\":[" 
+           +     "{" 
+           +         "\"@odata.id\":\"id\"," 
+           +         "\"PropertyInt16\":1," 
+           +         "\"PropertyCompComp\":{" 
+           +             "\"PropertyComp\":{" 
+           +             "\"@odata.type\":\"#olingo.odata.test1.CTBase\"," 
+           +             "\"PropertyString\":\"Num111\"" 
+           +     "}}}]}";
+    
+   Assert.assertEquals(expected, resultString);
   }
   
   @Test
   public void selectExtendedComplexType() throws Exception {
-    final EdmEntitySet edmEntitySet = 
entityContainer.getEntitySet("ESCompComp");
+    final EdmEntitySet edmEntitySet = 
entityContainer.getEntitySet("ESFourKeyAlias");
     final EdmEntityType entityType = edmEntitySet.getEntityType();
     final EntityCollection entitySet = data.readAll(edmEntitySet);
     InputStream result = serializer
@@ -942,27 +948,34 @@ public class ODataJsonSerializerTest {
                 .build()).getContent();
     final String resultString = IOUtils.toString(result);
     
-    String expected = "{" + 
-        "\"@odata.context\":\"$metadata#ESCompComp\"," + 
-        "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\"," + 
-        "\"value\":[" + 
-        "{\"PropertyInt16\":1," +
-        "\"PropertyComp\":{\"PropertyComp\":{" + 
-        "\"PropertyInt16\":123,\"PropertyString\":\"String 1\"}}}," + 
-        "{\"PropertyInt16\":2," + 
-        
"\"PropertyComp\":{\"@odata.type\":\"#olingo.odata.test1.CTCompCompExtended\"," 
+ 
-        "\"PropertyComp\":{\"PropertyInt16\":987,\"PropertyString\":\"String 
2\"},\"PropertyDate\":\"2012-12-03\"}}]}";
+    String expected = "{"
+            + "\"@odata.context\":\"$metadata#ESFourKeyAlias\","
+            + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\","
+            + "\"value\":[{"
+                + "\"PropertyInt16\":1,"
+                + "\"PropertyComp\":{"
+                    + "\"PropertyInt16\":11,"
+                    + "\"PropertyString\":\"Num11\""
+                + "},"
+                + "\"PropertyCompComp\":{"
+                    + "\"PropertyComp\":{"
+                        + "\"@odata.type\":\"#olingo.odata.test1.CTBase\","
+                        + "\"PropertyInt16\":111,"
+                        + "\"PropertyString\":\"Num111\","
+                        + "\"AdditionalPropString\":\"Test123\""
+            + "}}}]}";
+    
     Assert.assertEquals(expected, resultString);
   }  
 
   @Test
   public void selectComplexTwice() throws Exception {
-    final EdmEntitySet edmEntitySet = 
entityContainer.getEntitySet("ESCompComp");
+    final EdmEntitySet edmEntitySet = 
entityContainer.getEntitySet("ESFourKeyAlias");
     final EdmEntityType entityType = edmEntitySet.getEntityType();
     final EntityCollection entitySet = data.readAll(edmEntitySet);
     final SelectOption select = 
ExpandSelectMock.mockSelectOption(Arrays.asList(
-        ExpandSelectMock.mockSelectItem(edmEntitySet, "PropertyComp", 
"PropertyComp", "PropertyString"),
-        ExpandSelectMock.mockSelectItem(edmEntitySet, "PropertyComp", 
"PropertyComp")));
+        ExpandSelectMock.mockSelectItem(edmEntitySet, "PropertyComp", 
"PropertyString"),
+        ExpandSelectMock.mockSelectItem(edmEntitySet, "PropertyCompComp", 
"PropertyComp")));
     final String resultString = IOUtils.toString(serializer
         .entityCollection(metadata, entityType, entitySet,
             EntityCollectionSerializerOptions.with()
@@ -971,16 +984,25 @@ public class ODataJsonSerializerTest {
                     .build())
                 .select(select)
                 .build()).getContent());
-    Assert.assertEquals("{"
-        + 
"\"@odata.context\":\"$metadata#ESCompComp(PropertyComp/PropertyComp)\","
-        + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\","
-        + "\"value\":["
-        + 
"{\"@odata.id\":\"ESCompComp(1)\",\"PropertyComp\":{\"PropertyComp\":{\"PropertyInt16\":123,"
-        + "\"PropertyString\":\"String 1\"}}},"
-        + "{\"@odata.id\":\"ESCompComp(2)\",\"PropertyComp\":"
-        + "{\"@odata.type\":\"#olingo.odata.test1.CTCompCompExtended\","
-        + "\"PropertyComp\":{\"PropertyInt16\":987,\"PropertyString\":\"String 
2\"}}}]}",
-        resultString);
+    
+    String expected = "{"
+            + "\"@odata.context\":\"$metadata#ESFourKeyAlias"
+            +   
"(PropertyComp/PropertyString,PropertyCompComp/PropertyComp)\","
+            + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\","
+            + "\"value\":[{"
+                + "\"@odata.id\":\"id\","
+                + "\"PropertyComp\":{"
+                    + "\"PropertyString\":\"Num11\""
+                + "},"
+                + "\"PropertyCompComp\":{"
+                    + "\"PropertyComp\":{"
+                        + "\"@odata.type\":\"#olingo.odata.test1.CTBase\","
+                        + "\"PropertyInt16\":111,"
+                        + "\"PropertyString\":\"Num111\","
+                        + "\"AdditionalPropString\":\"Test123\""
+            + "}}}]}";
+    
+    Assert.assertEquals(expected, resultString);
   }
 
     @Test

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d30f47ec/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/ODataXmlSerializerTest.java
----------------------------------------------------------------------
diff --git 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/ODataXmlSerializerTest.java
 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/ODataXmlSerializerTest.java
index d110622..e9928dd 100644
--- 
a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/ODataXmlSerializerTest.java
+++ 
b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/xml/ODataXmlSerializerTest.java
@@ -1153,11 +1153,12 @@ public class ODataXmlSerializerTest {
 
   @Test
   public void selectComplex() throws Exception {
-    final EdmEntitySet edmEntitySet = 
entityContainer.getEntitySet("ESCompComp");
+    final EdmEntitySet edmEntitySet = 
entityContainer.getEntitySet("ESFourKeyAlias");
     final EdmEntityType entityType = edmEntitySet.getEntityType();
     final EntityCollection entitySet = data.readAll(edmEntitySet);
     final SelectOption select = 
ExpandSelectMock.mockSelectOption(Arrays.asList(
-        ExpandSelectMock.mockSelectItem(edmEntitySet, "PropertyComp", 
"PropertyComp", "PropertyString")));
+        ExpandSelectMock.mockSelectItem(edmEntitySet, "PropertyInt16"),
+        ExpandSelectMock.mockSelectItem(edmEntitySet,"PropertyCompComp", 
"PropertyComp", "PropertyString")));
     long currentTimeMillis = System.currentTimeMillis();
     InputStream result = serializer
         .entityCollection(metadata, entityType, entitySet,
@@ -1165,66 +1166,47 @@ public class ODataXmlSerializerTest {
                 .contextURL(ContextURL.with().entitySet(edmEntitySet)
                     .selectList(helper.buildContextURLSelectList(entityType, 
null, select))
                     .build())
-                .id("http://host/svc/ESCompComp";)
+                .id("http://host/svc/ESFourKeyAlias";)
                 .select(select)
                 .build()).getContent();
     final String resultString = IOUtils.toString(result);
     final String expected = "<?xml version='1.0' encoding='UTF-8'?>\n" +
         "<a:feed xmlns:a=\"http://www.w3.org/2005/Atom\"\n"; +
-        "  xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\"\n"; +
-        "  xmlns:d=\"http://docs.oasis-open.org/odata/ns/data\"\n"; +
-        "  
m:context=\"$metadata#ESCompComp(PropertyComp/PropertyComp/PropertyString)\"\n" 
+
-        "  m:metadata-etag=\"metadataETag\">\n" +
-        "  <a:id>http://host/svc/ESCompComp</a:id>\n" +
-        "  <a:entry>\n" +
-        "    <a:id>ESCompComp(1)</a:id>\n" +
-        "    <a:title />\n" +
-        "    <a:summary />\n" +
-        "<a:updated>" + UPDATED_FORMAT.format(new Date(currentTimeMillis)) + 
"</a:updated>" +
-        "    <a:author>\n" +
-        "      <a:name />\n" +
-        "    </a:author>\n" +
-        "    <a:link rel=\"edit\" href=\"ESCompComp(1)\"/>\n" +
-        "    <a:category 
scheme=\"http://docs.oasis-open.org/odata/ns/scheme\"\n"; +
-        "      term=\"#olingo.odata.test1.ETCompComp\" />\n" +
-        "    <a:content type=\"application/xml\">\n" +
-        "      <m:properties>\n" +
-        "        <d:PropertyComp m:type=\"#olingo.odata.test1.CTCompComp\">\n" 
+
-        "          <d:PropertyComp 
m:type=\"#olingo.odata.test1.CTTwoPrim\">\n" +
-        "            <d:PropertyString>String 1</d:PropertyString>\n" +
-        "          </d:PropertyComp>\n" +
-        "        </d:PropertyComp>\n" +
-        "      </m:properties>\n" +
-        "    </a:content>\n" +
-        "  </a:entry>\n" +
-        "  <a:entry>\n" +
-        "    <a:id>ESCompComp(2)</a:id>\n" +
-        "    <a:title />\n" +
-        "    <a:summary />\n" +
-        "<a:updated>" + UPDATED_FORMAT.format(new Date(currentTimeMillis)) + 
"</a:updated>" +
-        "    <a:author>\n" +
-        "      <a:name />\n" +
-        "    </a:author>\n" +
-        "    <a:link rel=\"edit\" href=\"ESCompComp(2)\"/>\n" +
-        "    <a:category 
scheme=\"http://docs.oasis-open.org/odata/ns/scheme\"\n"; +
-        "      term=\"#olingo.odata.test1.ETCompComp\" />\n" +
-        "    <a:content type=\"application/xml\">\n" +
-        "      <m:properties>\n" +
-        "        <d:PropertyComp 
m:type=\"#olingo.odata.test1.CTCompCompExtended\">\n" +
-        "          <d:PropertyComp 
m:type=\"#olingo.odata.test1.CTTwoPrim\">\n" +
-        "            <d:PropertyString>String 2</d:PropertyString>\n" +
-        "          </d:PropertyComp>\n" +
-        "        </d:PropertyComp>\n" +
-        "      </m:properties>\n" +
-        "    </a:content>\n" +
-        "  </a:entry>\n" +
-        "</a:feed>\n";
+            "xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\"\n"; +
+            "xmlns:d=\"http://docs.oasis-open.org/odata/ns/data\"; \n" +
+            "m:context=\"$metadata#ESFourKeyAlias" + 
+            "(PropertyInt16,PropertyCompComp/PropertyComp/PropertyString)\"\n" 
+
+            "m:metadata-etag=\"metadataETag\">\n" +
+            "<a:id>http://host/svc/ESFourKeyAlias</a:id>\n" +
+            "<a:entry>\n" +
+                "<a:id>id</a:id>\n" +
+                "<a:title />\n" +
+                "<a:summary />\n" +
+                "<a:updated>" + UPDATED_FORMAT.format(new 
Date(currentTimeMillis)) + "</a:updated>" +
+                "<a:author>\n" +
+                    "<a:name/>\n" +
+                "</a:author>\n" +
+                "<a:link rel=\"edit\" href=\"id\"/>\n" +
+                "<a:category 
scheme=\"http://docs.oasis-open.org/odata/ns/scheme\"; " +
+                  "term=\"#olingo.odata.test1.ETFourKeyAlias\"/>\n" +
+                "<a:content type=\"application/xml\">\n" +
+                "<m:properties>\n" +
+                    "<d:PropertyInt16 m:type=\"Int16\">1</d:PropertyInt16>\n" +
+                    "<d:PropertyCompComp 
m:type=\"#olingo.odata.test1.CTCompComp\">\n" +
+                    "<d:PropertyComp m:type=\"#olingo.odata.test1.CTBase\">\n" 
+
+                        "<d:PropertyString>Num111</d:PropertyString>\n" +
+                        "</d:PropertyComp>\n" +
+                        "</d:PropertyCompComp>\n" +
+                    "</m:properties>\n" +
+                "</a:content>\n" +
+            "</a:entry>\n" +
+        "</a:feed>";
     checkXMLEqual(expected, resultString);
   }
 
   @Test
   public void selectComplexExtended() throws Exception {
-    final EdmEntitySet edmEntitySet = 
entityContainer.getEntitySet("ESCompComp");
+    final EdmEntitySet edmEntitySet = 
entityContainer.getEntitySet("ESFourKeyAlias");
     final EdmEntityType entityType = edmEntitySet.getEntityType();
     final EntityCollection entitySet = data.readAll(edmEntitySet);
     long currentTimeMillis = System.currentTimeMillis();
@@ -1232,73 +1214,56 @@ public class ODataXmlSerializerTest {
         .entityCollection(metadata, entityType, entitySet,
             EntityCollectionSerializerOptions.with()
                 .contextURL(ContextURL.with().entitySet(edmEntitySet).build())
-                .id("http://host/svc/ESCompComp";)
+                .id("http://host/svc/ESFourKeyAlias";)
                 .build()).getContent();
     final String resultString = IOUtils.toString(result);
-    String expected = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + 
-        "<a:feed xmlns:a=\"http://www.w3.org/2005/Atom\"; 
xmlns:d=\"http://docs.oasis-open.org/odata/ns/data\"; "
-        + "xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\"; 
m:context=\"$metadata#ESCompComp\" "
-        + "m:metadata-etag=\"metadataETag\">\n" + 
-        "   <a:id>http://host/svc/ESCompComp</a:id>\n" + 
-        "   <a:entry>\n" + 
-        "      <a:id>ESCompComp(1)</a:id>\n" + 
-        "      <a:title />\n" + 
-        "      <a:summary />\n" + 
-        "      <a:updated>"+ UPDATED_FORMAT.format(new 
Date(currentTimeMillis)) +"</a:updated>\n" + 
-        "      <a:author>\n" + 
-        "         <a:name />\n" + 
-        "      </a:author>\n" + 
-        "      <a:link rel=\"edit\" href=\"ESCompComp(1)\" />\n" + 
-        "      <a:category 
scheme=\"http://docs.oasis-open.org/odata/ns/scheme\"; "
-        + "term=\"#olingo.odata.test1.ETCompComp\" />\n" + 
-        "      <a:content type=\"application/xml\">\n" + 
-        "         <m:properties>\n" + 
-        "            <d:PropertyInt16 m:type=\"Int16\">1</d:PropertyInt16>\n" 
+ 
-        "            <d:PropertyComp 
m:type=\"#olingo.odata.test1.CTCompComp\">\n" + 
-        "               <d:PropertyComp 
m:type=\"#olingo.odata.test1.CTTwoPrim\">\n" + 
-        "                  <d:PropertyInt16 
m:type=\"Int16\">123</d:PropertyInt16>\n" + 
-        "                  <d:PropertyString>String 1</d:PropertyString>\n" + 
-        "               </d:PropertyComp>\n" + 
-        "            </d:PropertyComp>\n" + 
-        "         </m:properties>\n" + 
-        "      </a:content>\n" + 
-        "   </a:entry>\n" + 
-        "   <a:entry>\n" + 
-        "      <a:id>ESCompComp(2)</a:id>\n" + 
-        "      <a:title />\n" + 
-        "      <a:summary />\n" + 
-        "      <a:updated>"+ UPDATED_FORMAT.format(new 
Date(currentTimeMillis)) +"</a:updated>\n" + 
-        "      <a:author>\n" + 
-        "         <a:name />\n" + 
-        "      </a:author>\n" + 
-        "      <a:link rel=\"edit\" href=\"ESCompComp(2)\" />\n" + 
-        "      <a:category 
scheme=\"http://docs.oasis-open.org/odata/ns/scheme\"; "
-        + "term=\"#olingo.odata.test1.ETCompComp\" />\n" + 
-        "      <a:content type=\"application/xml\">\n" + 
-        "         <m:properties>\n" + 
-        "            <d:PropertyInt16 m:type=\"Int16\">2</d:PropertyInt16>\n" 
+ 
-        "            <d:PropertyComp 
m:type=\"#olingo.odata.test1.CTCompCompExtended\">\n" + 
-        "               <d:PropertyComp 
m:type=\"#olingo.odata.test1.CTTwoPrim\">\n" + 
-        "                  <d:PropertyInt16 
m:type=\"Int16\">987</d:PropertyInt16>\n" + 
-        "                  <d:PropertyString>String 2</d:PropertyString>\n" + 
-        "               </d:PropertyComp>\n" + 
-        "               <d:PropertyDate 
m:type=\"Date\">2012-12-03</d:PropertyDate>\n" + 
-        "            </d:PropertyComp>\n" + 
-        "         </m:properties>\n" + 
-        "      </a:content>\n" + 
-        "   </a:entry>\n" + 
+    String expected = "<?xml version='1.0' encoding='UTF-8'?>\n" +
+        "<a:feed xmlns:a=\"http://www.w3.org/2005/Atom\"\n"; +
+            "xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\"\n"; +
+            "xmlns:d=\"http://docs.oasis-open.org/odata/ns/data\"; \n" +
+            "m:context=\"$metadata#ESFourKeyAlias\"\n" +
+            "m:metadata-etag=\"metadataETag\">\n" +
+            "<a:id>http://host/svc/ESFourKeyAlias</a:id>\n" +
+            "<a:entry>\n" +
+                "<a:id>id</a:id>\n" +
+                "<a:title />\n" +
+                "<a:summary />\n" +
+                "<a:updated>" + UPDATED_FORMAT.format(new 
Date(currentTimeMillis)) + "</a:updated>" +
+                "<a:author>\n" +
+                    "<a:name/>\n" +
+                "</a:author>\n" +
+                "<a:link rel=\"edit\" href=\"id\"/>\n" +
+                "<a:category 
scheme=\"http://docs.oasis-open.org/odata/ns/scheme\"; " +
+                  "term=\"#olingo.odata.test1.ETFourKeyAlias\"/>\n" +
+               "<a:content type=\"application/xml\">\n" +
+                    "<m:properties>\n" +
+                    "<d:PropertyInt16 m:type=\"Int16\">1</d:PropertyInt16>\n" +
+                    "<d:PropertyComp 
m:type=\"#olingo.odata.test1.CTTwoPrim\">\n" +
+                        "<d:PropertyInt16 
m:type=\"Int16\">11</d:PropertyInt16>\n" +
+                        "<d:PropertyString>Num11</d:PropertyString>\n" +
+                    "</d:PropertyComp>\n" +
+                    "<d:PropertyCompComp 
m:type=\"#olingo.odata.test1.CTCompComp\">\n" +
+                        "<d:PropertyComp 
m:type=\"#olingo.odata.test1.CTBase\">\n" +
+                            "<d:PropertyInt16 
m:type=\"Int16\">111</d:PropertyInt16>\n" +
+                            "<d:PropertyString>Num111</d:PropertyString>\n" +
+                            
"<d:AdditionalPropString>Test123</d:AdditionalPropString>\n" +
+                        "</d:PropertyComp>\n" +
+                    "</d:PropertyCompComp>\n" +
+                    "</m:properties>\n" +
+                "</a:content>\n" +
+            "</a:entry>\n" +
         "</a:feed>";
     checkXMLEqual(expected, resultString);
   }
   
   @Test
   public void selectComplexTwice() throws Exception {
-    final EdmEntitySet edmEntitySet = 
entityContainer.getEntitySet("ESCompComp");
+    final EdmEntitySet edmEntitySet = 
entityContainer.getEntitySet("ESFourKeyAlias");
     final EdmEntityType entityType = edmEntitySet.getEntityType();
     final EntityCollection entitySet = data.readAll(edmEntitySet);
     final SelectOption select = 
ExpandSelectMock.mockSelectOption(Arrays.asList(
-        ExpandSelectMock.mockSelectItem(edmEntitySet, "PropertyComp", 
"PropertyComp", "PropertyString"),
-        ExpandSelectMock.mockSelectItem(edmEntitySet, "PropertyComp", 
"PropertyComp")));
+        ExpandSelectMock.mockSelectItem(edmEntitySet, "PropertyComp", 
"PropertyString"),
+        ExpandSelectMock.mockSelectItem(edmEntitySet, "PropertyCompComp", 
"PropertyComp")));
     long currentTimeMillis = System.currentTimeMillis();
     InputStream inputStream = serializer
         .entityCollection(metadata, entityType, entitySet,
@@ -1306,62 +1271,45 @@ public class ODataXmlSerializerTest {
                 .contextURL(ContextURL.with().entitySet(edmEntitySet)
                     .selectList(helper.buildContextURLSelectList(entityType, 
null, select))
                     .build())
-                .id("http://host/svc/ESCompComp";)
+                .id("http://host/svc/ESFourKeyAlias";)
                 .select(select)
                 .build()).getContent();
     final String resultString = IOUtils.toString(inputStream);
     String expected = "<?xml version='1.0' encoding='UTF-8'?>\n" +
         "<a:feed xmlns:a=\"http://www.w3.org/2005/Atom\"\n"; +
-        "  xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\"\n"; +
-        "  xmlns:d=\"http://docs.oasis-open.org/odata/ns/data\"; \n" +
-        "  m:context=\"$metadata#ESCompComp(PropertyComp/PropertyComp)\"\n" +
-        "  m:metadata-etag=\"metadataETag\">\n" +
-        "  <a:id>http://host/svc/ESCompComp</a:id>\n" +
-        "  <a:entry>\n" +
-        "    <a:id>ESCompComp(1)</a:id>\n" +
-        "    <a:title />\n" +
-        "    <a:summary />\n" +
-        "    <a:updated>" + UPDATED_FORMAT.format(new Date(currentTimeMillis)) 
+ "</a:updated>" +
-        "    <a:author>\n" +
-        "      <a:name />\n" +
-        "    </a:author>\n" +
-        "    <a:link rel=\"edit\" href=\"ESCompComp(1)\"/>\n" +
-        "    <a:category 
scheme=\"http://docs.oasis-open.org/odata/ns/scheme\"\n"; +
-        "      term=\"#olingo.odata.test1.ETCompComp\" />\n" +
-        "    <a:content type=\"application/xml\">\n" +
-        "      <m:properties>\n" +
-        "        <d:PropertyComp m:type=\"#olingo.odata.test1.CTCompComp\">\n" 
+
-        "          <d:PropertyComp 
m:type=\"#olingo.odata.test1.CTTwoPrim\">\n" +
-        "            <d:PropertyInt16 
m:type=\"Int16\">123</d:PropertyInt16>\n" +
-        "            <d:PropertyString>String 1</d:PropertyString>\n" +
-        "          </d:PropertyComp>\n" +
-        "        </d:PropertyComp>\n" +
-        "      </m:properties>\n" +
-        "    </a:content>\n" +
-        "  </a:entry>\n" +
-        "  <a:entry>\n" +
-        "    <a:id>ESCompComp(2)</a:id>\n" +
-        "    <a:title />\n" +
-        "    <a:summary />\n" +
-        "    <a:updated>" + UPDATED_FORMAT.format(new Date(currentTimeMillis)) 
+ "</a:updated>" +
-        "    <a:author>\n" +
-        "      <a:name />\n" +
-        "    </a:author>\n" +
-        "    <a:link rel=\"edit\" href=\"ESCompComp(2)\"/>\n" +
-        "    <a:category 
scheme=\"http://docs.oasis-open.org/odata/ns/scheme\"\n"; +
-        "      term=\"#olingo.odata.test1.ETCompComp\" />\n" +
-        "    <a:content type=\"application/xml\">\n" +
-        "      <m:properties>\n" +
-        "        <d:PropertyComp 
m:type=\"#olingo.odata.test1.CTCompCompExtended\">\n" +
-        "          <d:PropertyComp 
m:type=\"#olingo.odata.test1.CTTwoPrim\">\n" +
-        "            <d:PropertyInt16 
m:type=\"Int16\">987</d:PropertyInt16>\n" +
-        "            <d:PropertyString>String 2</d:PropertyString>\n" +
-        "          </d:PropertyComp>\n" +
-        "        </d:PropertyComp>\n" +
-        "      </m:properties>\n" +
-        "    </a:content>\n" +
-        "  </a:entry>\n" +
-        "</a:feed>\n";
+            "xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\"\n"; +
+            "xmlns:d=\"http://docs.oasis-open.org/odata/ns/data\"; \n" +
+            "m:context=\"$metadata#ESFourKeyAlias" + 
+            "(PropertyComp/PropertyString,PropertyCompComp/PropertyComp)\"\n" +
+            "m:metadata-etag=\"metadataETag\">\n" +
+            "<a:id>http://host/svc/ESFourKeyAlias</a:id>\n" +
+            "<a:entry>\n" +
+                "<a:id>id</a:id>\n" +
+                "<a:title />\n" +
+                "<a:summary />\n" +
+                "<a:updated>" + UPDATED_FORMAT.format(new 
Date(currentTimeMillis)) + "</a:updated>" +
+                "<a:author>\n" +
+                    "<a:name/>\n" +
+                "</a:author>\n" +
+                "<a:link rel=\"edit\" href=\"id\"/>\n" +
+                "<a:category 
scheme=\"http://docs.oasis-open.org/odata/ns/scheme\"; " +
+                 "term=\"#olingo.odata.test1.ETFourKeyAlias\"/>\n" +
+                "<a:content type=\"application/xml\">\n" +
+                    "<m:properties>\n" +
+                        "<d:PropertyComp 
m:type=\"#olingo.odata.test1.CTTwoPrim\">\n" +
+                            "<d:PropertyString>Num11</d:PropertyString>\n" +
+                        "</d:PropertyComp>\n" +
+                        "<d:PropertyCompComp 
m:type=\"#olingo.odata.test1.CTCompComp\">\n" +
+                            "<d:PropertyComp 
m:type=\"#olingo.odata.test1.CTBase\">\n" +
+                                "<d:PropertyInt16 
m:type=\"Int16\">111</d:PropertyInt16>\n" +
+                                
"<d:PropertyString>Num111</d:PropertyString>\n" +
+                                
"<d:AdditionalPropString>Test123</d:AdditionalPropString>\n" +
+                            "</d:PropertyComp>\n" +
+                        "</d:PropertyCompComp>\n" +
+                    "</m:properties>\n" +
+                "</a:content>\n" +
+            "</a:entry>\n" +
+        "</a:feed>";
     checkXMLEqual(resultString, expected);
   }
 

Reply via email to