[OLINGO-200] More ref tests

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

Branch: refs/heads/olingo-206-validator
Commit: 6aaec814c423d14c20db3285b1bbd78173a35ec9
Parents: 525767c
Author: Francesco Chicchiriccò <[email protected]>
Authored: Tue Apr 1 16:04:24 2014 +0200
Committer: Francesco Chicchiriccò <[email protected]>
Committed: Tue Apr 1 16:04:24 2014 +0200

----------------------------------------------------------------------
 .../olingo/client/core/v4/EntitySetTest.java    | 32 +++++++++++++--
 .../olingo/client/core/v4/EntityTest.java       | 23 +++++++++++
 .../apache/olingo/client/core/v4/JSONTest.java  | 19 +++++++++
 .../apache/olingo/client/core/v4/Customers.xml  | 42 ++++++++++----------
 .../core/v4/collectionOfEntityReferences.json   | 11 +++++
 .../core/v4/collectionOfEntityReferences.xml    | 25 ++++++++++++
 .../olingo/client/core/v4/entityReference.json  |  4 ++
 .../olingo/client/core/v4/entityReference.xml   | 22 ++++++++++
 .../apache/olingo/commons/api/Constants.java    |  4 +-
 .../commons/core/data/AbstractAtomDealer.java   |  4 +-
 .../commons/core/data/AtomDeserializer.java     | 27 +++++++------
 .../commons/core/data/AtomSerializer.java       | 28 ++++++++++---
 12 files changed, 195 insertions(+), 46 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6aaec814/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntitySetTest.java
----------------------------------------------------------------------
diff --git 
a/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntitySetTest.java
 
b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntitySetTest.java
index 6708be6..cbca942 100644
--- 
a/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntitySetTest.java
+++ 
b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntitySetTest.java
@@ -25,9 +25,9 @@ import static org.junit.Assert.assertEquals;
 import java.io.IOException;
 import java.io.InputStream;
 import org.apache.olingo.client.api.v4.ODataClient;
-import org.apache.olingo.commons.api.domain.CommonODataEntitySet;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
 import org.apache.olingo.client.core.AbstractTest;
+import org.apache.olingo.commons.api.domain.v4.ODataEntity;
 import org.apache.olingo.commons.api.domain.v4.ODataEntitySet;
 import org.apache.olingo.commons.core.op.ResourceFactory;
 import org.junit.Test;
@@ -48,8 +48,8 @@ public class EntitySetTest extends AbstractTest {
     assertEquals(2, entitySet.getEntities().size());
     assertNull(entitySet.getNext());
 
-    final CommonODataEntitySet written = 
getClient().getBinder().getODataEntitySet(getClient().
-            getBinder().getFeed(entitySet, 
ResourceFactory.feedClassForFormat(format == ODataPubFormat.ATOM)));
+    final ODataEntitySet written = 
getClient().getBinder().getODataEntitySet(getClient().getBinder().
+            getFeed(entitySet, ResourceFactory.feedClassForFormat(format == 
ODataPubFormat.ATOM)));
     assertEquals(entitySet, written);
   }
 
@@ -62,4 +62,30 @@ public class EntitySetTest extends AbstractTest {
   public void fromJSON() throws IOException {
     read(ODataPubFormat.JSON);
   }
+
+  private void ref(final ODataPubFormat format) {
+    final InputStream input = 
getClass().getResourceAsStream("collectionOfEntityReferences." + 
getSuffix(format));
+    final ODataEntitySet entitySet = getClient().getBinder().getODataEntitySet(
+            getClient().getDeserializer().toFeed(input, format).getObject());
+    assertNotNull(entitySet);
+
+    for (ODataEntity entity : entitySet.getEntities()) {
+      assertNotNull(entity.getReference());
+    }
+    entitySet.setCount(entitySet.getEntities().size());
+
+    final ODataEntitySet written = 
getClient().getBinder().getODataEntitySet(getClient().getBinder().
+            getFeed(entitySet, ResourceFactory.feedClassForFormat(format == 
ODataPubFormat.ATOM)));
+    assertEquals(entitySet, written);
+  }
+
+  @Test
+  public void atomRef() {
+    ref(ODataPubFormat.ATOM);
+  }
+
+  @Test
+  public void jsonRef() {
+    ref(ODataPubFormat.JSON);
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6aaec814/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java
----------------------------------------------------------------------
diff --git 
a/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java
 
b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java
index e061be6..5b8f586 100644
--- 
a/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java
+++ 
b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/EntityTest.java
@@ -224,4 +224,27 @@ public class EntityTest extends AbstractTest {
   public void jsonWithStream() {
     withStream(ODataPubFormat.JSON_FULL_METADATA);
   }
+
+  private void ref(final ODataPubFormat format) {
+    final InputStream input = 
getClass().getResourceAsStream("entityReference." + getSuffix(format));
+    final ODataEntity entity = getClient().getBinder().getODataEntity(
+            getClient().getDeserializer().toEntry(input, format).getObject());
+    assertNotNull(entity);
+
+    assertNotNull(entity.getReference());
+
+    final ODataEntity written = 
getClient().getBinder().getODataEntity(getClient().getBinder().
+            getEntry(entity, ResourceFactory.entryClassForFormat(format == 
ODataPubFormat.ATOM)));
+    assertEquals(entity, written);
+  }
+
+  @Test
+  public void atomRef() {
+    ref(ODataPubFormat.ATOM);
+  }
+
+  @Test
+  public void jsonRef() {
+    ref(ODataPubFormat.JSON);
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6aaec814/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/JSONTest.java
----------------------------------------------------------------------
diff --git 
a/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/JSONTest.java 
b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/JSONTest.java
index 770f112..791c1c7 100644
--- 
a/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/JSONTest.java
+++ 
b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/JSONTest.java
@@ -115,6 +115,20 @@ public class JSONTest extends AbstractTest {
     assertEquals(orig, OBJECT_MAPPER.readTree(new 
ByteArrayInputStream(actual.getBytes())));
   }
 
+  protected void feed(final String filename, final ODataPubFormat format) 
throws Exception {
+    final StringWriter writer = new StringWriter();
+    getClient().getSerializer().feed(getClient().getDeserializer().toFeed(
+            getClass().getResourceAsStream(filename + "." + 
getSuffix(format)), format).getObject(), writer);
+
+    assertSimilar(filename + "." + getSuffix(format), writer.toString());
+  }
+
+  @Test
+  public void feeds() throws Exception {
+    feed("Customers", getODataPubFormat());
+    feed("collectionOfEntityReferences", getODataPubFormat());
+  }
+
   protected void entry(final String filename, final ODataPubFormat format) 
throws Exception {
     final StringWriter writer = new StringWriter();
     getClient().getSerializer().entry(getClient().getDeserializer().toEntry(
@@ -137,6 +151,8 @@ public class JSONTest extends AbstractTest {
   public void entries() throws Exception {
     entry("Products_5", getODataPubFormat());
     entry("VipCustomer", getODataPubFormat());
+    entry("Advertisements_f89dee73-af9f-4cd4-b330-db93c25ff3c7", 
getODataPubFormat());
+    entry("entityReference", getODataPubFormat());
   }
 
   protected void property(final String filename, final ODataFormat format) 
throws Exception {
@@ -150,5 +166,8 @@ public class JSONTest extends AbstractTest {
   @Test
   public void properties() throws Exception {
     property("Products_5_SkinColor", getODataFormat());
+    property("Products_5_CoverColors", getODataFormat());
+    property("Employees_3_HomeAddress", getODataFormat());
+    property("Employees_3_HomeAddress", getODataFormat());
   }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6aaec814/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/Customers.xml
----------------------------------------------------------------------
diff --git 
a/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/Customers.xml
 
b/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/Customers.xml
index 9b3d870..aa416d2 100644
--- 
a/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/Customers.xml
+++ 
b/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/Customers.xml
@@ -28,26 +28,26 @@
       
m:context="http://odatae2etest.azurewebsites.net/javatest/DefaultService/$metadata#Customers";>
   <m:count>2</m:count>
   
<id>http://odatae2etest.azurewebsites.net/javatest/DefaultService/Customers</id>
-  <title />
+  <title/>
   <updated>2014-03-31T09:35:14Z</updated>
   <entry>
     
<id>http://odatae2etest.azurewebsites.net/javatest/DefaultService/Customers(PersonID=1)</id>
-    <category term="#Microsoft.Test.OData.Services.ODataWCFService.Customer" 
scheme="http://docs.oasis-open.org/odata/ns/scheme"; />
-    <link rel="edit" 
href="http://odatae2etest.azurewebsites.net/javatest/DefaultService/Customers(PersonID=1)"
 />
-    <link rel="http://docs.oasis-open.org/odata/ns/related/Parent"; 
type="application/atom+xml;type=entry" title="Parent" 
href="http://odatae2etest.azurewebsites.net/javatest/DefaultService/Customers(PersonID=1)/Parent"
 />
-    <link rel="http://docs.oasis-open.org/odata/ns/related/Orders"; 
type="application/atom+xml;type=feed" title="Orders" 
href="http://odatae2etest.azurewebsites.net/javatest/DefaultService/Customers(PersonID=1)/Orders"
 />
-    <link rel="http://docs.oasis-open.org/odata/ns/related/Company"; 
type="application/atom+xml;type=entry" title="Company" 
href="http://odatae2etest.azurewebsites.net/javatest/DefaultService/Customers(PersonID=1)/Company"
 />
-    <title />
+    <category term="#Microsoft.Test.OData.Services.ODataWCFService.Customer" 
scheme="http://docs.oasis-open.org/odata/ns/scheme"/>
+    <link rel="edit" 
href="http://odatae2etest.azurewebsites.net/javatest/DefaultService/Customers(PersonID=1)"/>
+    <link rel="http://docs.oasis-open.org/odata/ns/related/Parent"; 
type="application/atom+xml;type=entry" title="Parent" 
href="http://odatae2etest.azurewebsites.net/javatest/DefaultService/Customers(PersonID=1)/Parent"/>
+    <link rel="http://docs.oasis-open.org/odata/ns/related/Orders"; 
type="application/atom+xml;type=feed" title="Orders" 
href="http://odatae2etest.azurewebsites.net/javatest/DefaultService/Customers(PersonID=1)/Orders"/>
+    <link rel="http://docs.oasis-open.org/odata/ns/related/Company"; 
type="application/atom+xml;type=entry" title="Company" 
href="http://odatae2etest.azurewebsites.net/javatest/DefaultService/Customers(PersonID=1)/Company"/>
+    <title/>
     <updated>2014-03-31T09:35:14Z</updated>
     <author>
-      <name />
+      <name/>
     </author>
     <content type="application/xml">
       <m:properties>
         <d:PersonID m:type="Int32">1</d:PersonID>
         <d:FirstName>Bob</d:FirstName>
         <d:LastName>Cat</d:LastName>
-        <d:MiddleName m:null="true" />
+        <d:MiddleName m:null="true"/>
         <d:HomeAddress 
m:type="#Microsoft.Test.OData.Services.ODataWCFService.HomeAddress">
           <d:Street>1 Microsoft Way</d:Street>
           <d:City>London</d:City>
@@ -73,30 +73,30 @@
   </entry>
   <entry>
     
<id>http://odatae2etest.azurewebsites.net/javatest/DefaultService/Customers(PersonID=2)</id>
-    <category term="#Microsoft.Test.OData.Services.ODataWCFService.Customer" 
scheme="http://docs.oasis-open.org/odata/ns/scheme"; />
-    <link rel="edit" 
href="http://odatae2etest.azurewebsites.net/javatest/DefaultService/Customers(PersonID=2)"
 />
-    <link rel="http://docs.oasis-open.org/odata/ns/related/Parent"; 
type="application/atom+xml;type=entry" title="Parent" 
href="http://odatae2etest.azurewebsites.net/javatest/DefaultService/Customers(PersonID=2)/Parent"
 />
-    <link rel="http://docs.oasis-open.org/odata/ns/related/Orders"; 
type="application/atom+xml;type=feed" title="Orders" 
href="http://odatae2etest.azurewebsites.net/javatest/DefaultService/Customers(PersonID=2)/Orders"
 />
-    <link rel="http://docs.oasis-open.org/odata/ns/related/Company"; 
type="application/atom+xml;type=entry" title="Company" 
href="http://odatae2etest.azurewebsites.net/javatest/DefaultService/Customers(PersonID=2)/Company"
 />
-    <title />
+    <category term="#Microsoft.Test.OData.Services.ODataWCFService.Customer" 
scheme="http://docs.oasis-open.org/odata/ns/scheme"/>
+    <link rel="edit" 
href="http://odatae2etest.azurewebsites.net/javatest/DefaultService/Customers(PersonID=2)"/>
+    <link rel="http://docs.oasis-open.org/odata/ns/related/Parent"; 
type="application/atom+xml;type=entry" title="Parent" 
href="http://odatae2etest.azurewebsites.net/javatest/DefaultService/Customers(PersonID=2)/Parent"/>
+    <link rel="http://docs.oasis-open.org/odata/ns/related/Orders"; 
type="application/atom+xml;type=feed" title="Orders" 
href="http://odatae2etest.azurewebsites.net/javatest/DefaultService/Customers(PersonID=2)/Orders"/>
+    <link rel="http://docs.oasis-open.org/odata/ns/related/Company"; 
type="application/atom+xml;type=entry" title="Company" 
href="http://odatae2etest.azurewebsites.net/javatest/DefaultService/Customers(PersonID=2)/Company"/>
+    <title/>
     <updated>2014-03-31T09:35:14Z</updated>
     <author>
-      <name />
+      <name/>
     </author>
     <content type="application/xml">
       <m:properties>
         <d:PersonID m:type="Int32">2</d:PersonID>
         <d:FirstName>Jill</d:FirstName>
         <d:LastName>Jones</d:LastName>
-        <d:MiddleName m:null="true" />
-        <d:HomeAddress m:null="true" />
+        <d:MiddleName m:null="true"/>
+        <d:HomeAddress m:null="true"/>
         <d:Home m:type="GeographyPoint">
           <gml:Point gml:srsName="http://www.opengis.net/def/crs/EPSG/0/4326";>
-            <gml:pos>15 161.8</gml:pos>
+            <gml:pos>15.0 161.8</gml:pos>
           </gml:Point>
         </d:Home>
-        <d:Numbers m:type="#Collection(String)" />
-        <d:Emails m:type="#Collection(String)" />
+        <d:Numbers m:type="#Collection(String)"/>
+        <d:Emails m:type="#Collection(String)"/>
         <d:City>Sydney</d:City>
         <d:Birthday m:type="DateTimeOffset">1983-01-15T00:00:00Z</d:Birthday>
         <d:TimeBetweenLastTwoOrders 
m:type="Duration">PT0.0000002S</d:TimeBetweenLastTwoOrders>

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6aaec814/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/collectionOfEntityReferences.json
----------------------------------------------------------------------
diff --git 
a/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/collectionOfEntityReferences.json
 
b/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/collectionOfEntityReferences.json
new file mode 100644
index 0000000..7646ee8
--- /dev/null
+++ 
b/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/collectionOfEntityReferences.json
@@ -0,0 +1,11 @@
+{
+  "@odata.context": 
"http://odatae2etest.azurewebsites.net/javatest/DefaultService/$metadata#Collection($ref)",
+  "value": [
+    {
+      "@odata.id": 
"http://odatae2etest.azurewebsites.net/javatest/DefaultService/OrderDetails(OrderID=7,ProductID=5)"
+    },
+    {
+      "@odata.id": 
"http://odatae2etest.azurewebsites.net/javatest/DefaultService/OrderDetails(OrderID=7,ProductID=6)"
+    }
+  ]
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6aaec814/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/collectionOfEntityReferences.xml
----------------------------------------------------------------------
diff --git 
a/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/collectionOfEntityReferences.xml
 
b/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/collectionOfEntityReferences.xml
new file mode 100644
index 0000000..9534270
--- /dev/null
+++ 
b/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/collectionOfEntityReferences.xml
@@ -0,0 +1,25 @@
+<?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.
+-->
+<feed xmlns:m="http://docs.oasis-open.org/odata/ns/metadata"; 
+      
m:context="http://odatae2etest.azurewebsites.net/javatest/DefaultService/$metadata#Collection($ref)"
 
+      xmlns="http://www.w3.org/2005/Atom";>
+  <m:ref 
id="http://odatae2etest.azurewebsites.net/javatest/DefaultService/OrderDetails(OrderID=7,ProductID=5)"/>
+  <m:ref 
id="http://odatae2etest.azurewebsites.net/javatest/DefaultService/OrderDetails(OrderID=7,ProductID=6)"/>
+</feed>

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6aaec814/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/entityReference.json
----------------------------------------------------------------------
diff --git 
a/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/entityReference.json
 
b/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/entityReference.json
new file mode 100644
index 0000000..d0b6960
--- /dev/null
+++ 
b/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/entityReference.json
@@ -0,0 +1,4 @@
+{
+  "@odata.context": 
"http://odatae2etest.azurewebsites.net/javatest/DefaultService/$metadata#$ref";,
+  "@odata.id": 
"http://odatae2etest.azurewebsites.net/javatest/DefaultService/Employees(PersonID=3)"
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6aaec814/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/entityReference.xml
----------------------------------------------------------------------
diff --git 
a/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/entityReference.xml
 
b/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/entityReference.xml
new file mode 100644
index 0000000..d04613b
--- /dev/null
+++ 
b/lib/client-core/src/test/resources/org/apache/olingo/client/core/v4/entityReference.xml
@@ -0,0 +1,22 @@
+<?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.
+-->
+<m:ref 
m:context="http://odatae2etest.azurewebsites.net/javatest/DefaultService/$metadata#$ref";
 
+       
id="http://odatae2etest.azurewebsites.net/javatest/DefaultService/Employees(PersonID=3)"
 
+       xmlns:m="http://docs.oasis-open.org/odata/ns/metadata"/>

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6aaec814/lib/commons-api/src/main/java/org/apache/olingo/commons/api/Constants.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/Constants.java 
b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/Constants.java
index a1aec31..882c811 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/Constants.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/Constants.java
@@ -170,9 +170,9 @@ public interface Constants {
 
   public final static String ATOM_ELEM_ENTRY_REF = "ref";
 
-  public final static String ATOM_ELEM_ENTRY_REF_ID = "id";
+  public final static String ATOM_ATTR_ID = "id";
 
-  public final static QName QNAME_ATOM_ELEM_ENTRY_REF_ID = new 
QName(ATOM_ELEM_ENTRY_REF_ID);
+  public final static QName QNAME_ATOM_ATTR_ID = new QName(ATOM_ATTR_ID);
 
   public static final QName QNAME_ATOM_ELEM_ENTRY = new QName(NS_ATOM, 
ATOM_ELEM_ENTRY);
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6aaec814/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractAtomDealer.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractAtomDealer.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractAtomDealer.java
index e9338f1..f4944d6 100644
--- 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractAtomDealer.java
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractAtomDealer.java
@@ -56,7 +56,7 @@ abstract class AbstractAtomDealer {
 
   protected final QName contextQName;
 
-  protected final QName entityRefQName;
+  protected final QName entryRefQName;
 
   protected final QName v4PropertyValueQName;
 
@@ -92,7 +92,7 @@ abstract class AbstractAtomDealer {
             new 
QName(version.getNamespaceMap().get(ODataServiceVersion.NS_DATASERVICES), 
Constants.NEXT_LINK_REL);
     this.contextQName =
             new 
QName(version.getNamespaceMap().get(ODataServiceVersion.NS_METADATA), 
Constants.CONTEXT);
-    this.entityRefQName =
+    this.entryRefQName =
             new 
QName(version.getNamespaceMap().get(ODataServiceVersion.NS_METADATA), 
Constants.ATOM_ELEM_ENTRY_REF);
     this.v4PropertyValueQName =
             new 
QName(version.getNamespaceMap().get(ODataServiceVersion.NS_METADATA), 
Constants.VALUE);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6aaec814/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomDeserializer.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomDeserializer.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomDeserializer.java
index 722ea50..c748f59 100644
--- 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomDeserializer.java
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomDeserializer.java
@@ -171,9 +171,20 @@ public class AtomDeserializer extends AbstractAtomDealer {
     }
   }
 
+  private AtomEntryImpl entryRef(final StartElement start) throws 
XMLStreamException {
+    final AtomEntryImpl entry = new AtomEntryImpl();
+
+    final Attribute entryRefId = 
start.getAttributeByName(Constants.QNAME_ATOM_ATTR_ID);
+    if (entryRefId != null) {
+      entry.setId(entryRefId.getValue());
+    }
+
+    return entry;
+  }
+
   private AtomEntryImpl entry(final XMLEventReader reader, final StartElement 
start) throws XMLStreamException {
     final AtomEntryImpl entry;
-    if (entityRefQName.equals(start.getName())) {
+    if (entryRefQName.equals(start.getName())) {
       entry = entryRef(start);
     } else if (Constants.QNAME_ATOM_ELEM_ENTRY.equals(start.getName())) {
       entry = new AtomEntryImpl();
@@ -296,18 +307,6 @@ public class AtomDeserializer extends AbstractAtomDealer {
     return entry;
   }
 
-  private AtomEntryImpl entryRef(final StartElement start) throws 
XMLStreamException {
-    final AtomEntryImpl entry = new AtomEntryImpl();
-
-    final Attribute entryRefId = 
start.getAttributeByName(Constants.QNAME_ATOM_ELEM_ENTRY_REF_ID);
-
-    if (entryRefId != null) {
-      entry.setId(entryRefId.getValue());
-    }
-
-    return entry;
-  }
-
   private Container<AtomEntryImpl> entry(final InputStream input) throws 
XMLStreamException {
     final XMLEventReader reader = FACTORY.createXMLEventReader(input);
     final StartElement start = skipBeforeFirstStartElement(reader);
@@ -365,6 +364,8 @@ public class AtomDeserializer extends AbstractAtomDealer {
           }
         } else if 
(Constants.QNAME_ATOM_ELEM_ENTRY.equals(event.asStartElement().getName())) {
           feed.getEntries().add(entry(reader, event.asStartElement()));
+        } else if (entryRefQName.equals(event.asStartElement().getName())) {
+          feed.getEntries().add(entryRef(event.asStartElement()));
         }
       }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/6aaec814/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomSerializer.java
----------------------------------------------------------------------
diff --git 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomSerializer.java
 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomSerializer.java
index c3be420..f89aaee 100644
--- 
a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomSerializer.java
+++ 
b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AtomSerializer.java
@@ -171,12 +171,25 @@ public class AtomSerializer extends AbstractAtomDealer {
     writer.writeEndElement();
   }
 
+  private void entryRef(final XMLStreamWriter writer, final Entry entry) 
throws XMLStreamException {
+    writer.writeStartElement(Constants.ATOM_ELEM_ENTRY_REF);
+    writer.writeNamespace(StringUtils.EMPTY, 
version.getNamespaceMap().get(ODataServiceVersion.NS_METADATA));
+    writer.writeAttribute(Constants.ATOM_ATTR_ID, entry.getId());
+  }
+
   private void entry(final Writer outWriter, final Entry entry) throws 
XMLStreamException {
     final XMLStreamWriter writer = FACTORY.createXMLStreamWriter(outWriter);
 
-    startDocument(writer, Constants.ATOM_ELEM_ENTRY);
+    if (entry.getType() == null && entry.getProperties().isEmpty()) {
+      writer.writeStartDocument();
+      
writer.setDefaultNamespace(version.getNamespaceMap().get(ODataServiceVersion.NS_METADATA));
+
+      entryRef(writer, entry);
+    } else {
+      startDocument(writer, Constants.ATOM_ELEM_ENTRY);
 
-    entry(writer, entry);
+      entry(writer, entry);
+    }
 
     writer.writeEndElement();
     writer.writeEndDocument();
@@ -206,9 +219,14 @@ public class AtomSerializer extends AbstractAtomDealer {
     }
 
     for (Entry entry : feed.getEntries()) {
-      writer.writeStartElement(Constants.ATOM_ELEM_ENTRY);
-      entry(writer, entry);
-      writer.writeEndElement();
+      if (entry.getType() == null && entry.getProperties().isEmpty()) {
+        entryRef(writer, entry);
+        writer.writeEndElement();
+      } else {
+        writer.writeStartElement(Constants.ATOM_ELEM_ENTRY);
+        entry(writer, entry);
+        writer.writeEndElement();
+      }
     }
 
     if (feed.getNext() != null) {

Reply via email to