You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2014/05/18 07:07:03 UTC
[35/38] git commit: [OLINGO-275] Fix for xml and verified for json
[OLINGO-275] Fix for xml and verified for json
Project: http://git-wip-us.apache.org/repos/asf/olingo-odata2/repo
Commit: http://git-wip-us.apache.org/repos/asf/olingo-odata2/commit/340d7c03
Tree: http://git-wip-us.apache.org/repos/asf/olingo-odata2/tree/340d7c03
Diff: http://git-wip-us.apache.org/repos/asf/olingo-odata2/diff/340d7c03
Branch: refs/heads/Olingo-129_PocJpaDataStore
Commit: 340d7c030d8818f065246b6511a4200adc196e43
Parents: 3887f7b
Author: Christian Amend <ch...@apache.org>
Authored: Thu May 8 15:41:09 2014 +0200
Committer: Christian Amend <ch...@apache.org>
Committed: Thu May 8 15:41:09 2014 +0200
----------------------------------------------------------------------
.../core/ep/consumer/XmlEntityConsumer.java | 2 +-
.../core/ep/consumer/XmlEntryConsumer.java | 20 ++++---
.../core/ep/consumer/XmlFeedConsumer.java | 2 +-
.../core/ep/consumer/JsonEntryConsumerTest.java | 27 +++++++++
.../consumer/JsonEntryDeepInsertEntryTest.java | 2 +
.../core/ep/consumer/JsonFeedConsumerTest.java | 2 +
.../core/ep/consumer/XmlEntityConsumerTest.java | 15 ++++-
.../core/ep/consumer/XmlFeedConsumerTest.java | 27 +++++++++
.../odata-core/src/test/resources/JsonRoom.json | 24 ++++++++
.../src/test/resources/feed_rooms_small.xml | 62 ++++++++++++++++++++
10 files changed, 170 insertions(+), 13 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/340d7c03/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlEntityConsumer.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlEntityConsumer.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlEntityConsumer.java
index 5d73862..acbc77f 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlEntityConsumer.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlEntityConsumer.java
@@ -87,7 +87,7 @@ public class XmlEntityConsumer {
reader = XmlHelper.createStreamReader(content);
EntityInfoAggregator eia = EntityInfoAggregator.create(entitySet);
- return new XmlEntryConsumer().readEntry(reader, eia, properties);
+ return new XmlEntryConsumer().readEntry(reader, eia, properties, false);
} catch (EntityProviderException e) {
cachedException = e;
throw cachedException;
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/340d7c03/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlEntryConsumer.java
----------------------------------------------------------------------
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 a6111d1..4bc9173 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
@@ -75,10 +75,14 @@ public class XmlEntryConsumer {
private String currentHandledStartTagName;
public ODataEntry readEntry(final XMLStreamReader reader, final EntityInfoAggregator eia,
- final EntityProviderReadProperties readProperties) throws EntityProviderException {
+ final EntityProviderReadProperties readProperties, final boolean isInline) throws EntityProviderException {
try {
initialize(readProperties);
+ if (isInline) {
+ setETag(reader);
+ }
+
while (reader.hasNext() && !isEntryEndTag(reader)) {
reader.nextTag();
if (reader.isStartElement()) {
@@ -206,7 +210,10 @@ public class XmlEntryConsumer {
private void readEntry(final XMLStreamReader reader) throws EntityProviderException, XMLStreamException {
reader.require(XMLStreamConstants.START_ELEMENT, Edm.NAMESPACE_ATOM_2005, FormatXml.ATOM_ENTRY);
+ setETag(reader);
+ }
+ private void setETag(final XMLStreamReader reader) {
final String etag = reader.getAttributeValue(Edm.NAMESPACE_M_2007_08, FormatXml.M_ETAG);
entryMetadata.setEtag(etag);
}
@@ -278,7 +285,7 @@ public class XmlEntryConsumer {
final EntityProviderReadProperties inlineProperties = createInlineProperties(readProperties, navigationProperty);
// validations
- boolean isFeed = isInlineFeedValidated(reader, eia, atomLinkType, navigationPropertyName);
+ boolean isFeed = isInlineFeedValidated(reader, eia, atomLinkType, navigationProperty);
List<ODataEntry> inlineEntries = new ArrayList<ODataEntry>();
@@ -288,7 +295,7 @@ public class XmlEntryConsumer {
if (reader.isStartElement() && Edm.NAMESPACE_ATOM_2005.equals(reader.getNamespaceURI())
&& FormatXml.ATOM_ENTRY.equals(reader.getLocalName())) {
XmlEntryConsumer xec = new XmlEntryConsumer();
- ODataEntry inlineEntry = xec.readEntry(reader, inlineEia, inlineProperties);
+ ODataEntry inlineEntry = xec.readEntry(reader, inlineEia, inlineProperties, true);
inlineEntries.add(inlineEntry);
}
// next tag
@@ -462,13 +469,13 @@ public class XmlEntryConsumer {
* @param reader xml content reader which already points to <code><m:inline> tag</code>
* @param eia all necessary information about the entity
* @param type the atom type attribute value of the <code>link</code> tag
- * @param navigationPropertyName the navigation property name of the entity
+ * @param navigationProperty the navigation property name of the entity
* @return <code>true</code> for <code>Feed</code> and <code>false</code> for <code>Entry</code>
* @throws EntityProviderException is thrown if at least one validation fails.
* @throws EdmException if edm access fails
*/
private boolean isInlineFeedValidated(final XMLStreamReader reader, final EntityInfoAggregator eia,
- final String type, final String navigationPropertyName) throws EntityProviderException, EdmException {
+ final String type, final EdmNavigationProperty navigationProperty) throws EntityProviderException, EdmException {
boolean isFeed = false;
try {
reader.require(XMLStreamConstants.START_ELEMENT, Edm.NAMESPACE_M_2007_08, FormatXml.M_INLINE);
@@ -477,9 +484,6 @@ public class XmlEntryConsumer {
if (cType == null) {
throw new EntityProviderException(EntityProviderException.INVALID_INLINE_CONTENT.addContent("xml data"));
}
-
- EdmNavigationProperty navigationProperty =
- (EdmNavigationProperty) eia.getEntityType().getProperty(navigationPropertyName);
EdmMultiplicity navigationMultiplicity = navigationProperty.getMultiplicity();
switch (navigationMultiplicity) {
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/340d7c03/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlFeedConsumer.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlFeedConsumer.java b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlFeedConsumer.java
index 2ffec2e..9b427d5 100644
--- a/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlFeedConsumer.java
+++ b/odata2-lib/odata-core/src/main/java/org/apache/olingo/odata2/core/ep/consumer/XmlFeedConsumer.java
@@ -106,7 +106,7 @@ public class XmlFeedConsumer {
while (reader.hasNext() && !isFeedEndTag(reader)) {
if (FormatXml.ATOM_ENTRY.equals(reader.getLocalName())) {
- ODataEntry entry = xec.readEntry(reader, eia, entryReadProperties);
+ ODataEntry entry = xec.readEntry(reader, eia, entryReadProperties, true);
results.add(entry);
} else if (FormatXml.ATOM_TOMBSTONE_DELETED_ENTRY.equals(reader.getLocalName())) {
reader.require(XMLStreamConstants.START_ELEMENT, FormatXml.ATOM_TOMBSTONE_NAMESPACE,
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/340d7c03/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/JsonEntryConsumerTest.java
----------------------------------------------------------------------
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 0d4a2f4..30539fb 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
@@ -33,6 +33,7 @@ import java.util.TimeZone;
import org.apache.olingo.odata2.api.edm.EdmEntitySet;
import org.apache.olingo.odata2.api.ep.EntityProviderException;
import org.apache.olingo.odata2.api.ep.EntityProviderReadProperties;
+import org.apache.olingo.odata2.api.ep.entry.EntryMetadata;
import org.apache.olingo.odata2.api.ep.entry.MediaMetadata;
import org.apache.olingo.odata2.api.ep.entry.ODataEntry;
import org.apache.olingo.odata2.testutil.mock.MockFacade;
@@ -44,6 +45,7 @@ import org.junit.Test;
public class JsonEntryConsumerTest extends AbstractConsumerTest {
private static final String SIMPLE_ENTRY_BUILDING = "JsonBuilding.json";
+ private static final String SIMPLE_ENTRY_ROOM = "JsonRoom.json";
private static final String SIMPLE_ENTRY_EMPLOYEE = "JsonEmployee.json";
private static final String SIMPLE_ENTRY_TEAM = "JsonTeam.json";
private static final String INVALID_ENTRY_TEAM_DOUBLE_NAME_PROPERTY = "JsonInvalidTeamDoubleNameProperty.json";
@@ -63,6 +65,31 @@ public class JsonEntryConsumerTest extends AbstractConsumerTest {
JsonEntityConsumer xec = new JsonEntityConsumer();
xec.readEntry(entitySet, contentBody, DEFAULT_PROPERTIES);
}
+
+ @Test
+ public void readSimpleRoomEntry() throws Exception {
+ ODataEntry roomEntry = prepareAndExecuteEntry(SIMPLE_ENTRY_ROOM, "Rooms", DEFAULT_PROPERTIES);
+
+ // verify
+ Map<String, Object> properties = roomEntry.getProperties();
+ assertEquals(4, properties.size());
+
+ assertEquals("1", properties.get("Id"));
+ assertEquals("Room 1", properties.get("Name"));
+ assertEquals((short) 1, properties.get("Seats"));
+ assertEquals((short) 1, properties.get("Version"));
+
+ List<String> associationUris = roomEntry.getMetadata().getAssociationUris("nr_Employees");
+ assertEquals(1, associationUris.size());
+ assertEquals("http://localhost:8080/ReferenceScenario.svc/Rooms('1')/nr_Employees", associationUris.get(0));
+
+ associationUris = roomEntry.getMetadata().getAssociationUris("nr_Building");
+ assertEquals(1, associationUris.size());
+ assertEquals("http://localhost:8080/ReferenceScenario.svc/Rooms('1')/nr_Building", associationUris.get(0));
+
+ EntryMetadata metadata = roomEntry.getMetadata();
+ assertEquals("W/\"1\"",metadata.getEtag());
+ }
@SuppressWarnings("unchecked")
@Test
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/340d7c03/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/JsonEntryDeepInsertEntryTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/JsonEntryDeepInsertEntryTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/JsonEntryDeepInsertEntryTest.java
index 1a057af..d35bbe4 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/JsonEntryDeepInsertEntryTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/JsonEntryDeepInsertEntryTest.java
@@ -161,6 +161,8 @@ public class JsonEntryDeepInsertEntryTest extends AbstractConsumerTest {
associationUris = innerRoom.getMetadata().getAssociationUris("nr_Building");
assertEquals(Collections.emptyList(), associationUris);
+
+ assertEquals("W/\"1\"", innerRoom.getMetadata().getEtag());
ODataEntry innerBuilding = (ODataEntry) innerRoomProperties.get("nr_Building");
assertNotNull(innerBuilding);
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/340d7c03/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/JsonFeedConsumerTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/JsonFeedConsumerTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/JsonFeedConsumerTest.java
index 3d9201c..6495b73 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/JsonFeedConsumerTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/JsonFeedConsumerTest.java
@@ -507,6 +507,8 @@ public class JsonFeedConsumerTest extends AbstractConsumerTest {
assertNotNull(feedMetadata);
assertEquals("http://localhost:8080/ReferenceScenario.svc/Rooms?!deltatoken=4711", feedMetadata.getDeltaLink());
+ assertEquals("W/\"2\"", entries.get(0).getMetadata().getEtag());
+
List<DeletedEntryMetadata> deletedEntries = feed.getDeletedEntries();
assertEquals(2, deletedEntries.size());
for (DeletedEntryMetadata deletedEntry : deletedEntries) {
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/340d7c03/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlEntityConsumerTest.java
----------------------------------------------------------------------
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 59df942..45e9861 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
@@ -804,14 +804,20 @@ public class XmlEntityConsumerTest extends AbstractXmlConsumerTest {
// execute
XmlEntityConsumer xec = new XmlEntityConsumer();
- ODataEntry entry =
+ ODataEntry employee =
xec.readEntry(entitySet, reqContent, EntityProviderReadProperties.init().mergeSemantic(true).build());
// validate
- assertNotNull(entry);
- Map<String, Object> properties = entry.getProperties();
+ assertNotNull(employee);
+ Map<String, Object> properties = employee.getProperties();
assertEquals("1", properties.get("EmployeeId"));
assertEquals("Walter Winter", properties.get("EmployeeName"));
+ EntryMetadata employeeMetadata = employee.getMetadata();
+ assertNotNull(employeeMetadata);
+ assertEquals("W/\"1\"", employeeMetadata.getEtag());
+
+
+ //Inline
ODataEntry room = (ODataEntry) properties.get("ne_Room");
Map<String, Object> roomProperties = room.getProperties();
assertEquals(4, roomProperties.size());
@@ -819,6 +825,9 @@ public class XmlEntityConsumerTest extends AbstractXmlConsumerTest {
assertEquals("Room 1", roomProperties.get("Name"));
assertEquals(Short.valueOf("1"), roomProperties.get("Seats"));
assertEquals(Short.valueOf("1"), roomProperties.get("Version"));
+ EntryMetadata roomMetadata = room.getMetadata();
+ assertNotNull(roomMetadata);
+ assertEquals("W/1", roomMetadata.getEtag());
}
/**
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/340d7c03/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlFeedConsumerTest.java
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlFeedConsumerTest.java b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlFeedConsumerTest.java
index 9301258..dace8eb 100644
--- a/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlFeedConsumerTest.java
+++ b/odata2-lib/odata-core/src/test/java/org/apache/olingo/odata2/core/ep/consumer/XmlFeedConsumerTest.java
@@ -22,6 +22,7 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.io.InputStream;
+import java.util.List;
import junit.framework.Assert;
@@ -29,6 +30,8 @@ import org.apache.olingo.odata2.api.edm.EdmEntitySet;
import org.apache.olingo.odata2.api.ep.EntityProvider;
import org.apache.olingo.odata2.api.ep.EntityProviderException;
import org.apache.olingo.odata2.api.ep.EntityProviderReadProperties;
+import org.apache.olingo.odata2.api.ep.entry.EntryMetadata;
+import org.apache.olingo.odata2.api.ep.entry.ODataEntry;
import org.apache.olingo.odata2.api.ep.feed.FeedMetadata;
import org.apache.olingo.odata2.api.ep.feed.ODataDeltaFeed;
import org.apache.olingo.odata2.api.ep.feed.ODataFeed;
@@ -40,6 +43,30 @@ public class XmlFeedConsumerTest extends AbstractXmlConsumerTest {
public XmlFeedConsumerTest(final StreamWriterImplType type) {
super(type);
}
+
+ @Test
+ public void roomsFeedWithEtagEntries() throws Exception {
+ InputStream stream = getFileAsStream("feed_rooms_small.xml");
+ assertNotNull(stream);
+
+ ODataFeed feed =
+ EntityProvider.readFeed("application/atom+xml", MockFacade.getMockEdm().getDefaultEntityContainer()
+ .getEntitySet(
+ "Rooms"), stream, DEFAULT_PROPERTIES);
+ assertNotNull(feed);
+
+ FeedMetadata feedMetadata = feed.getFeedMetadata();
+ assertNotNull(feedMetadata);
+ assertNotNull(feedMetadata.getNextLink());
+
+ List<ODataEntry> entries = feed.getEntries();
+ assertEquals(3, entries.size());
+ ODataEntry singleRoom = entries.get(0);
+ EntryMetadata roomMetadata = singleRoom.getMetadata();
+ assertNotNull(roomMetadata);
+
+ assertEquals("W/\"1\"", roomMetadata.getEtag());
+ }
@Test
public void readLargeEmployeesFeed() throws Exception {
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/340d7c03/odata2-lib/odata-core/src/test/resources/JsonRoom.json
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/resources/JsonRoom.json b/odata2-lib/odata-core/src/test/resources/JsonRoom.json
new file mode 100644
index 0000000..806aef2
--- /dev/null
+++ b/odata2-lib/odata-core/src/test/resources/JsonRoom.json
@@ -0,0 +1,24 @@
+{
+ "d" : {
+ "__metadata" : {
+ "id" : "http://localhost:8080/ReferenceScenario.svc/Rooms('1')",
+ "uri" : "http://localhost:8080/ReferenceScenario.svc/Rooms('1')",
+ "type" : "RefScenario.Room",
+ "etag" : "W/\"1\""
+ },
+ "Id" : "1",
+ "Name" : "Room 1",
+ "Seats" : 1,
+ "Version" : 1,
+ "nr_Employees" : {
+ "__deferred" : {
+ "uri" : "http://localhost:8080/ReferenceScenario.svc/Rooms('1')/nr_Employees"
+ }
+ },
+ "nr_Building" : {
+ "__deferred" : {
+ "uri" : "http://localhost:8080/ReferenceScenario.svc/Rooms('1')/nr_Building"
+ }
+ }
+ }
+}
http://git-wip-us.apache.org/repos/asf/olingo-odata2/blob/340d7c03/odata2-lib/odata-core/src/test/resources/feed_rooms_small.xml
----------------------------------------------------------------------
diff --git a/odata2-lib/odata-core/src/test/resources/feed_rooms_small.xml b/odata2-lib/odata-core/src/test/resources/feed_rooms_small.xml
new file mode 100644
index 0000000..6b8c09b
--- /dev/null
+++ b/odata2-lib/odata-core/src/test/resources/feed_rooms_small.xml
@@ -0,0 +1,62 @@
+<?xml version='1.0' encoding='utf-8'?>
+<feed 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/ReferenceScenario.svc/">
+ <id>http://localhost:8080/ReferenceScenario.svc/Rooms</id>
+ <title type="text">Rooms</title>
+ <updated>2014-05-08T13:06:23Z</updated>
+ <author>
+ <name/>
+ </author>
+ <link href="Rooms" rel="self" title="Rooms"/>
+ <entry m:etag="W/"1"">
+ <id>http://localhost:8080/ReferenceScenario.svc/Rooms('1')</id>
+ <title type="text">Room 1</title>
+ <updated>2014-05-08T13:06:23Z</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"/>
+ <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>
+ <entry m:etag="W/"1"">
+ <id>http://localhost:8080/ReferenceScenario.svc/Rooms('10')</id>
+ <title type="text">Room 10</title>
+ <updated>2014-05-08T13:06:23Z</updated>
+ <category term="RefScenario.Room" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/>
+ <link href="Rooms('10')" rel="edit" title="Room"/>
+ <link href="Rooms('10')/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('10')/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>10</d:Id>
+ <d:Name>Room 10</d:Name>
+ <d:Seats>6</d:Seats>
+ <d:Version>1</d:Version>
+ </m:properties>
+ </content>
+ </entry>
+ <entry m:etag="W/"1"">
+ <id>http://localhost:8080/ReferenceScenario.svc/Rooms('100')</id>
+ <title type="text">Room 100</title>
+ <updated>2014-05-08T13:06:23Z</updated>
+ <category term="RefScenario.Room" scheme="http://schemas.microsoft.com/ado/2007/08/dataservices/scheme"/>
+ <link href="Rooms('100')" rel="edit" title="Room"/>
+ <link href="Rooms('100')/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('100')/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>100</d:Id>
+ <d:Name>Room 100</d:Name>
+ <d:Seats>6</d:Seats>
+ <d:Version>1</d:Version>
+ </m:properties>
+ </content>
+ </entry>
+ <link href="http://localhost:8080/ReferenceScenario.svc/Rooms?$skiptoken=97" rel="next"/>
+</feed>
\ No newline at end of file