You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ar...@apache.org on 2018/12/13 10:40:22 UTC

[olingo-odata4] branch master updated: [OLINGO-1323]OData v4.0: Context url should have navigation properties within when expanded

This is an automated email from the ASF dual-hosted git repository.

archanarai pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/olingo-odata4.git


The following commit(s) were added to refs/heads/master by this push:
     new f344a3c  [OLINGO-1323]OData v4.0: Context url should have navigation properties within when expanded
f344a3c is described below

commit f344a3c565b6a67233de1d1169104a728136e7a3
Author: Archana Rai <ar...@sap.com>
AuthorDate: Thu Dec 13 16:10:10 2018 +0530

    [OLINGO-1323]OData v4.0: Context url should have navigation properties within when expanded
---
 .../core/serializer/json/ODataJsonSerializer.java  |  2 +-
 .../core/serializer/utils/ContextURLHelper.java    | 26 ++++++++++++++---
 .../olingo/server/tecsvc/data/DataCreator.java     | 12 ++++++++
 .../tecsvc/processor/TechnicalActionProcessor.java |  3 +-
 .../tecsvc/processor/TechnicalEntityProcessor.java |  2 +-
 .../serializer/json/ODataJsonSerializerTest.java   | 23 ++++++++++-----
 .../json/ODataJsonSerializerv01Test.java           | 34 +++++++++++++---------
 .../serializer/utils/ContextURLHelperTest.java     |  3 +-
 .../serializer/xml/ODataXmlSerializerTest.java     |  9 ++++--
 9 files changed, 82 insertions(+), 32 deletions(-)

diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
index 31029f2..65f9675 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializer.java
@@ -1131,7 +1131,7 @@ public class ODataJsonSerializer extends AbstractODataSerializer {
       writeContextURL(contextURL, json);
       writeMetadataETag(metadata, json);
       writeOperations(property.getOperations(), json);
-      if (property.isNull()) {
+      if (property.isNull() && options!=null && options.isNullable() != null && !options.isNullable()) {
         throw new SerializerException("Property value can not be null.", SerializerException.MessageKeys.NULL_INPUT);
       } else {
         json.writeFieldName(Constants.VALUE);
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/utils/ContextURLHelper.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/utils/ContextURLHelper.java
index 8352ef4..6e20ef4 100644
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/utils/ContextURLHelper.java
+++ b/lib/server-core/src/main/java/org/apache/olingo/server/core/serializer/utils/ContextURLHelper.java
@@ -67,6 +67,8 @@ public final class ContextURLHelper {
 
     if (ExpandSelectHelper.hasExpand(expand) && !(null != ExpandSelectHelper.getExpandAll(expand))) {
       handleExpand(type, expand, result);
+    }else if(expand != null && null != ExpandSelectHelper.getExpandAll(expand)){
+      handleExpandAll(type, expand, result);
     }
     return result.length() == 0 ? null : result.toString();
   }
@@ -267,6 +269,8 @@ public final class ContextURLHelper {
     final Set<String> expandedPropertyNames = ExpandSelectHelper.getExpandedPropertyNames(expand.getExpandItems());
     for (final String propertyName : type.getNavigationPropertyNames()) {
       if (expandedPropertyNames.contains(propertyName)) {
+
+
         final ExpandItem expandItem = ExpandSelectHelper.getExpandItem(expand.getExpandItems(), propertyName);
         if (ExpandSelectHelper.hasExpand(expandItem.getExpandOption())
             && !(null != ExpandSelectHelper.getExpandAll(expandItem.getExpandOption()))
@@ -290,15 +294,29 @@ public final class ContextURLHelper {
             result.append(Encoder.encode(propertyName));
             result.append("/").append(propertyPath);
           } else {
-            if (result.length() > 0) {
-              result.append(',');
-            }
-            result.append(Encoder.encode(propertyName) + "()");
+            appendExpandedProperty(result, propertyName);
           }
         }
+      
+      
       }
     }
   }
+  
+  private static void handleExpandAll(final EdmStructuredType type,
+      final ExpandOption expand, final StringBuilder result) throws SerializerException {
+    for (final String propertyName : type.getNavigationPropertyNames()) {
+      appendExpandedProperty(result, propertyName);
+    }
+  }
+
+  private static void appendExpandedProperty(StringBuilder result, String propertyName)
+      throws SerializerException {
+    if (result.length() > 0) {
+      result.append(',');
+    }
+    result.append(Encoder.encode(propertyName) + "()");
+  }
 
   private static List<String> getPropertyPath(final List<UriResource> path) {
     List<String> result = new LinkedList<String>();
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 cd6fdf0..898fc39 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
@@ -1924,6 +1924,7 @@ public class DataCreator {
      final EntityCollection entityCollection = data.get("ESKeyNavCont");
      final List<Entity> targetEntities = data.get("ETCont").getEntities();
      final List<Entity> etBaseContEntities = data.get("ETBaseCont").getEntities();
+     final List<Entity> etTwoKeyNav = data.get("ESTwoKeyNav").getEntities();
      
      setLinks(entityCollection.getEntities().get(1), "NavPropertyETContMany", targetEntities.get(1),
          targetEntities.get(2));
@@ -1932,6 +1933,11 @@ public class DataCreator {
      
      setLinks(entityCollection.getEntities().get(2), "NavPropertyETBaseContMany", etBaseContEntities.get(1),
          etBaseContEntities.get(2));
+
+     setLinks(entityCollection.getEntities().get(4), "NavPropertyETTwoKeyNavMany", etTwoKeyNav.get(0),
+         etTwoKeyNav.get(2));
+     
+     setLinkForContNav(entityCollection.getEntities().get(4), "NavPropertyETTwoKeyNavOne", etTwoKeyNav.get(0));
    }
    
    protected static void setLinkForContNav(final Entity entity, 
@@ -2133,6 +2139,12 @@ public class DataCreator {
         .addProperty(createPrimitive("PropertyString", "Test String4"))
         .addProperty(createComplex("PropertyCompNavCont",
             ComplexTypeProvider.nameCTNavCont.getFullQualifiedNameAsString())));
+    
+    entityCollection.getEntities().add(new Entity()
+        .addProperty(createPrimitive("PropertyInt16", (short) 1))
+        .addProperty(createPrimitive("PropertyString", "Test String1"))
+        .addProperty(createComplex("PropertyCompNavCont",
+            ComplexTypeProvider.nameCTNavCont.getFullQualifiedNameAsString())));
 
     setEntityType(entityCollection, edm.getEntityType(EntityTypeProvider.nameETKeyNavCont));
     createEntityId(edm, odata, "ESKeyNavCont", entityCollection);
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalActionProcessor.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalActionProcessor.java
index c4964a2..5b64685 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalActionProcessor.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalActionProcessor.java
@@ -296,7 +296,8 @@ public class TechnicalActionProcessor extends TechnicalProcessor
     final Return returnPreference = odata.createPreferences(request.getHeaders(HttpHeader.PREFER)).getReturn();
     if (returnPreference == null || returnPreference == Return.REPRESENTATION) {
       final EdmPrimitiveType type = (EdmPrimitiveType) action.getReturnType().getType();
-      final ContextURL contextURL = ContextURL.with().type(type).asCollection().build();
+      final ContextURL contextURL = ContextURL.with().type(type).navOrPropertyPath(action.getName())
+          .asCollection().build();
       final PrimitiveSerializerOptions options = PrimitiveSerializerOptions.with().contextURL(contextURL).build();
       final SerializerResult result =
           odata.createSerializer(responseFormat).primitiveCollection(serviceMetadata, type, property, options);
diff --git a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
index c5256db..77a624e 100644
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
@@ -711,7 +711,7 @@ public class TechnicalEntityProcessor extends TechnicalProcessor
       response.setHeader(HttpHeader.PREFERENCE_APPLIED,
           PreferencesApplied.with().trackChanges().build().toValueString());
     }  
-    if(delta!=null){
+    if(delta!=null && request.getHeaders(HttpHeader.ODATA_MAX_VERSION) != null){
       response.setHeader(HttpHeader.ODATA_VERSION,request.getHeaders(HttpHeader.ODATA_MAX_VERSION).get(0));
     }
   }
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 ec9482b..786403e 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
@@ -1530,7 +1530,8 @@ public class ODataJsonSerializerTest {
                 .select(select)
                 .build()).getContent());
     Assert.assertEquals("{"
-        + "\"@odata.context\":\"$metadata#ESAllPrim(PropertyInt16,PropertySByte)/$entity\","
+        + "\"@odata.context\":\"$metadata#ESAllPrim(PropertyInt16,PropertySByte,"
+        + "NavPropertyETTwoPrimOne(),NavPropertyETTwoPrimMany())/$entity\","
         + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\","
         + "\"@odata.id\":\"ESAllPrim(32767)\",\"PropertyInt16\":32767,"
         + "\"PropertySByte\":127,"
@@ -1559,7 +1560,8 @@ public class ODataJsonSerializerTest {
                 .select(select)
                 .build()).getContent());
     Assert.assertEquals("{"
-        + "\"@odata.context\":\"$metadata#ESAllPrim(PropertyInt16,PropertyTimeOfDay)/$entity\","
+        + "\"@odata.context\":\"$metadata#ESAllPrim(PropertyInt16,PropertyTimeOfDay,"
+        + "NavPropertyETTwoPrimOne(),NavPropertyETTwoPrimMany())/$entity\","
         + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\","
         + "\"@odata.id\":\"ESAllPrim(-32768)\",\"PropertyInt16\":-32768,"
         + "\"PropertyTimeOfDay\":\"23:49:14\","
@@ -1592,7 +1594,8 @@ public class ODataJsonSerializerTest {
                 .build()).getContent());
     Assert.assertEquals("{"
         + "\"@odata.context\":\"$metadata#ESTwoPrim(PropertyInt16,"
-		+ "NavPropertyETAllPrimMany(PropertyInt16,PropertyInt32))/$entity\","
+        + "NavPropertyETAllPrimMany(PropertyInt16,PropertyInt32,"
+        + "NavPropertyETTwoPrimOne(),NavPropertyETTwoPrimMany()))/$entity\","
         + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\","
         + "\"PropertyInt16\":-365,\"PropertyString\":\"Test String2\","
         + "\"NavPropertyETAllPrimMany\":["
@@ -1630,7 +1633,8 @@ public class ODataJsonSerializerTest {
                     .suffix(Suffix.ENTITY).build())
                 .expand(expand)
                 .build()).getContent());
-    Assert.assertEquals("{\"@odata.context\":\"$metadata#ESTwoPrim(PropertyInt16)/$entity\","
+    Assert.assertEquals("{\"@odata.context\":\"$metadata#ESTwoPrim(PropertyInt16,"
+        + "NavPropertyETAllPrimOne(),NavPropertyETAllPrimMany())/$entity\","
         + "\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\","
         + "\"PropertyInt16\":-365,\"PropertyString\":\"Test String2\","
         + "\"NavPropertyETAllPrimOne\":null,"
@@ -1709,17 +1713,22 @@ public class ODataJsonSerializerTest {
         resultString);
   } 
 
-  @Test(expected = SerializerException.class)
+  @Test
   public void primitivePropertyNull() throws Exception {
     final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESAllPrim");
     final EdmProperty edmProperty = (EdmProperty) edmEntitySet.getEntityType().getProperty("PropertyString");
     final Property property = new Property("Edm.String", edmProperty.getName(), ValueType.PRIMITIVE, null);
-    serializer.primitive(metadata, (EdmPrimitiveType) edmProperty.getType(), property,
+    final String resultString = IOUtils
+        .toString(serializer.primitive(metadata, (EdmPrimitiveType) edmProperty.getType(), property,
         PrimitiveSerializerOptions.with()
             .contextURL(ContextURL.with()
                 .entitySet(edmEntitySet).keyPath("4242").navOrPropertyPath(edmProperty.getName())
                 .build())
-            .build());
+            .build()).getContent());
+    Assert.assertEquals(
+        "{\"@odata.context\":\"../$metadata#ESAllPrim(4242)/PropertyString\","
+            +"\"@odata.metadataEtag\":\"W/\\\"metadataETag\\\"\",\"value\":null}",
+        resultString);
   }
 
   @Test
diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerv01Test.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerv01Test.java
index 17532c0..37afbe5 100644
--- a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerv01Test.java
+++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/json/ODataJsonSerializerv01Test.java
@@ -18,9 +18,6 @@
  */
 package org.apache.olingo.server.core.serializer.json;
 
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.fail;
-
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URI;
@@ -52,15 +49,15 @@ import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
 import org.apache.olingo.commons.api.edm.EdmProperty;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
-import org.apache.olingo.commons.api.edm.geo.Point;
-import org.apache.olingo.commons.api.edm.geo.Polygon;
-import org.apache.olingo.commons.api.edm.geo.SRID;
 import org.apache.olingo.commons.api.edm.geo.Geospatial.Dimension;
 import org.apache.olingo.commons.api.edm.geo.GeospatialCollection;
 import org.apache.olingo.commons.api.edm.geo.LineString;
 import org.apache.olingo.commons.api.edm.geo.MultiLineString;
 import org.apache.olingo.commons.api.edm.geo.MultiPoint;
 import org.apache.olingo.commons.api.edm.geo.MultiPolygon;
+import org.apache.olingo.commons.api.edm.geo.Point;
+import org.apache.olingo.commons.api.edm.geo.Polygon;
+import org.apache.olingo.commons.api.edm.geo.SRID;
 import org.apache.olingo.commons.api.edmx.EdmxReference;
 import org.apache.olingo.commons.api.format.ContentType;
 import org.apache.olingo.server.api.OData;
@@ -1538,7 +1535,8 @@ public class ODataJsonSerializerv01Test {
                 .select(select)
                 .build()).getContent());
     Assert.assertEquals("{"
-        + "\"@context\":\"$metadata#ESAllPrim(PropertyInt16,PropertySByte)/$entity\","
+        + "\"@context\":\"$metadata#ESAllPrim(PropertyInt16,PropertySByte,"
+        + "NavPropertyETTwoPrimOne(),NavPropertyETTwoPrimMany())/$entity\","
         + "\"@metadataEtag\":\"W/\\\"metadataETag\\\"\","
         + "\"@id\":\"ESAllPrim(32767)\",\"PropertyInt16\":32767,"
         + "\"PropertySByte\":127,"
@@ -1567,7 +1565,8 @@ public class ODataJsonSerializerv01Test {
                 .select(select)
                 .build()).getContent());
     Assert.assertEquals("{"
-        + "\"@context\":\"$metadata#ESAllPrim(PropertyInt16,PropertyTimeOfDay)/$entity\","
+        + "\"@context\":\"$metadata#ESAllPrim(PropertyInt16,PropertyTimeOfDay,"
+        + "NavPropertyETTwoPrimOne(),NavPropertyETTwoPrimMany())/$entity\","
         + "\"@metadataEtag\":\"W/\\\"metadataETag\\\"\","
         + "\"@id\":\"ESAllPrim(-32768)\",\"PropertyInt16\":-32768,"
         + "\"PropertyTimeOfDay\":\"23:49:14\","
@@ -1600,7 +1599,8 @@ public class ODataJsonSerializerv01Test {
                 .build()).getContent());
     Assert.assertEquals("{"
         + "\"@context\":\"$metadata#ESTwoPrim(PropertyInt16,"
-        + "NavPropertyETAllPrimMany(PropertyInt16,PropertyInt32))/$entity\","
+        + "NavPropertyETAllPrimMany(PropertyInt16,PropertyInt32,"
+        + "NavPropertyETTwoPrimOne(),NavPropertyETTwoPrimMany()))/$entity\","
         + "\"@metadataEtag\":\"W/\\\"metadataETag\\\"\","
         + "\"PropertyInt16\":-365,\"PropertyString\":\"Test String2\","
         + "\"NavPropertyETAllPrimMany\":["
@@ -1638,7 +1638,8 @@ public class ODataJsonSerializerv01Test {
                     .suffix(Suffix.ENTITY).build())
                 .expand(expand)
                 .build()).getContent());
-    Assert.assertEquals("{\"@context\":\"$metadata#ESTwoPrim(PropertyInt16)/$entity\","
+    Assert.assertEquals("{\"@context\":\"$metadata#ESTwoPrim(PropertyInt16,"
+        + "NavPropertyETAllPrimOne(),NavPropertyETAllPrimMany())/$entity\","
         + "\"@metadataEtag\":\"W/\\\"metadataETag\\\"\","
         + "\"PropertyInt16\":-365,\"PropertyString\":\"Test String2\","
         + "\"NavPropertyETAllPrimOne\":null,"
@@ -1717,19 +1718,24 @@ public class ODataJsonSerializerv01Test {
         resultString);
   } 
 
-  @Test(expected = SerializerException.class)
+  @Test
   public void primitivePropertyNull() throws Exception {
     final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESAllPrim");
     final EdmProperty edmProperty = (EdmProperty) edmEntitySet.getEntityType().getProperty("PropertyString");
     final Property property = new Property("Edm.String", edmProperty.getName(), ValueType.PRIMITIVE, null);
-    serializer.primitive(metadata, (EdmPrimitiveType) edmProperty.getType(), property,
+    final String resultString = IOUtils
+        .toString(serializer.primitive(metadata, (EdmPrimitiveType) edmProperty.getType(), property,
         PrimitiveSerializerOptions.with()
             .contextURL(ContextURL.with()
                 .entitySet(edmEntitySet).keyPath("4242").navOrPropertyPath(edmProperty.getName())
                 .build())
-            .build());
+            .build()).getContent());
+    Assert.assertEquals(
+        "{\"@context\":\"../$metadata#ESAllPrim(4242)/PropertyString\","
+            +"\"@metadataEtag\":\"W/\\\"metadataETag\\\"\",\"value\":null}",
+        resultString);
   }
-
+  
   @Test
   public void primitiveCollectionProperty() throws Exception {
     final EdmEntitySet edmEntitySet = entityContainer.getEntitySet("ESCollAllPrim");
diff --git a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/utils/ContextURLHelperTest.java b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/utils/ContextURLHelperTest.java
index 1541a3d..1c4bdf8 100644
--- a/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/utils/ContextURLHelperTest.java
+++ b/lib/server-test/src/test/java/org/apache/olingo/server/core/serializer/utils/ContextURLHelperTest.java
@@ -178,7 +178,8 @@ public class ContextURLHelperTest {
     final ExpandOption expand = ExpandSelectMock.mockExpandOption(Arrays.asList(expandItem));
     final ContextURL contextURL = ContextURL.with().entitySet(entitySet)
         .selectList(ContextURLHelper.buildSelectList(entitySet.getEntityType(), expand, null)).build();
-    assertEquals("$metadata#ESTwoPrim", ContextURLBuilder.create(contextURL).toASCIIString());
+    assertEquals("$metadata#ESTwoPrim(NavPropertyETAllPrimOne(),NavPropertyETAllPrimMany())", 
+        ContextURLBuilder.create(contextURL).toASCIIString());
   }
 
   @Test
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 e217ec0..7e1a963 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
@@ -2145,7 +2145,8 @@ public class ODataXmlSerializerTest {
         "<a:entry 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\" "
-        + "m:context=\"$metadata#ESAllPrim(PropertyInt16,PropertySByte)/$entity\"\n" +
+        + "m:context=\"$metadata#ESAllPrim(PropertyInt16,PropertySByte,"+
+        "NavPropertyETTwoPrimOne(),NavPropertyETTwoPrimMany())/$entity\"\n" +
         "  m:metadata-etag=\"metadataETag\">\n" +
         "  <a:id>ESAllPrim(32767)</a:id>\n" +
         "  <a:title />\n" +
@@ -2290,7 +2291,8 @@ public class ODataXmlSerializerTest {
         "<a:entry xmlns:a=\"http://www.w3.org/2005/Atom\" "
         + "xmlns:m=\"http://docs.oasis-open.org/odata/ns/metadata\"\n" +
         "  xmlns:d=\"http://docs.oasis-open.org/odata/ns/data\" "
-        + "m:context=\"$metadata#ESAllPrim(PropertyInt16,PropertyTimeOfDay)/$entity\"\n" +
+        + "m:context=\"$metadata#ESAllPrim(PropertyInt16,PropertyTimeOfDay,"+
+        "NavPropertyETTwoPrimOne(),NavPropertyETTwoPrimMany())/$entity\"\n" +
         "  m:metadata-etag=\"metadataETag\">\n" +
         "  <a:id>ESAllPrim(-32768)</a:id>\n" +
         "  <a:title />\n" +
@@ -2360,7 +2362,8 @@ public class ODataXmlSerializerTest {
         + "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#ESTwoPrim(PropertyInt16,"
-        + "NavPropertyETAllPrimMany(PropertyInt16,PropertyInt32))/$entity\"\n" +
+        + "NavPropertyETAllPrimMany(PropertyInt16,PropertyInt32,"+
+        "NavPropertyETTwoPrimOne(),NavPropertyETTwoPrimMany()))/$entity\"\n" +
         "  m:metadata-etag=\"metadataETag\">\n" +
         "  <a:id>ESTwoPrim(-365)</a:id>\n" +
         "  <a:title />\n" +