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 08:13:17 UTC

[olingo-odata2] branch master updated: [OLINGO-1321]ODATA V2.0 : An api to return list of child expandSelectTreeNode

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-odata2.git


The following commit(s) were added to refs/heads/master by this push:
     new f5ee664  [OLINGO-1321]ODATA V2.0 : An api to return list of child expandSelectTreeNode
f5ee664 is described below

commit f5ee664c909d2e9d269469bfd1b882c42ac721d3
Author: Archana Rai <ar...@sap.com>
AuthorDate: Thu Dec 13 13:38:24 2018 +0530

    [OLINGO-1321]ODATA V2.0 : An api to return list of child expandSelectTreeNode
---
 .../odata2/api/uri/ExpandSelectTreeNode.java       |   8 +-
 .../odata2/core/ep/consumer/JsonEntryConsumer.java |   8 +
 .../odata2/core/ep/consumer/XmlEntryConsumer.java  |   9 +
 .../odata2/core/uri/ExpandSelectTreeNodeImpl.java  |   9 +-
 .../core/ep/consumer/JsonEntryConsumerTest.java    |  28 ++
 .../core/ep/consumer/XmlEntityConsumerTest.java    |  28 ++
 .../resources/employeesWithDifferentInlines.xml    | 307 +++++++++++++++++++++
 .../jsonEmployeesWithDifferentInlines.json         | 160 +++++++++++
 8 files changed, 554 insertions(+), 3 deletions(-)

diff --git a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/uri/ExpandSelectTreeNode.java b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/uri/ExpandSelectTreeNode.java
index b12eb43..a1915ec 100644
--- a/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/uri/ExpandSelectTreeNode.java
+++ b/odata2-lib/odata-api/src/main/java/org/apache/olingo/odata2/api/uri/ExpandSelectTreeNode.java
@@ -53,7 +53,13 @@ public abstract class ExpandSelectTreeNode {
    * otherwise the link must be expanded with information found in that node
    */
   public abstract Map<String, ExpandSelectTreeNode> getLinks();
-
+  
+  /**
+   * A list of all expanded links within the parent entity. 
+   * @return {@link ExpandSelectTreeNodeBuilder} for method chaining.
+   */
+  public abstract List<ExpandSelectTreeNode> getExpandedList();
+  
   /**
    * Creates a builder instance and sets the entitySet for this node.
    * @param entitySet on which this node is based
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/JsonEntryConsumer.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/JsonEntryConsumer.java
index d9d8e6e..d1c4179 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/JsonEntryConsumer.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/JsonEntryConsumer.java
@@ -389,6 +389,14 @@ public class JsonEntryConsumer {
     List<ODataEntry> entries = feed.getEntries();
     if (!entries.isEmpty()) {
       updateExpandSelectTree(navigationPropertyName, entries.get(0));
+      for(ODataEntry entry : entries){
+        ExpandSelectTreeNodeImpl newExpandedSelectedTree = new ExpandSelectTreeNodeImpl();
+        newExpandedSelectedTree.setExpanded();
+        newExpandedSelectedTree.setExplicitlySelected();
+        newExpandedSelectedTree.putLink(navigationPropertyName, 
+            (ExpandSelectTreeNodeImpl) entry.getExpandSelectTree());
+        expandSelectTree.getExpandedList().add(newExpandedSelectedTree);
+      }
     } else {
       expandSelectTree.setExpanded();
       expandSelectTree.setExplicitlySelected();
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlEntryConsumer.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlEntryConsumer.java
index 962fc34..8c5a240 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlEntryConsumer.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlEntryConsumer.java
@@ -345,6 +345,15 @@ public class XmlEntryConsumer {
     expandSelectTree.setExpanded();
     ExpandSelectTreeNodeImpl subNode = getExpandSelectTreeNode(inlineEntries);
     expandSelectTree.putLink(navigationPropertyName, subNode);
+    for(ODataEntry entry : inlineEntries){
+      ExpandSelectTreeNodeImpl newExpandedSelectedTree = new ExpandSelectTreeNodeImpl();
+      newExpandedSelectedTree.setExpanded();
+      newExpandedSelectedTree.setExplicitlySelected();
+      newExpandedSelectedTree.putLink(navigationPropertyName, 
+          (ExpandSelectTreeNodeImpl) entry.getExpandSelectTree());
+      expandSelectTree.getExpandedList().add(newExpandedSelectedTree);
+    }
+    
   }
 
   /**
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/ExpandSelectTreeNodeImpl.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/ExpandSelectTreeNodeImpl.java
index 0237cdf..b7b646d 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/ExpandSelectTreeNodeImpl.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/uri/ExpandSelectTreeNodeImpl.java
@@ -60,7 +60,8 @@ public class ExpandSelectTreeNodeImpl extends ExpandSelectTreeNode {
   private boolean isExpanded = false;
   private final List<EdmProperty> properties = new ArrayList<EdmProperty>();
   private final Map<String, ExpandSelectTreeNodeImpl> links = new HashMap<String, ExpandSelectTreeNodeImpl>();
-
+  private final List<ExpandSelectTreeNode> expandselectTreeNodes = new ArrayList<ExpandSelectTreeNode>();
+  
   @Override
   public boolean isAll() {
     return isAll.getBoolean();
@@ -77,6 +78,11 @@ public class ExpandSelectTreeNodeImpl extends ExpandSelectTreeNode {
     return (Map<String, ExpandSelectTreeNode>) ((Map<String, ? extends ExpandSelectTreeNode>) Collections
         .unmodifiableMap(links));
   }
+  
+  @Override
+  public List<ExpandSelectTreeNode> getExpandedList() {
+    return expandselectTreeNodes;
+  }
 
   public void putLink(final String name, final ExpandSelectTreeNodeImpl node) {
     links.put(name, node);
@@ -275,5 +281,4 @@ public class ExpandSelectTreeNodeImpl extends ExpandSelectTreeNode {
     }
 
   }
-
 }
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/JsonEntryConsumerTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/JsonEntryConsumerTest.java
index 4f0d385..b0b5c7e 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/JsonEntryConsumerTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/JsonEntryConsumerTest.java
@@ -434,6 +434,34 @@ public class JsonEntryConsumerTest extends AbstractConsumerTest {
     assertEquals(5, result.getProperties().size());
     assertEquals(0, ((ODataFeed)result.getProperties().get("nr_Employees")).getEntries().size());
   }
+  
+  
+  @Test
+  public void roomsFeedWithRoomInlineDifferent() throws Exception {
+    InputStream stream = getFileAsStream("jsonEmployeesWithDifferentInlines.json");
+    assertNotNull(stream);
+
+    EntityProviderReadProperties readProperties = EntityProviderReadProperties.init()
+        .mergeSemantic(false).isValidatingFacets(false).build();
+
+    EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Rooms");
+    JsonEntityConsumer xec = new JsonEntityConsumer();
+    ODataEntry entry = xec.readEntry(entitySet, stream, readProperties);
+    assertNotNull(entry);
+    assertNotNull(entry.getExpandSelectTree().getLinks().get("nr_Employees"));
+    assertNotNull(entry.getExpandSelectTree().getExpandedList().get(3)
+        .getLinks().get("nr_Employees").getLinks().get("ne_Team"));
+    assertNotNull(entry.getExpandSelectTree().getExpandedList().get(0)
+        .getLinks().get("nr_Employees").getLinks().get("ne_Room"));
+    assertNotNull(entry.getExpandSelectTree().getExpandedList().get(0)
+        .getLinks().get("nr_Employees").getLinks().get("ne_Room")
+        .getLinks().get("nr_Building"));
+    assertNotNull(entry.getExpandSelectTree().getExpandedList().get(1)
+        .getLinks().get("nr_Employees").getLinks().get("ne_Room"));
+    assertNull(entry.getExpandSelectTree().getExpandedList().get(2)
+        .getLinks().get("nr_Employees").getLinks().get("ne_Room"));
+  }
+  
   /**
    * @param inlineEntries
    * @param feed
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlEntityConsumerTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlEntityConsumerTest.java
index 4f51fcd..207815c 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlEntityConsumerTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlEntityConsumerTest.java
@@ -2615,6 +2615,34 @@ public class XmlEntityConsumerTest extends AbstractXmlConsumerTest {
     assertEquals(5, result.getProperties().size());
     assertEquals(0, ((ODataFeed)result.getProperties().get("nr_Employees")).getEntries().size());
   }
+  
+  @Test
+  public void roomsFeedWithRoomInlineDifferent() throws Exception {
+    InputStream stream = getFileAsStream("employeesWithDifferentInlines.xml");
+    assertNotNull(stream);
+
+    EntityProviderReadProperties readProperties = EntityProviderReadProperties.init()
+        .mergeSemantic(false).isValidatingFacets(false).build();
+
+    EdmEntitySet entitySet = MockFacade.getMockEdm().getDefaultEntityContainer().getEntitySet("Rooms");
+    XmlEntityConsumer xec = new XmlEntityConsumer();
+    ODataEntry entry = xec.readEntry(entitySet, stream, readProperties);
+    assertNotNull(entry);
+    assertNotNull(entry.getExpandSelectTree().getLinks().get("nr_Employees"));
+    assertNotNull(entry.getExpandSelectTree().getExpandedList().get(3)
+        .getLinks().get("nr_Employees").getLinks().get("ne_Team"));
+    assertNotNull(entry.getExpandSelectTree().getExpandedList().get(1)
+        .getLinks().get("nr_Employees").getLinks().get("ne_Room"));
+    assertNotNull(entry.getExpandSelectTree().getExpandedList().get(1)
+        .getLinks().get("nr_Employees").getLinks().get("ne_Room")
+        .getLinks().get("nr_Building"));
+    assertNotNull(entry.getExpandSelectTree().getExpandedList().get(2)
+        .getLinks().get("nr_Employees").getLinks().get("ne_Room"));
+    assertNull(entry.getExpandSelectTree().getExpandedList().get(0)
+        .getLinks().get("nr_Employees").getLinks().get("ne_Room"));
+  }
+  
+  
   /**
    * @param inlineEntries
    * @param feed
diff --git a/odata2-lib/odata-core/src/test/resources/employeesWithDifferentInlines.xml b/odata2-lib/odata-core/src/test/resources/employeesWithDifferentInlines.xml
new file mode 100644
index 0000000..cb6c508
--- /dev/null
+++ b/odata2-lib/odata-core/src/test/resources/employeesWithDifferentInlines.xml
@@ -0,0 +1,307 @@
+<?xml version='1.0' encoding='utf-8'?>
+<!-- Licensed to the Apache Software Foundation (ASF) under one or more contributor 
+	license agreements. See the NOTICE file distributed with this work for additional 
+	information regarding copyright ownership. The ASF licenses this file to 
+	you under the Apache License, Version 2.0 (the "License"); you may not use 
+	this file except in compliance with the License. You may obtain a copy of 
+	the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required 
+	by applicable law or agreed to in writing, software distributed under the 
+	License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS 
+	OF ANY KIND, either express or implied. See the License for the specific 
+	language governing permissions and limitations under the License. -->
+<entry xmlns="http://www.w3.org/2005/Atom"
+	xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"
+	xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices"
+	xml:base="http://localhost:8080/olingo-odata2-ref-web/ReferenceScenario.svc/"
+	m:etag="W/&quot;1&quot;">
+	<id>
+		http://localhost:8080/olingo-odata2-ref-web/ReferenceScenarioNonJaxrs.svc/Rooms('1')
+	</id>
+	<title type="text">Room 1</title>
+	<updated>2018-11-30T10:18:34.044+05:30</updated>
+	<category term="RefScenario.Room"
+		scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
+	<link href="Rooms('1')" rel="edit" title="Room" />
+	<link href="Rooms('1')/nr_Employees"
+		rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/nr_Employees"
+		title="nr_Employees" type="application/atom+xml;type=feed">
+		<m:inline>
+			<feed
+				xml:base="http://localhost:8080/olingo-odata2-ref-web/ReferenceScenarioNonJaxrs.svc/">
+				<id>
+					http://localhost:8080/olingo-odata2-ref-web/ReferenceScenarioNonJaxrs.svc/Employees
+				</id>
+				<title type="text">Employees</title>
+				<updated>2018-11-30T10:21:56.387+05:30</updated>
+				<author>
+					<name />
+				</author>
+				<link href="Rooms('1')/nr_Employees" rel="self" title="Employees" />
+				<entry>
+					<id>...</id>
+					<title type="text">Walter Winter</title>
+					<updated>1999-01-01T00:00:00Z</updated>
+					<category term="RefScenario.Employee"
+						scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
+					<link href="Employees('1')" rel="edit" title="Employee" />
+					<link href="Employees('1')/$value" rel="edit-media" type="image/jpeg" />
+					<link href="Employees('1')/ne_Manager"
+						rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/ne_Manager"
+						title="ne_Manager" type="application/atom+xml;type=entry" />
+					<link href="Employees('2')/ne_Team"
+						rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/ne_Team"
+						title="ne_Team" type="application/atom+xml;type=entry" />
+					<link href="Employees('1')/ne_Room"
+						rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/ne_Room"
+						title="ne_Room" type="application/atom+xml;type=entry" />
+					<content type="image/jpeg" src="Employees('1')/$value" />
+					<m:properties>
+						<d:EmployeeId>1</d:EmployeeId>
+						<d:EmployeeName>Walter Winter</d:EmployeeName>
+						<d:ManagerId>1</d:ManagerId>
+						<d:RoomId>1</d:RoomId>
+						<d:TeamId>1</d:TeamId>
+						<d:Location m:type="RefScenario.c_Location">
+							<d:City m:type="RefScenario.c_City">
+								<d:PostalCode>69124</d:PostalCode>
+								<d:CityName>Heidelberg</d:CityName>
+							</d:City>
+							<d:Country>Germany</d:Country>
+						</d:Location>
+						<d:Age>52</d:Age>
+						<d:EntryDate>1999-01-01T00:00:00</d:EntryDate>
+						<d:ImageUrl>Employees('1')/$value</d:ImageUrl>
+					</m:properties>
+				</entry>
+				<entry>
+					<id>...</id>
+					<title type="text">Walter Winter</title>
+					<updated>1999-01-01T00:00:00Z</updated>
+					<category term="RefScenario.Employee"
+						scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
+					<link href="Employees('2')" rel="edit" title="Employee" />
+					<link href="Employees('2')/$value" rel="edit-media" type="image/jpeg" />
+					<link href="Employees('2')/ne_Manager"
+						rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/ne_Manager"
+						title="ne_Manager" type="application/atom+xml;type=entry" />
+					<link href="Employees('2')/ne_Team"
+						rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/ne_Team"
+						title="ne_Team" type="application/atom+xml;type=entry" />
+					<link href="Employees('2')/ne_Room"
+						rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/ne_Room"
+						title="ne_Room" type="application/atom+xml;type=entry">
+						<m:inline>
+							<entry
+								xml:base="http://localhost:8080/olingo-odata2-ref-web/ReferenceScenarioNonJaxrs.svc/"
+								m:etag="W/&quot;1&quot;">
+								<id>
+									http://localhost:8080/olingo-odata2-ref-web/ReferenceScenarioNonJaxrs.svc/Rooms('1')
+								</id>
+								<title type="text">Room 1</title>
+								<updated>2018-11-30T11:01:31.778+05:30</updated>
+								<category term="RefScenario.Room"
+									scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
+								<link href="Rooms('1')" rel="edit" title="Room" />
+								<link href="Rooms('1')/nr_Employees"
+									rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/nr_Employees"
+									title="nr_Employees" type="application/atom+xml;type=feed" />
+								<link href="Rooms('1')/nr_Building"
+									rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/nr_Building"
+									title="nr_Building" type="application/atom+xml;type=entry">
+									<m:inline>
+										<entry
+											xml:base="http://localhost:8080/olingo-odata2-ref-web/ReferenceScenarioNonJaxrs.svc/">
+											<id>
+												http://localhost:8080/olingo-odata2-ref-web/ReferenceScenarioNonJaxrs.svc/Buildings('1')
+											</id>
+											<title type="text">Buildings</title>
+											<updated>2018-11-30T10:53:24.066+05:30</updated>
+											<author>
+												<name>Building 1</name>
+											</author>
+											<category term="RefScenario.Building"
+												scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
+											<link href="Buildings('1')" rel="edit" title="Building" />
+											<link href="Buildings('1')/nb_Rooms"
+												rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/nb_Rooms"
+												title="nb_Rooms" type="application/atom+xml;type=feed" />
+											<content type="application/xml">
+												<m:properties>
+													<d:Id>1</d:Id>
+													<d:Name>Building 1</d:Name>
+													<d:Image m:null="true" />
+												</m:properties>
+											</content>
+										</entry>
+									</m:inline>
+								</link>
+								<content type="application/xml">
+									<m:properties>
+										<d:Id>1</d:Id>
+										<d:Name>Room 1</d:Name>
+										<d:Seats>1</d:Seats>
+										<d:Version>1</d:Version>
+									</m:properties>
+								</content>
+							</entry>
+						</m:inline>
+					</link>
+					<content type="image/jpeg" src="Employees('1')/$value" />
+					<m:properties>
+						<d:EmployeeId>2</d:EmployeeId>
+						<d:EmployeeName>Walter Winter</d:EmployeeName>
+						<d:ManagerId>2</d:ManagerId>
+						<d:RoomId>2</d:RoomId>
+						<d:TeamId>2</d:TeamId>
+						<d:Location m:type="RefScenario.c_Location">
+							<d:City m:type="RefScenario.c_City">
+								<d:PostalCode>69124</d:PostalCode>
+								<d:CityName>Heidelberg</d:CityName>
+							</d:City>
+							<d:Country>Germany</d:Country>
+						</d:Location>
+						<d:Age>52</d:Age>
+						<d:EntryDate>1999-01-01T00:00:00</d:EntryDate>
+						<d:ImageUrl>Employees('2')/$value</d:ImageUrl>
+					</m:properties>
+				</entry>
+				<entry>
+					<id>...</id>
+					<title type="text">Walter Winter</title>
+					<updated>1999-01-01T00:00:00Z</updated>
+					<category term="RefScenario.Employee"
+						scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
+					<link href="Employees('3')" rel="edit" title="Employee" />
+					<link href="Employees('3')/$value" rel="edit-media" type="image/jpeg" />
+					<link href="Employees('3')/ne_Manager"
+						rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/ne_Manager"
+						title="ne_Manager" type="application/atom+xml;type=entry" />
+					<link href="Employees('3')/ne_Team"
+						rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/ne_Team"
+						title="ne_Team" type="application/atom+xml;type=entry" />
+					<link href="Employees('3')/ne_Room"
+						rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/ne_Room"
+						title="ne_Room" type="application/atom+xml;type=entry">
+						<m:inline>
+							<entry
+								xml:base="http://localhost:8080/olingo-odata2-ref-web/ReferenceScenarioNonJaxrs.svc/"
+								m:etag="W/&quot;1&quot;">
+								<id>
+									http://localhost:8080/olingo-odata2-ref-web/ReferenceScenarioNonJaxrs.svc/Rooms('1')
+								</id>
+								<title type="text">Room 2</title>
+								<updated>2018-11-30T11:01:31.778+05:30</updated>
+								<category term="RefScenario.Room"
+									scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
+								<link href="Rooms('2')" rel="edit" title="Room" />
+								<link href="Rooms('2')/nr_Employees"
+									rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/nr_Employees"
+									title="nr_Employees" type="application/atom+xml;type=feed" />
+								<link href="Rooms('2')/nr_Building"
+									rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/nr_Building"
+									title="nr_Building" type="application/atom+xml;type=entry" />
+								<content type="application/xml">
+									<m:properties>
+										<d:Id>2</d:Id>
+										<d:Name>Room 2</d:Name>
+										<d:Seats>1</d:Seats>
+										<d:Version>1</d:Version>
+									</m:properties>
+								</content>
+							</entry>
+						</m:inline>
+					</link>
+					<content type="image/jpeg" src="Employees('1')/$value" />
+					<m:properties>
+						<d:EmployeeId>3</d:EmployeeId>
+						<d:EmployeeName>Walter Winter</d:EmployeeName>
+						<d:ManagerId>3</d:ManagerId>
+						<d:RoomId>3</d:RoomId>
+						<d:TeamId>3</d:TeamId>
+						<d:Location m:type="RefScenario.c_Location">
+							<d:City m:type="RefScenario.c_City">
+								<d:PostalCode>69124</d:PostalCode>
+								<d:CityName>Heidelberg</d:CityName>
+							</d:City>
+							<d:Country>Germany</d:Country>
+						</d:Location>
+						<d:Age>52</d:Age>
+						<d:EntryDate>1999-01-01T00:00:00</d:EntryDate>
+						<d:ImageUrl>Employees('3')/$value</d:ImageUrl>
+					</m:properties>
+				</entry>
+				<entry>
+					<id>...</id>
+					<title type="text">Walter Winter</title>
+					<updated>1999-01-01T00:00:00Z</updated>
+					<category term="RefScenario.Employee"
+						scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
+					<link href="Employees('4')" rel="edit" title="Employee" />
+					<link href="Employees('4')/$value" rel="edit-media" type="image/jpeg" />
+					<link href="Employees('4')/ne_Manager"
+						rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/ne_Manager"
+						title="ne_Manager" type="application/atom+xml;type=entry" />
+					<link href="Employees('4')/ne_Team"
+						rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/ne_Team"
+						title="ne_Team" type="application/atom+xml;type=entry">
+						<m:inline>
+							<entry
+								xml:base="http://localhost:8080/olingo-odata2-ref-web/ReferenceScenarioNonJaxrs.svc/">
+								<id>
+									http://localhost:8080/olingo-odata2-ref-web/ReferenceScenarioNonJaxrs.svc/Teams('1')
+								</id>
+								<title type="text">Team 1</title>
+								<updated>2018-11-30T10:41:31.209+05:30</updated>
+								<category term="RefScenario.Team"
+									scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme" />
+								<link href="Teams('1')" rel="edit" title="Team" />
+								<link href="Teams('1')/nt_Employees"
+									rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/nt_Employees"
+									title="nt_Employees" type="application/atom+xml;type=feed" />
+								<content type="application/xml">
+									<m:properties>
+										<d:Id>1</d:Id>
+										<d:Name>Team 1</d:Name>
+										<d:isScrumTeam>false</d:isScrumTeam>
+									</m:properties>
+								</content>
+							</entry>
+						</m:inline>
+					</link>
+					<link href="Employees('4')/ne_Room"
+						rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/ne_Room"
+						title="ne_Room" type="application/atom+xml;type=entry" />
+					<content type="image/jpeg" src="Employees('4')/$value" />
+					<m:properties>
+						<d:EmployeeId>4</d:EmployeeId>
+						<d:EmployeeName>Walter Winter</d:EmployeeName>
+						<d:ManagerId>4</d:ManagerId>
+						<d:RoomId>4</d:RoomId>
+						<d:TeamId>4</d:TeamId>
+						<d:Location m:type="RefScenario.c_Location">
+							<d:City m:type="RefScenario.c_City">
+								<d:PostalCode>69124</d:PostalCode>
+								<d:CityName>Heidelberg</d:CityName>
+							</d:City>
+							<d:Country>Germany</d:Country>
+						</d:Location>
+						<d:Age>52</d:Age>
+						<d:EntryDate>1999-01-01T00:00:00</d:EntryDate>
+						<d:ImageUrl>Employees('4')/$value</d:ImageUrl>
+					</m:properties>
+				</entry>
+			</feed>
+		</m:inline>
+	</link>
+	<link href="Rooms('1')/nr_Building"
+		rel="http://schemas.microsoft.com/ado/2007/08/dataservices/related/nr_Building"
+		title="nr_Building" type="application/atom+xml;type=entry" />
+	<content type="application/xml">
+		<m:properties>
+			<d:Id>1</d:Id>
+			<d:Name>Room 1</d:Name>
+			<d:Seats>1</d:Seats>
+			<d:Version>1</d:Version>
+		</m:properties>
+	</content>
+</entry>
\ No newline at end of file
diff --git a/odata2-lib/odata-core/src/test/resources/jsonEmployeesWithDifferentInlines.json b/odata2-lib/odata-core/src/test/resources/jsonEmployeesWithDifferentInlines.json
new file mode 100644
index 0000000..3aed203
--- /dev/null
+++ b/odata2-lib/odata-core/src/test/resources/jsonEmployeesWithDifferentInlines.json
@@ -0,0 +1,160 @@
+
+            {
+                "Id": "1",
+                "Name": "Room 1",
+                "Seats": 1,
+                "Version": 1,
+                "nr_Employees": {
+                    "results": [
+                  
+                        {
+                            "EmployeeId": "4",
+                            "EmployeeName": "Walter Winter",
+                            "ManagerId": "4",
+                            "RoomId": "4",
+                            "TeamId": "4",
+                            "Location": {
+                                "__metadata": {
+                                    "type": "RefScenario.c_Location"
+                                },
+                                "City": {
+                                    "__metadata": {
+                                        "type": "RefScenario.c_City"
+                                    },
+                                    "PostalCode": "69124",
+                                    "CityName": "Heidelberg"
+                                },
+                                "Country": "Germany"
+                            },
+                            "Age": 52,
+                            "EntryDate": "/Date(915148800000)/",
+                            "ImageUrl": "Employees('4')/$value",
+                           
+                            "ne_Room": {
+                                "__metadata": {
+                                    "id": "http://localhost:8080/olingo-odata2-ref-web/ReferenceScenarioNonJaxrs.svc/Rooms('1')",
+                                    "uri": "http://localhost:8080/olingo-odata2-ref-web/ReferenceScenarioNonJaxrs.svc/Rooms('1')",
+                                    "type": "RefScenario.Room",
+                                    "etag": "W/\"1\""
+                                },
+                                "Id": "1",
+                                "Name": "Room 1",
+                                "Seats": 1,
+                                "Version": 1,
+                                "nr_Building": {
+				                    "__metadata": {
+				                        "id": "http://localhost:8080/olingo-odata2-ref-web/ReferenceScenarioNonJaxrs.svc/Buildings('3')",
+				                        "uri": "http://localhost:8080/olingo-odata2-ref-web/ReferenceScenarioNonJaxrs.svc/Buildings('3')",
+				                        "type": "RefScenario.Building"
+				                    },
+				                    "Id": "3",
+				                    "Name": "Building 3",
+				                    "Image": null,
+				                    "nb_Rooms": {
+				                        "__deferred": {
+				                            "uri": "http://localhost:8080/olingo-odata2-ref-web/ReferenceScenarioNonJaxrs.svc/Buildings('3')/nb_Rooms"
+				                        }
+				                    }
+				                }
+                            }
+                        },                      
+						{
+                            "EmployeeId": "1",
+                            "EmployeeName": "Walter Winter",
+                            "ManagerId": "1",
+                            "RoomId": "1",
+                            "TeamId": "1",
+                            "Location": {
+                                "__metadata": {
+                                    "type": "RefScenario.c_Location"
+                                },
+                                "City": {
+                                    "__metadata": {
+                                        "type": "RefScenario.c_City"
+                                    },
+                                    "PostalCode": "69124",
+                                    "CityName": "Heidelberg"
+                                },
+                                "Country": "Germany"
+                            },
+                            "Age": 52,
+                            "EntryDate": "/Date(915148800000)/",
+                            "ImageUrl": "Employees('1')/$value",
+                           
+                            "ne_Room": {
+                                "__metadata": {
+                                    "id": "http://localhost:8080/olingo-odata2-ref-web/ReferenceScenarioNonJaxrs.svc/Rooms('1')",
+                                    "uri": "http://localhost:8080/olingo-odata2-ref-web/ReferenceScenarioNonJaxrs.svc/Rooms('1')",
+                                    "type": "RefScenario.Room",
+                                    "etag": "W/\"1\""
+                                },
+                                "Id": "1",
+                                "Name": "Room 1",
+                                "Seats": 1,
+                                "Version": 1
+                            }
+                        },
+                         {
+                            "EmployeeId": "3",
+                            "EmployeeName": "Walter Winter",
+                            "ManagerId": "3",
+                            "RoomId": "1",
+                            "TeamId": "1",
+                            "Location": {
+                                "__metadata": {
+                                    "type": "RefScenario.c_Location"
+                                },
+                                "City": {
+                                    "__metadata": {
+                                        "type": "RefScenario.c_City"
+                                    },
+                                    "PostalCode": "69124",
+                                    "CityName": "Heidelberg"
+                                },
+                                "Country": "Germany"
+                            },
+                            "Age": 51,
+                            "EntryDate": "/Date(915148800005)/",
+                            "ImageUrl": "Employees('3')/$value"
+                        } ,
+                          {
+                            "EmployeeId": "2",
+                            "EmployeeName": "Walter Winter",
+                            "ManagerId": "2",
+                            "RoomId": "1",
+                            "TeamId": "1",
+                            "Location": {
+                                "__metadata": {
+                                    "type": "RefScenario.c_Location"
+                                },
+                                "City": {
+                                    "__metadata": {
+                                        "type": "RefScenario.c_City"
+                                    },
+                                    "PostalCode": "69124",
+                                    "CityName": "Heidelberg"
+                                },
+                                "Country": "Germany"
+                            },
+                            "Age": 51,
+                            "EntryDate": "/Date(915148800005)/",
+                            "ImageUrl": "Employees('2')/$value",
+                            "ne_Team": {
+			                    "__metadata": {
+			                        "id": "http://localhost:8080/olingo-odata2-ref-web/ReferenceScenarioNonJaxrs.svc/Teams('1')",
+			                        "uri": "http://localhost:8080/olingo-odata2-ref-web/ReferenceScenarioNonJaxrs.svc/Teams('1')",
+			                        "type": "RefScenario.Team"
+			                    },
+			                    "Id": "1",
+			                    "Name": "Team 1",
+			                    "isScrumTeam": false,
+			                    "nt_Employees": {
+			                        "__deferred": {
+			                            "uri": "http://localhost:8080/olingo-odata2-ref-web/ReferenceScenarioNonJaxrs.svc/Teams('1')/nt_Employees"
+			                        }
+			                    }
+			                }
+                        }
+                    ]
+                }
+            }
\ No newline at end of file