You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by il...@apache.org on 2014/04/17 14:56:34 UTC

[1/5] git commit: Enhancing ODataPrimitiveValue test for DateTimeOffset

Repository: olingo-odata4
Updated Branches:
  refs/heads/master 7276a707e -> 3bb39defd


Enhancing ODataPrimitiveValue test for DateTimeOffset


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

Branch: refs/heads/master
Commit: 7ee1e39f1ec2e5fb79fd7e87f4ff3f0e2a6da245
Parents: 47f1ec1
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Wed Apr 16 09:31:17 2014 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Wed Apr 16 09:31:17 2014 +0200

----------------------------------------------------------------------
 .../client/core/v3/PrimitiveValueTest.java      | 64 +++++++++++---------
 .../client/core/v4/PrimitiveValueTest.java      |  8 +--
 2 files changed, 38 insertions(+), 34 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/7ee1e39f/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/PrimitiveValueTest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/PrimitiveValueTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/PrimitiveValueTest.java
index 64301df..24c13da 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/PrimitiveValueTest.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/v3/PrimitiveValueTest.java
@@ -31,6 +31,7 @@ import java.util.TimeZone;
 import java.util.UUID;
 import javax.xml.datatype.Duration;
 import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.olingo.commons.api.domain.ODataValue;
 import org.apache.olingo.client.api.v3.ODataClient;
 import org.apache.olingo.client.core.AbstractTest;
@@ -44,7 +45,6 @@ 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.junit.Test;
 
 public class PrimitiveValueTest extends AbstractTest {
@@ -55,7 +55,7 @@ public class PrimitiveValueTest extends AbstractTest {
   }
 
   @Test
-  public void manageInt32() throws EdmPrimitiveTypeException {
+  public void int32() throws EdmPrimitiveTypeException {
     final int primitive = -10;
     ODataValue value = getClient().getObjectFactory().newPrimitiveValueBuilder().setType(EdmPrimitiveTypeKind.Int32).
             setValue(primitive).build();
@@ -68,20 +68,19 @@ public class PrimitiveValueTest extends AbstractTest {
   }
 
   @Test
-  public void manageString() throws EdmPrimitiveTypeException {
-    final String primitive = UUID.randomUUID().toString();
-    ODataValue value = getClient().getObjectFactory().newPrimitiveValueBuilder().setType(EdmPrimitiveTypeKind.String).
-            setText(primitive).build();
+  public void string() throws EdmPrimitiveTypeException {
+    final String primitive = RandomStringUtils.random(17);
+    ODataValue value = getClient().getObjectFactory().newPrimitiveValueBuilder().buildString(primitive);
     assertEquals(EdmPrimitiveTypeKind.String, value.asPrimitive().getTypeKind());
     assertEquals(primitive, value.toString());
 
     value = getClient().getObjectFactory().newPrimitiveValueBuilder().setType(EdmPrimitiveTypeKind.String).
             setText("1126a28b-a4af-4bbd-bf0a-2b2c22635565").build();
-    assertEquals("1126a28b-a4af-4bbd-bf0a-2b2c22635565", value.asPrimitive().toCastValue(String.class).toString());
+    assertEquals("1126a28b-a4af-4bbd-bf0a-2b2c22635565", value.asPrimitive().toCastValue(String.class));
   }
 
   @Test
-  public void manageDecimal() throws EdmPrimitiveTypeException {
+  public void decimal() throws EdmPrimitiveTypeException {
     final BigDecimal primitive = new BigDecimal("-79228162514264337593543950335");
     ODataValue value = getClient().getObjectFactory().newPrimitiveValueBuilder().setType(EdmPrimitiveTypeKind.Decimal).
             setValue(primitive).build();
@@ -94,7 +93,7 @@ public class PrimitiveValueTest extends AbstractTest {
   }
 
   @Test
-  public void manageDateTime() throws EdmPrimitiveTypeException {
+  public void dateTime() throws EdmPrimitiveTypeException {
     final Calendar expected = Calendar.getInstance();
     expected.clear();
     expected.set(2013, 0, 10, 2, 0, 0);
@@ -121,7 +120,7 @@ public class PrimitiveValueTest extends AbstractTest {
   }
 
   @Test
-  public void manageTime() throws EdmPrimitiveTypeException {
+  public void time() throws EdmPrimitiveTypeException {
     final String primitive = "-P9DT51M10.5063807S";
     final ODataValue value =
             getClient().getObjectFactory().newPrimitiveValueBuilder().setType(EdmPrimitiveTypeKind.Time).
@@ -132,29 +131,34 @@ public class PrimitiveValueTest extends AbstractTest {
   }
 
   @Test
-  public void manageDateTimeOffset() throws EdmPrimitiveTypeException {
+  public void dateTimeOffset() throws EdmPrimitiveTypeException {
     final Calendar expected = Calendar.getInstance();
     expected.clear();
     expected.setTimeZone(TimeZone.getTimeZone("GMT"));
     expected.set(2013, 0, 10, 2, 0, 0);
+    expected.set(Calendar.MILLISECOND, 22);
 
     final ODataValue value = getClient().getObjectFactory().newPrimitiveValueBuilder().
             setType(EdmPrimitiveTypeKind.DateTimeOffset).setValue(expected).build();
     assertEquals(EdmPrimitiveTypeKind.DateTimeOffset, value.asPrimitive().getTypeKind());
 
-    final Calendar actual = value.asPrimitive().toCastValue(Calendar.class);
-    assertEquals(expected.get(Calendar.YEAR), actual.get(Calendar.YEAR));
-    assertEquals(expected.get(Calendar.MONTH), actual.get(Calendar.MONTH));
-    assertEquals(expected.get(Calendar.DATE), actual.get(Calendar.DATE));
-    assertEquals(expected.get(Calendar.HOUR), actual.get(Calendar.HOUR));
-    assertEquals(expected.get(Calendar.MINUTE), actual.get(Calendar.MINUTE));
-    assertEquals(expected.get(Calendar.SECOND), actual.get(Calendar.SECOND));
-
-    assertEquals("2013-01-10T02:00:00Z", value.asPrimitive().toString());
+    final Calendar asCalendar = value.asPrimitive().toCastValue(Calendar.class);
+    assertEquals(expected.get(Calendar.YEAR), asCalendar.get(Calendar.YEAR));
+    assertEquals(expected.get(Calendar.MONTH), asCalendar.get(Calendar.MONTH));
+    assertEquals(expected.get(Calendar.DATE), asCalendar.get(Calendar.DATE));
+    assertEquals(expected.get(Calendar.HOUR), asCalendar.get(Calendar.HOUR));
+    assertEquals(expected.get(Calendar.MINUTE), asCalendar.get(Calendar.MINUTE));
+    assertEquals(expected.get(Calendar.SECOND), asCalendar.get(Calendar.SECOND));
+    assertEquals(expected.get(Calendar.MILLISECOND), asCalendar.get(Calendar.MILLISECOND));
+
+    final Timestamp asTimestamp = value.asPrimitive().toCastValue(Timestamp.class);
+    assertEquals(expected.get(Calendar.MILLISECOND), asTimestamp.getNanos());
+    
+    assertEquals("2013-01-10T02:00:00.022Z", value.asPrimitive().toString());
   }
 
   @Test
-  public void manageGuid() throws EdmPrimitiveTypeException {
+  public void guid() throws EdmPrimitiveTypeException {
     final UUID primitive = UUID.fromString("1126a28b-a4af-4bbd-bf0a-2b2c22635565");
     ODataValue value = getClient().getObjectFactory().newPrimitiveValueBuilder().setType(EdmPrimitiveTypeKind.Guid).
             setValue(primitive).build();
@@ -167,7 +171,7 @@ public class PrimitiveValueTest extends AbstractTest {
   }
 
   @Test
-  public void manageBinary() throws EdmPrimitiveTypeException {
+  public void binary() throws EdmPrimitiveTypeException {
     final byte[] primitive = UUID.randomUUID().toString().getBytes();
     ODataValue value = getClient().getObjectFactory().newPrimitiveValueBuilder().setType(EdmPrimitiveTypeKind.Binary).
             setValue(primitive).build();
@@ -183,7 +187,7 @@ public class PrimitiveValueTest extends AbstractTest {
   }
 
   @Test
-  public void managePoint() throws EdmPrimitiveTypeException {
+  public void point() throws EdmPrimitiveTypeException {
     final Point primitive = new Point(Geospatial.Dimension.GEOGRAPHY, null);
     primitive.setX(52.8606);
     primitive.setY(173.334);
@@ -200,7 +204,7 @@ public class PrimitiveValueTest extends AbstractTest {
   }
 
   @Test
-  public void manageLineString() throws EdmPrimitiveTypeException {
+  public void lineString() throws EdmPrimitiveTypeException {
     final List<Point> points = new ArrayList<Point>();
     Point point = new Point(Geospatial.Dimension.GEOGRAPHY, null);
     point.setX(40.5);
@@ -241,7 +245,7 @@ public class PrimitiveValueTest extends AbstractTest {
   }
 
   @Test
-  public void manageMultiPoint() throws EdmPrimitiveTypeException {
+  public void multiPoint() throws EdmPrimitiveTypeException {
     final List<Point> points = new ArrayList<Point>();
     Point point = new Point(Geospatial.Dimension.GEOMETRY, null);
     point.setX(0);
@@ -263,7 +267,7 @@ public class PrimitiveValueTest extends AbstractTest {
   }
 
   @Test
-  public void manageMultiLine() throws EdmPrimitiveTypeException {
+  public void multiLine() throws EdmPrimitiveTypeException {
     final List<LineString> lines = new ArrayList<LineString>();
 
     // line one ...
@@ -332,7 +336,7 @@ public class PrimitiveValueTest extends AbstractTest {
   }
 
   @Test
-  public void managePolygon() throws EdmPrimitiveTypeException {
+  public void polygon() throws EdmPrimitiveTypeException {
 
     final List<Point> interior = new ArrayList<Point>();
     final List<Point> exterior = new ArrayList<Point>();
@@ -382,7 +386,7 @@ public class PrimitiveValueTest extends AbstractTest {
   }
 
   @Test
-  public void manageMultiPolygon() throws EdmPrimitiveTypeException {
+  public void multiPolygon() throws EdmPrimitiveTypeException {
     final List<Polygon> polygons = new ArrayList<Polygon>();
 
     List<Point> interior = new ArrayList<Point>();
@@ -499,7 +503,7 @@ public class PrimitiveValueTest extends AbstractTest {
   }
 
   @Test
-  public void manageGeomCollection() throws EdmPrimitiveTypeException {
+  public void geomCollection() throws EdmPrimitiveTypeException {
     final List<Geospatial> collection = new ArrayList<Geospatial>();
 
     Point point = new Point(Geospatial.Dimension.GEOMETRY, null);
@@ -531,7 +535,7 @@ public class PrimitiveValueTest extends AbstractTest {
   }
 
   @Test
-  public void manageGeogCollection() throws EdmPrimitiveTypeException {
+  public void geogCollection() throws EdmPrimitiveTypeException {
     final List<Geospatial> collection = new ArrayList<Geospatial>();
 
     Point point = new Point(Geospatial.Dimension.GEOGRAPHY, null);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/7ee1e39f/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/PrimitiveValueTest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/PrimitiveValueTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/PrimitiveValueTest.java
index e61a9df..33dd920 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/PrimitiveValueTest.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/v4/PrimitiveValueTest.java
@@ -18,9 +18,9 @@
  */
 package org.apache.olingo.client.core.v4;
 
-import java.util.Calendar;
 import static org.junit.Assert.assertEquals;
 
+import java.util.Calendar;
 import org.apache.olingo.client.api.v4.ODataClient;
 import org.apache.olingo.commons.api.domain.ODataValue;
 import org.apache.olingo.client.core.AbstractTest;
@@ -36,7 +36,7 @@ public class PrimitiveValueTest extends AbstractTest {
   }
 
   @Test
-  public void manageTimeOfDay() throws EdmPrimitiveTypeException {
+  public void timeOfDay() throws EdmPrimitiveTypeException {
     final Calendar expected = Calendar.getInstance();
     expected.clear();
     expected.set(2013, 0, 10, 21, 45, 17);
@@ -49,12 +49,12 @@ public class PrimitiveValueTest extends AbstractTest {
     assertEquals(expected.get(Calendar.HOUR), actual.get(Calendar.HOUR));
     assertEquals(expected.get(Calendar.MINUTE), actual.get(Calendar.MINUTE));
     assertEquals(expected.get(Calendar.SECOND), actual.get(Calendar.SECOND));
-    
+
     assertEquals("21:45:17", value.asPrimitive().toString());
   }
 
   @Test
-  public void manageDate() throws EdmPrimitiveTypeException {
+  public void Date() throws EdmPrimitiveTypeException {
     final Calendar expected = Calendar.getInstance();
     expected.clear();
     expected.set(2013, 0, 10);


[5/5] git commit: [OLINGO-175] More V4 CRUD tests for containment, deep insert and bind operation

Posted by il...@apache.org.
[OLINGO-175] More V4 CRUD tests for containment, deep insert and bind operation


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

Branch: refs/heads/master
Commit: 3bb39defd4cdaef20354e9043520260e2d8ffffa
Parents: ef8c3a0
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Thu Apr 17 14:56:22 2014 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Thu Apr 17 14:56:22 2014 +0200

----------------------------------------------------------------------
 .../org/apache/olingo/fit/AbstractServices.java | 110 +++---
 .../apache/olingo/fit/metadata/Metadata.java    |   2 +-
 .../olingo/fit/utils/AbstractJSONUtilities.java |  27 +-
 .../olingo/fit/utils/AbstractUtilities.java     | 351 +++++++++----------
 .../olingo/fit/utils/AbstractXMLUtilities.java  |   9 +-
 .../org/apache/olingo/fit/utils/Accept.java     |   2 +-
 .../org/apache/olingo/fit/utils/Commons.java    |  92 ++---
 .../org/apache/olingo/fit/utils/Constants.java  |   3 +-
 .../org/apache/olingo/fit/utils/DataBinder.java |  12 +-
 .../org/apache/olingo/fit/utils/FSManager.java  |   2 +-
 .../resources/V40/People/1/entity.full.json     |  51 +++
 fit/src/main/resources/V40/People/1/entity.xml  |  72 ++++
 fit/src/main/resources/V40/People/5/entity.xml  |   8 +-
 .../streamed/CommonStreamedRequestFactory.java  |   9 +-
 .../MediaEntityCreateStreamManager.java         |   6 +-
 .../MediaEntityUpdateStreamManager.java         |   6 +-
 .../streamed/ODataMediaEntityCreateRequest.java |   7 +-
 .../streamed/ODataMediaEntityUpdateRequest.java |   7 +-
 .../ODataMediaEntityCreateResponse.java         |   8 +-
 .../ODataMediaEntityUpdateResponse.java         |   6 +-
 lib/client-core/pom.xml                         |   2 +-
 .../request/cud/AbstractCUDRequestFactory.java  |   4 +-
 .../AbstractODataStreamedEntityRequest.java     |   5 +-
 .../AbstractStreamedRequestFactory.java         |  17 +-
 .../ODataMediaEntityCreateRequestImpl.java      |  37 +-
 .../ODataMediaEntityUpdateRequestImpl.java      |  41 +--
 .../streamed/ODataStreamUpdateRequestImpl.java  |   2 +-
 .../data/JSONServiceDocumentDeserializer.java   |   3 +-
 .../client/core/op/AbstractODataBinder.java     |  42 ++-
 .../client/core/it/v3/AbstractTestITCase.java   |   3 +-
 .../client/core/it/v3/AsyncTestITCase.java      |   6 +-
 .../core/it/v3/EntityCreateTestITCase.java      |  36 +-
 .../client/core/it/v3/LinkTestITCase.java       |  13 +-
 .../core/it/v3/MediaEntityTestITCase.java       |  42 +--
 .../client/core/it/v4/BatchTestITCase.java      |  31 +-
 .../core/it/v4/EntityCreateTestITCase.java      |  82 +++++
 .../core/it/v4/EntityUpdateTestITCase.java      |  45 ++-
 .../api/domain/CommonODataObjectFactory.java    |  96 +----
 .../api/domain/v3/ODataObjectFactory.java       |   9 +
 .../core/data/AbstractJsonSerializer.java       |  14 +-
 .../commons/core/data/AtomSerializer.java       |   8 +
 .../core/data/JSONEntryDeserializer.java        |  23 +-
 .../commons/core/data/JSONEntrySerializer.java  |  11 +-
 .../commons/core/data/JSONFeedDeserializer.java |  23 +-
 .../core/domain/AbstractODataObjectFactory.java |  61 +---
 .../core/domain/v3/ODataObjectFactoryImpl.java  |   7 +
 46 files changed, 798 insertions(+), 655 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java b/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java
index e8c8524..9f992e9 100644
--- a/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java
+++ b/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java
@@ -27,6 +27,7 @@ import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStreamWriter;
+import java.net.URI;
 import java.util.AbstractMap;
 import java.util.Arrays;
 import java.util.Collections;
@@ -468,29 +469,29 @@ public abstract class AbstractServices {
       } else {
         final Container<JSONEntryImpl> jcont =
                 mapper.readValue(IOUtils.toInputStream(changes), new TypeReference<JSONEntryImpl>() {
-        });
+                });
 
         entryChanges = (new DataBinder(version)).getAtomEntry(jcont.getObject());
       }
 
-      final Container<AtomEntryImpl> entry = atomDeserializer.read(entityInfo.getValue(), AtomEntryImpl.class);
+      final Container<AtomEntryImpl> container = atomDeserializer.read(entityInfo.getValue(), AtomEntryImpl.class);
 
       for (Property property : entryChanges.getProperties()) {
-        entry.getObject().getProperty(property.getName()).setValue(property.getValue());
+        container.getObject().getProperty(property.getName()).setValue(property.getValue());
       }
 
       for (Link link : entryChanges.getNavigationLinks()) {
-        entry.getObject().getNavigationLinks().add(link);
+        container.getObject().getNavigationLinks().add(link);
       }
 
       final ByteArrayOutputStream content = new ByteArrayOutputStream();
-      final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.encoding);
-      atomSerializer.write(writer, entry);
+      final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.ENCODING);
+      atomSerializer.write(writer, container);
       writer.flush();
       writer.close();
 
-      final InputStream res =
-              xml.addOrReplaceEntity(entityId, entitySetName, new ByteArrayInputStream(content.toByteArray()));
+      final InputStream res = xml.addOrReplaceEntity(
+              entityId, entitySetName, new ByteArrayInputStream(content.toByteArray()), container.getObject());
 
       final Container<AtomEntryImpl> cres = atomDeserializer.read(res, AtomEntryImpl.class);
 
@@ -546,9 +547,11 @@ public abstract class AbstractServices {
 
       InputStream res;
       if (acceptType == Accept.ATOM) {
-        res = xml.addOrReplaceEntity(entityId, entitySetName, IOUtils.toInputStream(entity));
+        res = xml.addOrReplaceEntity(entityId, entitySetName, IOUtils.toInputStream(entity),
+                getUtilities(acceptType).readEntry(acceptType, IOUtils.toInputStream(entity)));
       } else {
-        res = json.addOrReplaceEntity(entityId, entitySetName, IOUtils.toInputStream(entity));
+        res = json.addOrReplaceEntity(entityId, entitySetName, IOUtils.toInputStream(entity),
+                getUtilities(acceptType).readEntry(acceptType, IOUtils.toInputStream(entity)));
       }
 
       final FITAtomDeserializer atomDeserializer = Commons.getAtomDeserializer(version);
@@ -631,14 +634,14 @@ public abstract class AbstractServices {
       final String entityKey;
 
       if (utils.isMediaContent(entitySetName)) {
-        entityKey = xml.getDefaultEntryKey(entitySetName, null);
-
-        utils.addMediaEntityValue(entitySetName, entityKey, IOUtils.toInputStream(entity));
-
         entry = new AtomEntryImpl();
         entry.setMediaContentType(ContentType.WILDCARD);
         entry.setType(entitySet.getType());
 
+        entityKey = xml.getDefaultEntryKey(entitySetName, entry);
+
+        utils.addMediaEntityValue(entitySetName, entityKey, IOUtils.toInputStream(entity));
+
         final String id = Commons.getMediaContent().get(entitySetName);
         if (StringUtils.isNotBlank(id)) {
           final AtomPropertyImpl prop = new AtomPropertyImpl();
@@ -659,42 +662,44 @@ public abstract class AbstractServices {
         container = new Container<AtomEntryImpl>(null, null, entry);
       } else {
         final Accept contentTypeValue = Accept.parse(contentType, version);
-        entityKey = getUtilities(contentTypeValue).getDefaultEntryKey(entitySetName, IOUtils.toInputStream(entity));
-
         if (Accept.ATOM == contentTypeValue) {
           container = atomDeserializer.read(IOUtils.toInputStream(entity), AtomEntryImpl.class);
           entry = container.getObject();
         } else {
           final Container<JSONEntryImpl> jcontainer =
                   mapper.readValue(IOUtils.toInputStream(entity), new TypeReference<JSONEntryImpl>() {
-          });
+                  });
 
-          entry = (new DataBinder(version)).
-                  getAtomEntry(jcontainer.getObject());
+          entry = new DataBinder(version).getAtomEntry(jcontainer.getObject());
 
           container = new Container<AtomEntryImpl>(
                   jcontainer.getContextURL(),
                   jcontainer.getMetadataETag(),
                   entry);
         }
+
+        entityKey = getUtilities(contentTypeValue).getDefaultEntryKey(entitySetName, entry);
       }
 
       normalizeAtomEntry(entry, entitySetName, entityKey);
 
       final ByteArrayOutputStream content = new ByteArrayOutputStream();
-      final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.encoding);
+      final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.ENCODING);
       atomSerializer.write(writer, container);
       writer.flush();
       writer.close();
 
       final InputStream serialization =
-              xml.addOrReplaceEntity(entitySetName, new ByteArrayInputStream(content.toByteArray()));
+              xml.addOrReplaceEntity(null, entitySetName, new ByteArrayInputStream(content.toByteArray()), entry);
 
-      final Container<AtomEntryImpl> cres = atomDeserializer.read(serialization, AtomEntryImpl.class);
+      Container<AtomEntryImpl> result = atomDeserializer.read(serialization, AtomEntryImpl.class);
+      result = new Container<AtomEntryImpl>(
+              URI.create(Constants.get(version, ConstantKey.DEFAULT_SERVICE_URL)
+                      + "$metadata#" + entitySetName + "/$entity"), null, result.getObject());
 
       final String path = Commons.getEntityBasePath(entitySetName, entityKey);
       FSManager.instance(version).putInMemory(
-              cres, path + File.separatorChar + Constants.get(version, ConstantKey.ENTITY));
+              result, path + File.separatorChar + Constants.get(version, ConstantKey.ENTITY));
 
       final String location = uriInfo.getRequestUri().toASCIIString() + "(" + entityKey + ")";
 
@@ -709,7 +714,7 @@ public abstract class AbstractServices {
       } else {
         response = utils.createResponse(
                 location,
-                utils.readEntity(entitySetName, entityKey, acceptType).getValue(),
+                utils.writeEntry(acceptType, result),
                 null,
                 acceptType,
                 Response.Status.CREATED);
@@ -721,6 +726,7 @@ public abstract class AbstractServices {
 
       return response;
     } catch (Exception e) {
+      LOG.error("While creating new entity", e);
       return utils.createFaultResponse(accept, e);
     }
   }
@@ -751,13 +757,13 @@ public abstract class AbstractServices {
               replaceAll("\"Salary\":[0-9]*,", "\"Salary\":0,").
               replaceAll("\"Title\":\".*\"", "\"Title\":\"[Sacked]\"").
               replaceAll("\\<d:Salary m:type=\"Edm.Int32\"\\>.*\\</d:Salary\\>",
-              "<d:Salary m:type=\"Edm.Int32\">0</d:Salary>").
+                      "<d:Salary m:type=\"Edm.Int32\">0</d:Salary>").
               replaceAll("\\<d:Title\\>.*\\</d:Title\\>", "<d:Title>[Sacked]</d:Title>");
 
       final FSManager fsManager = FSManager.instance(version);
       fsManager.putInMemory(IOUtils.toInputStream(newContent, "UTF-8"),
               fsManager.getAbsolutePath(Commons.getEntityBasePath("Person", entityId) + Constants.get(version,
-              ConstantKey.ENTITY), utils.getKey()));
+                              ConstantKey.ENTITY), utils.getKey()));
 
       return utils.getValue().createResponse(null, null, null, utils.getKey(), Response.Status.NO_CONTENT);
     } catch (Exception e) {
@@ -809,9 +815,9 @@ public abstract class AbstractServices {
         final Long newSalary = Long.valueOf(salaryMatcher.group(1)) + n;
         newContent = newContent.
                 replaceAll("\"Salary\":" + salaryMatcher.group(1) + ",",
-                "\"Salary\":" + newSalary + ",").
+                        "\"Salary\":" + newSalary + ",").
                 replaceAll("\\<d:Salary m:type=\"Edm.Int32\"\\>" + salaryMatcher.group(1) + "</d:Salary\\>",
-                "<d:Salary m:type=\"Edm.Int32\">" + newSalary + "</d:Salary>");
+                        "<d:Salary m:type=\"Edm.Int32\">" + newSalary + "</d:Salary>");
       }
 
       FSManager.instance(version).putInMemory(IOUtils.toInputStream(newContent, "UTF-8"),
@@ -934,7 +940,7 @@ public abstract class AbstractServices {
         setInlineCount(container.getObject(), count);
 
         final ByteArrayOutputStream content = new ByteArrayOutputStream();
-        final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.encoding);
+        final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.ENCODING);
 
         if (acceptType == Accept.ATOM) {
           atomSerializer.write(writer, container);
@@ -945,7 +951,7 @@ public abstract class AbstractServices {
 
           mapper.writeValue(
                   writer, new JsonFeedContainer<JSONFeedImpl>(container.getContextURL(), container.getMetadataETag(),
-                  new DataBinder(version).getJsonFeed(container.getObject())));
+                          new DataBinder(version).getJsonFeed(container.getObject())));
         }
 
         return xml.createResponse(
@@ -1055,7 +1061,12 @@ public abstract class AbstractServices {
       final FITAtomDeserializer atomDeserializer = Commons.getAtomDeserializer(version);
       final AtomSerializer atomSerializer = Commons.getAtomSerializer(version);
 
-      final Container<Entry> container = atomDeserializer.<Entry, AtomEntryImpl>read(entity, AtomEntryImpl.class);
+      Container<AtomEntryImpl> container = atomDeserializer.read(entity, AtomEntryImpl.class);
+      if (container.getContextURL() == null) {
+        container = new Container<AtomEntryImpl>(URI.create(Constants.get(version, ConstantKey.DEFAULT_SERVICE_URL)
+                + "$metadata#" + entitySetName + "/$entity"),
+                container.getMetadataETag(), container.getObject());
+      }
       final Entry entry = container.getObject();
 
       if (keyAsSegment) {
@@ -1103,13 +1114,13 @@ public abstract class AbstractServices {
             rep.setRel(link.getRel());
             rep.setTitle(link.getTitle());
             rep.setType(link.getType());
-            if (link.getType().equals(Constants.get(ConstantKey.ATOM_LINK_ENTRY))) {
+            if (link.getType().equals(Constants.get(version, ConstantKey.ATOM_LINK_ENTRY))) {
               // inline entry
               final Entry inline = atomDeserializer.<Entry, AtomEntryImpl>read(
                       xml.expandEntity(entitySetName, entityId, link.getTitle()),
                       AtomEntryImpl.class).getObject();
               rep.setInlineEntry(inline);
-            } else if (link.getType().equals(Constants.get(ConstantKey.ATOM_LINK_FEED))) {
+            } else if (link.getType().equals(Constants.get(version, ConstantKey.ATOM_LINK_FEED))) {
               // inline feed
               final Feed inline = atomDeserializer.<Feed, AtomFeedImpl>read(
                       xml.expandEntity(entitySetName, entityId, link.getTitle()),
@@ -1126,23 +1137,9 @@ public abstract class AbstractServices {
         }
       }
 
-      final ByteArrayOutputStream content = new ByteArrayOutputStream();
-      final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.encoding);
-
-      if (utils.getKey() == Accept.ATOM) {
-        atomSerializer.write(writer, container);
-        writer.flush();
-        writer.close();
-      } else {
-        final ObjectMapper mapper = Commons.getJsonMapper(version);
-        mapper.writeValue(
-                writer, new JsonEntryContainer<JSONEntryImpl>(container.getContextURL(), container.getMetadataETag(),
-                (new DataBinder(version)).getJsonEntry((AtomEntryImpl) container.getObject())));
-      }
-
       return xml.createResponse(
               location,
-              new ByteArrayInputStream(content.toByteArray()),
+              xml.writeEntry(utils.getKey(), container),
               Commons.getETag(entityInfo.getKey(), version),
               utils.getKey());
 
@@ -1560,7 +1557,7 @@ public abstract class AbstractServices {
           final FITAtomDeserializer atomDeserializer = Commons.getAtomDeserializer(version);
 
           final ByteArrayOutputStream content = new ByteArrayOutputStream();
-          final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.encoding);
+          final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.ENCODING);
 
           if (linkInfo.isFeed()) {
             final Container<Feed> container = atomDeserializer.<Feed, AtomFeedImpl>read(stream, AtomFeedImpl.class);
@@ -1575,8 +1572,8 @@ public abstract class AbstractServices {
               mapper.writeValue(
                       writer,
                       new JsonFeedContainer<JSONFeedImpl>(container.getContextURL(),
-                      container.getMetadataETag(),
-                      (new DataBinder(version)).getJsonFeed((AtomFeedImpl) container.getObject())));
+                              container.getMetadataETag(),
+                              (new DataBinder(version)).getJsonFeed((AtomFeedImpl) container.getObject())));
             }
           } else {
             final Container<Entry> container = atomDeserializer.<Entry, AtomEntryImpl>read(stream, AtomEntryImpl.class);
@@ -1590,8 +1587,8 @@ public abstract class AbstractServices {
               mapper.writeValue(
                       writer,
                       new JsonEntryContainer<JSONEntryImpl>(container.getContextURL(),
-                      container.getMetadataETag(),
-                      (new DataBinder(version)).getJsonEntry((AtomEntryImpl) container.getObject())));
+                              container.getMetadataETag(),
+                              (new DataBinder(version)).getJsonEntry((AtomEntryImpl) container.getObject())));
             }
           }
 
@@ -1649,7 +1646,7 @@ public abstract class AbstractServices {
 
       stream = utils.getPropertyValue(stream, pathElements);
     } else {
-      String edmType = xml.getEdmTypeFromAtom(entitySetName, entityId, pathElements);
+      final String edmType = xml.getEdmTypeFromAtom(entitySetName, entityId, pathElements);
       stream = utils.getProperty(entitySetName, entityId, pathElements, edmType);
     }
 
@@ -1737,8 +1734,9 @@ public abstract class AbstractServices {
         final LinkImpl link = new LinkImpl();
         link.setTitle(property.getKey());
         link.setType(property.getValue().isFeed()
-                ? Constants.get(ConstantKey.ATOM_LINK_FEED) : Constants.get(ConstantKey.ATOM_LINK_ENTRY));
-        link.setRel(Constants.get(ConstantKey.ATOM_LINK_REL) + property.getKey());
+                ? Constants.get(version, ConstantKey.ATOM_LINK_FEED)
+                : Constants.get(version, ConstantKey.ATOM_LINK_ENTRY));
+        link.setRel(Constants.get(version, ConstantKey.ATOM_LINK_REL) + property.getKey());
         link.setHref(entitySetName + "(" + entityKey + ")/" + property.getKey());
         entry.getNavigationLinks().add(link);
       }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/fit/src/main/java/org/apache/olingo/fit/metadata/Metadata.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/metadata/Metadata.java b/fit/src/main/java/org/apache/olingo/fit/metadata/Metadata.java
index 1b764dc..ebd599b 100644
--- a/fit/src/main/java/org/apache/olingo/fit/metadata/Metadata.java
+++ b/fit/src/main/java/org/apache/olingo/fit/metadata/Metadata.java
@@ -50,7 +50,7 @@ public class Metadata extends AbstractMetadataElement {
     try {
       final XMLInputFactory ifactory = XMLInputFactory.newInstance();
       ifactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false);
-      final XMLEventReader reader = ifactory.createXMLEventReader(is, "utf-8");
+      final XMLEventReader reader = ifactory.createXMLEventReader(is, "UTF-8");
 
       try {
         while (reader.hasNext()) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/fit/src/main/java/org/apache/olingo/fit/utils/AbstractJSONUtilities.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/AbstractJSONUtilities.java b/fit/src/main/java/org/apache/olingo/fit/utils/AbstractJSONUtilities.java
index 48ec6f8..3a22c64 100644
--- a/fit/src/main/java/org/apache/olingo/fit/utils/AbstractJSONUtilities.java
+++ b/fit/src/main/java/org/apache/olingo/fit/utils/AbstractJSONUtilities.java
@@ -66,7 +66,7 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
               new TextNode(Commons.getLinksURI(version, entitySetName, entitykey, link)));
     }
 
-    return IOUtils.toInputStream(srcNode.toString(), "UTf-8");
+    return IOUtils.toInputStream(srcNode.toString(), "UTF-8");
   }
 
   @Override
@@ -97,13 +97,10 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
     return links;
   }
 
-  /**
-   * {@inheritDoc }
-   */
   @Override
-  protected NavigationLinks retrieveNavigationInfo(
-          final String entitySetName, final InputStream is)
+  protected NavigationLinks retrieveNavigationInfo(final String entitySetName, final InputStream is)
           throws Exception {
+
     final ObjectMapper mapper = new ObjectMapper();
     final ObjectNode srcNode = (ObjectNode) mapper.readTree(is);
     IOUtils.closeQuietly(is);
@@ -132,7 +129,7 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
 
         links.addLinks(title, hrefs);
       } else if (navigationProperties.containsKey(field.getKey())) {
-        links.addInlines(field.getKey(), IOUtils.toInputStream(field.getValue().toString(), "UTf-8"));
+        links.addInlines(field.getKey(), IOUtils.toInputStream(field.getValue().toString(), "UTF-8"));
       }
     }
 
@@ -176,9 +173,9 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
 
     srcNode.set(
             Constants.get(version, ConstantKey.JSON_EDITLINK_NAME), new TextNode(
-            Constants.get(version, ConstantKey.DEFAULT_SERVICE_URL) + entitySetName + "(" + entityKey + ")"));
+                    Constants.get(version, ConstantKey.DEFAULT_SERVICE_URL) + entitySetName + "(" + entityKey + ")"));
 
-    return IOUtils.toInputStream(srcNode.toString(), "UTf-8");
+    return IOUtils.toInputStream(srcNode.toString(), "UTF-8");
   }
 
   @Override
@@ -186,7 +183,7 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
           throws Exception {
     final ObjectMapper mapper = new ObjectMapper();
     final JsonNode srcNode = mapper.readTree(src);
-    JsonNode node = getProperty(srcNode, path);
+    final JsonNode node = getProperty(srcNode, path);
     return IOUtils.toInputStream(node.asText());
   }
 
@@ -310,7 +307,7 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
 
     srcNode.retain(retain);
 
-    return IOUtils.toInputStream(srcNode.toString(), "UTf-8");
+    return IOUtils.toInputStream(srcNode.toString(), "UTF-8");
   }
 
   @Override
@@ -382,7 +379,7 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
       toBeChangedNode.set(linkName + Constants.get(version, ConstantKey.JSON_NEXTLINK_SUFFIX), next);
     }
 
-    return IOUtils.toInputStream(toBeChangedNode.toString(), "UTf-8");
+    return IOUtils.toInputStream(toBeChangedNode.toString(), "UTF-8");
   }
 
   @Override
@@ -395,7 +392,7 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
     final Iterator<Map.Entry<String, JsonNode>> fields = srcObject.fields();
     while (fields.hasNext()) {
       final Map.Entry<String, JsonNode> field = fields.next();
-      res.put(field.getKey(), IOUtils.toInputStream(field.getValue().toString(), "UTf-8"));
+      res.put(field.getKey(), IOUtils.toInputStream(field.getValue().toString(), "UTF-8"));
     }
 
     return res;
@@ -489,7 +486,7 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
 
     ((ObjectNode) node).set(path.get(path.size() - 1), replacementNode);
 
-    return IOUtils.toInputStream(srcNode.toString(), "UTf-8");
+    return IOUtils.toInputStream(srcNode.toString(), "UTF-8");
   }
 
   @Override
@@ -508,6 +505,6 @@ public abstract class AbstractJSONUtilities extends AbstractUtilities {
 
     ((ObjectNode) node).set(path.get(path.size() - 1), null);
 
-    return IOUtils.toInputStream(srcNode.toString(), "UTf-8");
+    return IOUtils.toInputStream(srcNode.toString(), "UTF-8");
   }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java b/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java
index 1df1282..22a7f5b 100644
--- a/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java
+++ b/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java
@@ -18,32 +18,41 @@
  */
 package org.apache.olingo.fit.utils;
 
-import static org.apache.olingo.fit.utils.Commons.sequence;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.OutputStreamWriter;
+import java.io.StringWriter;
 import java.util.AbstractMap.SimpleEntry;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.ConcurrentModificationException;
 import java.util.HashSet;
-import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.regex.Pattern;
 import javax.ws.rs.NotFoundException;
 import javax.ws.rs.core.Response;
+import javax.xml.stream.XMLStreamException;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.vfs2.FileObject;
+import org.apache.olingo.commons.api.data.Container;
+import org.apache.olingo.commons.api.data.Entry;
+import org.apache.olingo.commons.api.data.Link;
 import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
+import org.apache.olingo.commons.core.data.AtomEntryImpl;
+import org.apache.olingo.commons.core.data.JSONEntryImpl;
 import org.apache.olingo.fit.UnsupportedMediaTypeException;
 import org.apache.olingo.fit.metadata.Metadata;
 import org.apache.olingo.fit.metadata.NavigationProperty;
+import org.apache.olingo.fit.serializer.JsonEntryContainer;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -58,7 +67,7 @@ public abstract class AbstractUtilities {
 
   protected final FSManager fsManager;
 
-  protected final static Pattern entityUriPattern = Pattern.compile(".*\\/.*\\(.*\\)");
+  protected static final Pattern ENTITY_URI_PATTERN = Pattern.compile(".*\\/.*\\(.*\\)");
 
   /**
    * Batch/Changeset content type.
@@ -81,7 +90,7 @@ public abstract class AbstractUtilities {
   }
 
   public boolean isMediaContent(final String entityName) {
-    return Commons.mediaContent.containsKey(entityName);
+    return Commons.MEDIA_CONTENT.containsKey(entityName);
   }
 
   /**
@@ -171,16 +180,18 @@ public abstract class AbstractUtilities {
     return fo.getContent().getInputStream();
   }
 
-  public InputStream addOrReplaceEntity(
-          final String entitySetName, final InputStream is) throws Exception {
+  private InputStream toInputStream(final AtomEntryImpl entry) throws XMLStreamException {
+    final StringWriter writer = new StringWriter();
+    Commons.getAtomSerializer(version).write(writer, entry);
 
-    return addOrReplaceEntity(null, entitySetName, is);
+    return IOUtils.toInputStream(writer.toString(), Constants.ENCODING);
   }
 
   public InputStream addOrReplaceEntity(
           final String key,
           final String entitySetName,
-          final InputStream is) throws Exception {
+          final InputStream is,
+          final AtomEntryImpl entry) throws Exception {
 
     final ByteArrayOutputStream bos = new ByteArrayOutputStream();
     IOUtils.copy(is, bos);
@@ -190,33 +201,32 @@ public abstract class AbstractUtilities {
             Commons.getMetadata(version).getNavigationProperties(entitySetName);
 
     // -----------------------------------------
-    // 0. Retrieve navigation links to be mantained
+    // 0. Retrieve navigation links to be kept
     // -----------------------------------------
-    Set<String> linksToBeMantained;
+    Set<String> linksToBeKept;
     try {
-      linksToBeMantained = new HashSet<String>(navigationProperties.keySet());
+      linksToBeKept = new HashSet<String>(navigationProperties.keySet());
     } catch (Exception e) {
-      linksToBeMantained = Collections.<String>emptySet();
+      linksToBeKept = Collections.<String>emptySet();
     }
 
-    for (String availableLink : new HashSet<String>(linksToBeMantained)) {
+    for (String availableLink : new HashSet<String>(linksToBeKept)) {
       try {
         fsManager.resolve(Commons.getLinksPath(version, entitySetName, key, availableLink, Accept.JSON_FULLMETA));
       } catch (Exception e) {
-        linksToBeMantained.remove(availableLink);
+        linksToBeKept.remove(availableLink);
       }
     }
 
     for (String linkName : retrieveAllLinkNames(new ByteArrayInputStream(bos.toByteArray()))) {
-      linksToBeMantained.remove(linkName);
+      linksToBeKept.remove(linkName);
     }
     // -----------------------------------------
 
     // -----------------------------------------
     // 1. Get default entry key and path (N.B. operation will consume/close the stream; use a copy instead)
     // -----------------------------------------
-    final String entityKey = key == null ? getDefaultEntryKey(
-            entitySetName, new ByteArrayInputStream(bos.toByteArray())) : key;
+    final String entityKey = key == null ? getDefaultEntryKey(entitySetName, entry) : key;
 
     final String path = Commons.getEntityBasePath(entitySetName, entityKey);
     // -----------------------------------------
@@ -224,8 +234,7 @@ public abstract class AbstractUtilities {
     // -----------------------------------------
     // 2. Retrieve navigation info
     // -----------------------------------------
-    final NavigationLinks links =
-            retrieveNavigationInfo(entitySetName, new ByteArrayInputStream(bos.toByteArray()));
+    final NavigationLinks links = retrieveNavigationInfo(entitySetName, new ByteArrayInputStream(bos.toByteArray()));
     // -----------------------------------------
 
     // -----------------------------------------
@@ -239,10 +248,10 @@ public abstract class AbstractUtilities {
     IOUtils.copy(createdEntity, bos);
 
     // -----------------------------------------
-    // 4. Add navigation links to be mantained
+    // 4. Add navigation links to be kept
     // -----------------------------------------
     final InputStream normalizedEntity =
-            addLinks(entitySetName, entityKey, new ByteArrayInputStream(bos.toByteArray()), linksToBeMantained);
+            addLinks(entitySetName, entityKey, new ByteArrayInputStream(bos.toByteArray()), linksToBeKept);
     // -----------------------------------------
 
     IOUtils.closeQuietly(bos);
@@ -262,28 +271,42 @@ public abstract class AbstractUtilities {
       putLinksInMemory(path, entitySetName, entityKey, link.getKey(), link.getValue());
     }
 
-    for (Map.Entry<String, List<InputStream>> inlineEntry : links.getInlines()) {
-      final String inlineEntitySetName = navigationProperties.get(inlineEntry.getKey()).getTarget();
-
-      final List<String> hrefs = new ArrayList<String>();
-
-      for (InputStream stream : inlineEntry.getValue()) {
-        final ByteArrayOutputStream inlineBos = new ByteArrayOutputStream();
-        IOUtils.copy(stream, inlineBos);
-        IOUtils.closeQuietly(stream);
-
-        final String inlineEntryKey = getDefaultEntryKey(
-                inlineEntitySetName, new ByteArrayInputStream(inlineBos.toByteArray()));
-
-        addOrReplaceEntity(
-                inlineEntryKey,
-                inlineEntitySetName,
-                new ByteArrayInputStream(inlineBos.toByteArray()));
+    final List<String> hrefs = new ArrayList<String>();
+
+    for (final Link link : entry.getNavigationLinks()) {
+      final NavigationProperty navProp = navigationProperties == null? null: navigationProperties.get(link.getTitle());
+      if (navProp != null) {
+        final String inlineEntitySetName = navProp.getTarget();
+        if (link.getInlineEntry() != null) {
+          final String inlineEntryKey = getDefaultEntryKey(
+                  inlineEntitySetName, (AtomEntryImpl) link.getInlineEntry());
+
+          addOrReplaceEntity(
+                  inlineEntryKey,
+                  inlineEntitySetName,
+                  toInputStream((AtomEntryImpl) link.getInlineEntry()),
+                  (AtomEntryImpl) link.getInlineEntry());
+
+          hrefs.add(inlineEntitySetName + "(" + inlineEntryKey + ")");
+        } else if (link.getInlineFeed() != null) {
+          for (Entry subentry : link.getInlineFeed().getEntries()) {
+            final String inlineEntryKey = getDefaultEntryKey(
+                    inlineEntitySetName, (AtomEntryImpl) subentry);
+
+            addOrReplaceEntity(
+                    inlineEntryKey,
+                    inlineEntitySetName,
+                    toInputStream((AtomEntryImpl) subentry),
+                    (AtomEntryImpl) subentry);
+
+            hrefs.add(inlineEntitySetName + "(" + inlineEntryKey + ")");
+          }
+        }
 
-        hrefs.add(inlineEntitySetName + "(" + inlineEntryKey + ")");
+        if (!hrefs.isEmpty()) {
+          putLinksInMemory(path, entitySetName, entityKey, link.getTitle(), hrefs);
+        }
       }
-
-      putLinksInMemory(path, entitySetName, entityKey, inlineEntry.getKey(), hrefs);
     }
     // -----------------------------------------
 
@@ -338,7 +361,7 @@ public abstract class AbstractUtilities {
             + "<link rel=\"edit-media\" title=\"Car\" href=\"" + entityURI + "/$value\" />"
             + "<content type=\"*/*\" src=\"" + entityURI + "/$value\" />"
             + "<m:properties>"
-            + "<d:" + Commons.mediaContent.get(entitySetName) + " m:type=\"Edm.Int32\">" + entityKey + "</d:VIN>"
+            + "<d:" + Commons.MEDIA_CONTENT.get(entitySetName) + " m:type=\"Edm.Int32\">" + entityKey + "</d:VIN>"
             + "<d:Description m:null=\"true\" />"
             + "</m:properties>"
             + "</entry>";
@@ -360,12 +383,12 @@ public abstract class AbstractUtilities {
             + "\"odata.mediaEditLink\": \"" + entityURI + "/$value\","
             + "\"odata.mediaReadLink\": \"" + entityURI + "/$value\","
             + "\"odata.mediaContentType\": \"*/*\","
-            + "\"" + Commons.mediaContent.get(entitySetName) + "\": " + entityKey + ","
+            + "\"" + Commons.MEDIA_CONTENT.get(entitySetName) + "\": " + entityKey + ","
             + "\"Description\": null" + "}";
 
     fsManager.putInMemory(
             IOUtils.toInputStream(entity), fsManager.getAbsolutePath(path + Constants.get(version, ConstantKey.ENTITY),
-            Accept.JSON_FULLMETA));
+                    Accept.JSON_FULLMETA));
     // -----------------------------------------
 
     return readEntity(entitySetName, entityKey, getDefaultFormat()).getValue();
@@ -401,11 +424,11 @@ public abstract class AbstractUtilities {
           throws IOException {
 
     fsManager.putInMemory(
-            Commons.getLinksAsJSON(entitySetName, new SimpleEntry<String, Collection<String>>(linkName, uris)),
+            Commons.getLinksAsJSON(version, entitySetName, new SimpleEntry<String, Collection<String>>(linkName, uris)),
             Commons.getLinksPath(version, basePath, linkName, Accept.JSON_FULLMETA));
 
     fsManager.putInMemory(
-            Commons.getLinksAsATOM(new SimpleEntry<String, Collection<String>>(linkName, uris)),
+            Commons.getLinksAsATOM(version, new SimpleEntry<String, Collection<String>>(linkName, uris)),
             Commons.getLinksPath(version, basePath, linkName, Accept.XML));
   }
 
@@ -533,154 +556,122 @@ public abstract class AbstractUtilities {
     return builder.build();
   }
 
-  public String getDefaultEntryKey(
-          final String entitySetName, final InputStream entity) throws IOException {
-    try {
-      String res;
+  public AtomEntryImpl readEntry(final Accept contentTypeValue, final InputStream entity)
+          throws XMLStreamException, IOException {
 
-      if ("Message".equals(entitySetName)) {
-        try {
-          final List<String> propertyNames = new ArrayList<String>();
-          propertyNames.add("MessageId");
-          propertyNames.add("FromUsername");
+    final AtomEntryImpl entry;
+
+    if (Accept.ATOM == contentTypeValue) {
+      final Container<AtomEntryImpl> container = Commons.getAtomDeserializer(version).
+              read(entity, AtomEntryImpl.class);
+      entry = container.getObject();
+    } else {
+      final Container<JSONEntryImpl> jcontainer =
+              Commons.getJsonMapper(version).readValue(entity, new TypeReference<JSONEntryImpl>() {
+              });
+      entry = new DataBinder(version).getAtomEntry(jcontainer.getObject());
+    }
 
-          final StringBuilder keyBuilder = new StringBuilder();
-          for (Map.Entry<String, InputStream> value : getPropertyValues(entity, propertyNames).entrySet()) {
+    return entry;
+  }
 
-            if (keyBuilder.length() > 0) {
-              keyBuilder.append(",");
-            }
+  public InputStream writeEntry(final Accept accept, final Container<AtomEntryImpl> container)
+          throws XMLStreamException, IOException {
 
-            keyBuilder.append(value.getKey()).append("=").append(IOUtils.toString(value.getValue()));
-          }
-          res = keyBuilder.toString();
-        } catch (Exception e) {
-          final int messageId;
-          if (sequence.containsKey(entitySetName)) {
-            messageId = sequence.get(entitySetName) + 1;
+    final ByteArrayOutputStream content = new ByteArrayOutputStream();
+    final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.ENCODING);
+
+    if (accept == Accept.ATOM) {
+      Commons.getAtomSerializer(version).write(writer, container);
+      writer.flush();
+      writer.close();
+    } else {
+      final ObjectMapper mapper = Commons.getJsonMapper(version);
+      mapper.writeValue(
+              writer, new JsonEntryContainer<JSONEntryImpl>(container.getContextURL(), container.getMetadataETag(),
+                      (new DataBinder(version)).getJsonEntry((AtomEntryImpl) container.getObject())));
+    }
+
+    return new ByteArrayInputStream(content.toByteArray());
+  }
+
+  private String getDefaultEntryKey(final String entitySetName, final AtomEntryImpl entry, final String propertyName)
+          throws Exception {
+
+    String res;
+    if (entry.getProperty(propertyName) == null) {
+      if (Commons.SEQUENCE.containsKey(entitySetName)) {
+        res = String.valueOf(Commons.SEQUENCE.get(entitySetName) + 1);
+      } else {
+        throw new Exception(String.format("Unable to retrieve entity key value for %s", entitySetName));
+      }
+    } else {
+      res = entry.getProperty(propertyName).getValue().asPrimitive().get();
+    }
+    Commons.SEQUENCE.put(entitySetName, Integer.valueOf(res));
+
+    return res;
+  }
+
+  public String getDefaultEntryKey(final String entitySetName, final AtomEntryImpl entry) throws IOException {
+    try {
+      String res;
+
+      if ("Message".equals(entitySetName)) {
+        int messageId;
+        if (entry.getProperty("MessageId") == null || entry.getProperty("FromUsername") == null) {
+          if (Commons.SEQUENCE.containsKey(entitySetName)) {
+            messageId = Commons.SEQUENCE.get(entitySetName) + 1;
             res = "MessageId=" + String.valueOf(messageId) + ",FromUsername=1";
           } else {
             throw new Exception(String.format("Unable to retrieve entity key value for %s", entitySetName));
           }
-          sequence.put(entitySetName, Integer.valueOf(messageId));
+        } else {
+          messageId = Integer.valueOf(entry.getProperty("MessageId").getValue().asPrimitive().get());
+          res = "MessageId=" + entry.getProperty("MessageId").getValue().asPrimitive().get()
+                  + ",FromUsername=" + entry.getProperty("FromUsername").getValue().asPrimitive().get();
         }
+        Commons.SEQUENCE.put(entitySetName, messageId);
       } else if ("Order".equals(entitySetName)) {
-        try {
-          final Map<String, InputStream> value =
-                  getPropertyValues(entity, Collections.<String>singletonList("OrderId"));
-          res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next());
-        } catch (Exception e) {
-          if (sequence.containsKey(entitySetName)) {
-            res = String.valueOf(sequence.get(entitySetName) + 1);
-          } else {
-            throw new Exception(String.format("Unable to retrieve entity key value for %s", entitySetName));
-          }
-        }
-        sequence.put(entitySetName, Integer.valueOf(res));
+        res = getDefaultEntryKey(entitySetName, entry, "OrderId");
       } else if ("Orders".equals(entitySetName)) {
-        try {
-          final Map<String, InputStream> value =
-                  getPropertyValues(entity, Collections.<String>singletonList("OrderID"));
-          res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next());
-        } catch (Exception e) {
-          if (sequence.containsKey(entitySetName)) {
-            res = String.valueOf(sequence.get(entitySetName) + 1);
-          } else {
-            throw new Exception(String.format("Unable to retrieve entity key value for %s", entitySetName));
-          }
-        }
-        sequence.put(entitySetName, Integer.valueOf(res));
+        res = getDefaultEntryKey(entitySetName, entry, "OrderID");
       } else if ("Customer".equals(entitySetName)) {
-        try {
-          final Map<String, InputStream> value =
-                  getPropertyValues(entity, Collections.<String>singletonList("CustomerId"));
-          res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next());
-        } catch (Exception e) {
-          if (sequence.containsKey(entitySetName)) {
-            res = String.valueOf(sequence.get(entitySetName) + 1);
-          } else {
-            throw new Exception(String.format("Unable to retrieve entity key value for %s", entitySetName));
-          }
-        }
-        sequence.put(entitySetName, Integer.valueOf(res));
+        res = getDefaultEntryKey(entitySetName, entry, "CustomerId");
       } else if ("Person".equals(entitySetName)) {
-        try {
-          final Map<String, InputStream> value =
-                  getPropertyValues(entity, Collections.<String>singletonList("PersonId"));
-          res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next());
-        } catch (Exception e) {
-          if (sequence.containsKey(entitySetName)) {
-            res = String.valueOf(sequence.get(entitySetName) + 1);
-          } else {
-            throw new Exception(String.format("Unable to retrieve entity key value for %s", entitySetName));
-          }
-        }
-        sequence.put(entitySetName, Integer.valueOf(res));
+        res = getDefaultEntryKey(entitySetName, entry, "PersonId");
       } else if ("ComputerDetail".equals(entitySetName)) {
-        try {
-          final Map<String, InputStream> value =
-                  getPropertyValues(entity, Collections.<String>singletonList("ComputerDetailId"));
-          res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next());
-        } catch (Exception e) {
-          if (sequence.containsKey(entitySetName)) {
-            res = String.valueOf(sequence.get(entitySetName) + 1);
-          } else {
-            throw new Exception(String.format("Unable to retrieve entity key value for %s", entitySetName));
-          }
-        }
-        sequence.put(entitySetName, Integer.valueOf(res));
+        res = getDefaultEntryKey(entitySetName, entry, "ComputerDetailId");
       } else if ("AllGeoTypesSet".equals(entitySetName)) {
-        try {
-          final Map<String, InputStream> value =
-                  getPropertyValues(entity, Collections.<String>singletonList("Id"));
-          res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next());
-        } catch (Exception e) {
-          if (sequence.containsKey(entitySetName)) {
-            res = String.valueOf(sequence.get(entitySetName) + 1);
-          } else {
-            throw new Exception(String.format("Unable to retrieve entity key value for %s", entitySetName));
-          }
-        }
-        sequence.put(entitySetName, Integer.valueOf(res));
+        res = getDefaultEntryKey(entitySetName, entry, "Id");
       } else if ("CustomerInfo".equals(entitySetName)) {
-        try {
-          final Map<String, InputStream> value =
-                  getPropertyValues(entity, Collections.<String>singletonList("CustomerInfoId"));
-          res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next());
-        } catch (Exception e) {
-          if (sequence.containsKey(entitySetName)) {
-            res = String.valueOf(sequence.get(entitySetName) + 1);
-          } else {
-            throw new Exception(String.format("Unable to retrieve entity key value for %s", entitySetName));
-          }
-        }
-        sequence.put(entitySetName, Integer.valueOf(res));
+        res = getDefaultEntryKey(entitySetName, entry, "CustomerInfoId");
       } else if ("Car".equals(entitySetName)) {
-        try {
-          final Map<String, InputStream> value =
-                  getPropertyValues(entity, Collections.<String>singletonList("VIN"));
-          res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next());
-        } catch (Exception e) {
-          if (sequence.containsKey(entitySetName)) {
-            res = String.valueOf(sequence.get(entitySetName) + 1);
-          } else {
-            throw new Exception(String.format("Unable to retrieve entity key value for %s", entitySetName));
-          }
-        }
-        sequence.put(entitySetName, Integer.valueOf(res));
+        res = getDefaultEntryKey(entitySetName, entry, "VIN");
       } else if ("RowIndex".equals(entitySetName)) {
-        try {
-          final Map<String, InputStream> value =
-                  getPropertyValues(entity, Collections.<String>singletonList("Id"));
-          res = value.isEmpty() ? null : IOUtils.toString(value.values().iterator().next());
-        } catch (Exception e) {
-          if (sequence.containsKey(entitySetName)) {
-            res = String.valueOf(sequence.get(entitySetName) + 1);
+        res = getDefaultEntryKey(entitySetName, entry, "Id");
+      } else if ("Products".equals(entitySetName)) {
+        res = getDefaultEntryKey(entitySetName, entry, "ProductID");
+      } else if ("ProductDetails".equals(entitySetName)) {
+        int productId;
+        int productDetailId;
+        if (entry.getProperty("ProductID") == null || entry.getProperty("ProductDetailID") == null) {
+          if (Commons.SEQUENCE.containsKey(entitySetName) && Commons.SEQUENCE.containsKey("Products")) {
+            productId = Commons.SEQUENCE.get("Products") + 1;
+            productDetailId = Commons.SEQUENCE.get(entitySetName) + 1;
+            res = "ProductID=" + String.valueOf(productId) + ",ProductDetailID=" + String.valueOf(productDetailId);
           } else {
             throw new Exception(String.format("Unable to retrieve entity key value for %s", entitySetName));
           }
+          Commons.SEQUENCE.put(entitySetName, productDetailId);
+        } else {
+          productId = Integer.valueOf(entry.getProperty("ProductID").getValue().asPrimitive().get());
+          productDetailId = Integer.valueOf(entry.getProperty("ProductDetailID").getValue().asPrimitive().get());
+          res = "ProductID=" + entry.getProperty("ProductID").getValue().asPrimitive().get()
+                  + ",ProductDetailID=" + entry.getProperty("ProductDetailID").getValue().asPrimitive().get();
         }
-        sequence.put(entitySetName, Integer.valueOf(res));
+        Commons.SEQUENCE.put(entitySetName, productDetailId);
+        Commons.SEQUENCE.put("Products", productId);
       } else {
         throw new Exception(String.format("EntitySet '%s' not found", entitySetName));
       }
@@ -688,24 +679,9 @@ public abstract class AbstractUtilities {
       return res;
     } catch (Exception e) {
       throw new NotFoundException(e);
-    } finally {
-      IOUtils.closeQuietly(entity);
     }
   }
 
-  private Map<String, InputStream> getPropertyValues(final InputStream is, final List<String> propertyNames)
-          throws Exception {
-    final Map<String, InputStream> res = new LinkedHashMap<String, InputStream>();
-
-    for (String propertyName : propertyNames) {
-      res.put(propertyName, getPropertyValue(is, Collections.<String>singletonList(propertyName)));
-    }
-
-    IOUtils.closeQuietly(is);
-
-    return res;
-  }
-
   public String getLinksBasePath(final String entitySetName, final String entityId) {
     return entitySetName + File.separatorChar + Commons.getEntityKey(entityId) + File.separatorChar
             + Constants.get(version, ConstantKey.LINKS_FILE_PATH) + File.separatorChar;
@@ -819,6 +795,7 @@ public abstract class AbstractUtilities {
           final List<String> path,
           final Accept accept,
           final boolean justValue) throws Exception {
+
     final String basePath = Commons.getEntityBasePath(entitySetName, entityId);
 
     final Accept acceptType = accept == null || Accept.TEXT == accept

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/fit/src/main/java/org/apache/olingo/fit/utils/AbstractXMLUtilities.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/AbstractXMLUtilities.java b/fit/src/main/java/org/apache/olingo/fit/utils/AbstractXMLUtilities.java
index 237ab0c..2e6ba7a 100644
--- a/fit/src/main/java/org/apache/olingo/fit/utils/AbstractXMLUtilities.java
+++ b/fit/src/main/java/org/apache/olingo/fit/utils/AbstractXMLUtilities.java
@@ -76,7 +76,7 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
       ifactory = XMLInputFactory.newInstance();
     }
     ifactory.setProperty(XMLInputFactory.IS_NAMESPACE_AWARE, false);
-    return ifactory.createXMLEventReader(is, "utf-8");
+    return ifactory.createXMLEventReader(is, "UTF-8");
   }
 
   protected static XMLEventWriter getEventWriter(final OutputStream os) throws XMLStreamException {
@@ -84,7 +84,7 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
       ofactory = XMLOutputFactory.newInstance();
     }
 
-    return ofactory.createXMLEventWriter(os, "utf-8");
+    return ofactory.createXMLEventWriter(os, "UTF-8");
   }
 
   private void writeEvent(final XMLEvent event, final XMLEventWriter writer) {
@@ -265,7 +265,7 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
           inlineReader.close();
         } catch (Exception ignore) {
           // inline element not found (inlines are not mondatory).
-          if (StringUtils.isNotBlank(href) && entityUriPattern.matcher(href).matches()) {
+          if (StringUtils.isNotBlank(href) && ENTITY_URI_PATTERN.matcher(href).matches()) {
             links.addLinks(title, href.substring(href.lastIndexOf('/') + 1));
           }
         }
@@ -1054,6 +1054,7 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
   public Map.Entry<String, List<String>> extractLinkURIs(
           final String entitySetName, final String entityId, final String linkName)
           throws Exception {
+    
     final LinkInfo links = readLinks(entitySetName, entityId, linkName, Accept.XML);
     return extractLinkURIs(links.getLinks());
   }
@@ -1117,7 +1118,7 @@ public abstract class AbstractXMLUtilities extends AbstractUtilities {
     final XMLEventWriter writer = getEventWriter(bos);
 
     final XMLEventFactory eventFactory = XMLEventFactory.newInstance();
-    writer.add(eventFactory.createStartDocument("utf-8", "1.0"));
+    writer.add(eventFactory.createStartDocument("UTF-8", "1.0"));
     writer.add(property.getStart());
 
     if (property.getStart().getAttributeByName(new QName(

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/fit/src/main/java/org/apache/olingo/fit/utils/Accept.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/Accept.java b/fit/src/main/java/org/apache/olingo/fit/utils/Accept.java
index 053a52d..ab3b680 100644
--- a/fit/src/main/java/org/apache/olingo/fit/utils/Accept.java
+++ b/fit/src/main/java/org/apache/olingo/fit/utils/Accept.java
@@ -93,7 +93,7 @@ public enum Accept {
     } else if (contentType.startsWith(TEXT.toString(version))) {
       return TEXT;
     } else {
-      throw new UnsupportedMediaTypeException("Unsupported media type");
+      throw new UnsupportedMediaTypeException(contentType);
     }
   }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/fit/src/main/java/org/apache/olingo/fit/utils/Commons.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/Commons.java b/fit/src/main/java/org/apache/olingo/fit/utils/Commons.java
index aaa2093..2844676 100644
--- a/fit/src/main/java/org/apache/olingo/fit/utils/Commons.java
+++ b/fit/src/main/java/org/apache/olingo/fit/utils/Commons.java
@@ -57,59 +57,61 @@ public abstract class Commons {
    */
   protected static final Logger LOG = LoggerFactory.getLogger(Commons.class);
 
-  private static Map<ODataServiceVersion, FITAtomDeserializer> atomDeserializer =
+  private static final Map<ODataServiceVersion, FITAtomDeserializer> ATOM_DESERIALIZER =
           new EnumMap<ODataServiceVersion, FITAtomDeserializer>(ODataServiceVersion.class);
 
-  private static Map<ODataServiceVersion, AtomSerializer> atomSerializer =
+  private static final Map<ODataServiceVersion, AtomSerializer> ATOM_SERIALIZER =
           new EnumMap<ODataServiceVersion, AtomSerializer>(ODataServiceVersion.class);
 
-  private static Map<ODataServiceVersion, ObjectMapper> jsonmapper =
+  private static final Map<ODataServiceVersion, ObjectMapper> JSON_MAPPER =
           new EnumMap<ODataServiceVersion, ObjectMapper>(ODataServiceVersion.class);
 
-  private static EnumMap<ODataServiceVersion, Metadata> metadata =
+  private static final EnumMap<ODataServiceVersion, Metadata> METADATA =
           new EnumMap<ODataServiceVersion, Metadata>(ODataServiceVersion.class);
 
-  protected static Pattern multiKeyPattern = Pattern.compile("(.*=.*,?)+");
+  protected static final Pattern MULTIKEY_PATTERN = Pattern.compile("(.*=.*,?)+");
 
-  protected final static Map<String, Integer> sequence = new HashMap<String, Integer>();
+  protected static final Map<String, Integer> SEQUENCE = new HashMap<String, Integer>();
 
-  protected final static Map<String, String> mediaContent = new HashMap<String, String>();
+  protected static final Map<String, String> MEDIA_CONTENT = new HashMap<String, String>();
 
   static {
-    sequence.put("Customer", 1000);
-    sequence.put("CustomerInfo", 1000);
-    sequence.put("Car", 1000);
-    sequence.put("Message", 1000);
-    sequence.put("Order", 1000);
-    sequence.put("ComputerDetail", 1000);
-    sequence.put("AllGeoTypesSet", 1000);
-    sequence.put("Orders", 1000);
-    sequence.put("Customers", 1000);
-    sequence.put("Person", 1000);
-    sequence.put("RowIndex", 1000);
-
-    mediaContent.put("CustomerInfo", "CustomerinfoId");
-    mediaContent.put("Car", "VIN");
-    mediaContent.put("Car/Photo", null);
+    SEQUENCE.put("Customer", 1000);
+    SEQUENCE.put("CustomerInfo", 1000);
+    SEQUENCE.put("Car", 1000);
+    SEQUENCE.put("Message", 1000);
+    SEQUENCE.put("Order", 1000);
+    SEQUENCE.put("ComputerDetail", 1000);
+    SEQUENCE.put("AllGeoTypesSet", 1000);
+    SEQUENCE.put("Orders", 1000);
+    SEQUENCE.put("Customers", 1000);
+    SEQUENCE.put("Person", 1000);
+    SEQUENCE.put("RowIndex", 1000);
+    SEQUENCE.put("Products", 1000);
+    SEQUENCE.put("ProductDetails", 1000);
+
+    MEDIA_CONTENT.put("CustomerInfo", "CustomerinfoId");
+    MEDIA_CONTENT.put("Car", "VIN");
+    MEDIA_CONTENT.put("Car/Photo", null);
   }
 
   public static FITAtomDeserializer getAtomDeserializer(final ODataServiceVersion version) {
-    if (!atomDeserializer.containsKey(version)) {
-      atomDeserializer.put(version, new FITAtomDeserializer(version));
+    if (!ATOM_DESERIALIZER.containsKey(version)) {
+      ATOM_DESERIALIZER.put(version, new FITAtomDeserializer(version));
     }
-    return atomDeserializer.get(version);
+    return ATOM_DESERIALIZER.get(version);
   }
 
   public static AtomSerializer getAtomSerializer(final ODataServiceVersion version) {
-    if (!atomSerializer.containsKey(version)) {
-      atomSerializer.put(version, new AtomSerializer(version, true));
+    if (!ATOM_SERIALIZER.containsKey(version)) {
+      ATOM_SERIALIZER.put(version, new AtomSerializer(version, true));
     }
 
-    return atomSerializer.get(version);
+    return ATOM_SERIALIZER.get(version);
   }
 
   public static ObjectMapper getJsonMapper(final ODataServiceVersion version) {
-    if (!jsonmapper.containsKey(version)) {
+    if (!JSON_MAPPER.containsKey(version)) {
       final ObjectMapper mapper = new ObjectMapper().setSerializationInclusion(JsonInclude.Include.NON_NULL);
 
       mapper.setInjectableValues(new InjectableValues.Std()
@@ -122,24 +124,24 @@ public abstract class Commons {
               .withAttribute(Boolean.class, Boolean.TRUE),
               mapper.getSerializerFactory()));
 
-      jsonmapper.put(version, mapper);
+      JSON_MAPPER.put(version, mapper);
     }
 
-    return jsonmapper.get(version);
+    return JSON_MAPPER.get(version);
   }
 
   public static Metadata getMetadata(final ODataServiceVersion version) {
-    if (!metadata.containsKey(version)) {
+    if (!METADATA.containsKey(version)) {
       final InputStream is = Commons.class.getResourceAsStream("/" + version.name() + "/metadata.xml");
 
-      metadata.put(version, new Metadata(is));
+      METADATA.put(version, new Metadata(is));
     }
 
-    return metadata.get(version);
+    return METADATA.get(version);
   }
 
   public static Map<String, String> getMediaContent() {
-    return mediaContent;
+    return MEDIA_CONTENT;
   }
 
   public static String getEntityURI(final String entitySetName, final String entityKey) {
@@ -184,7 +186,7 @@ public abstract class Commons {
   }
 
   public static String getEntityKey(final String entityId) {
-    if (multiKeyPattern.matcher(entityId).matches()) {
+    if (MULTIKEY_PATTERN.matcher(entityId).matches()) {
       // assume correct multi-key
       final String[] keys = entityId.split(",");
       final StringBuilder keyBuilder = new StringBuilder();
@@ -200,19 +202,19 @@ public abstract class Commons {
     }
   }
 
-  public static InputStream getLinksAsATOM(final Map.Entry<String, Collection<String>> link)
-          throws IOException {
+  public static InputStream getLinksAsATOM(final ODataServiceVersion version,
+          final Map.Entry<String, Collection<String>> link) throws IOException {
 
     final StringBuilder builder = new StringBuilder();
     builder.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
-    builder.append("<links xmlns=\"http://schemas.microsoft.com/ado/2007/08/dataservices\">");
+    builder.append("<links xmlns=\"" + Constants.get(version, ConstantKey.DATASERVICES_NS) + "\">");
 
     for (String uri : link.getValue()) {
       builder.append("<uri>");
       if (URI.create(uri).isAbsolute()) {
         builder.append(uri);
       } else {
-        builder.append(Constants.get(ConstantKey.DEFAULT_SERVICE_URL)).append(uri);
+        builder.append(Constants.get(version, ConstantKey.DEFAULT_SERVICE_URL)).append(uri);
       }
       builder.append("</uri>");
     }
@@ -222,14 +224,14 @@ public abstract class Commons {
     return IOUtils.toInputStream(builder.toString());
   }
 
-  public static InputStream getLinksAsJSON(
+  public static InputStream getLinksAsJSON(final ODataServiceVersion version,
           final String entitySetName, final Map.Entry<String, Collection<String>> link)
           throws IOException {
 
     final ObjectNode links = new ObjectNode(JsonNodeFactory.instance);
     links.put(
-            Constants.get(ConstantKey.JSON_ODATAMETADATA_NAME),
-            Constants.get(ConstantKey.ODATA_METADATA_PREFIX) + entitySetName + "/$links/" + link.getKey());
+            Constants.get(version, ConstantKey.JSON_ODATAMETADATA_NAME),
+            Constants.get(version, ConstantKey.ODATA_METADATA_PREFIX) + entitySetName + "/$links/" + link.getKey());
 
     final ArrayNode uris = new ArrayNode(JsonNodeFactory.instance);
 
@@ -238,7 +240,7 @@ public abstract class Commons {
       if (URI.create(uri).isAbsolute()) {
         absoluteURI = uri;
       } else {
-        absoluteURI = Constants.get(ConstantKey.DEFAULT_SERVICE_URL) + uri;
+        absoluteURI = Constants.get(version, ConstantKey.DEFAULT_SERVICE_URL) + uri;
       }
       uris.add(new ObjectNode(JsonNodeFactory.instance).put("url", absoluteURI));
     }
@@ -249,7 +251,7 @@ public abstract class Commons {
       links.set("value", uris);
     }
 
-    return IOUtils.toInputStream(links.toString(), "UTf-8");
+    return IOUtils.toInputStream(links.toString(), "UTF-8");
   }
 
   public static InputStream changeFormat(final InputStream is, final ODataServiceVersion version, final Accept target) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/fit/src/main/java/org/apache/olingo/fit/utils/Constants.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/Constants.java b/fit/src/main/java/org/apache/olingo/fit/utils/Constants.java
index 0b5cf66..355e929 100644
--- a/fit/src/main/java/org/apache/olingo/fit/utils/Constants.java
+++ b/fit/src/main/java/org/apache/olingo/fit/utils/Constants.java
@@ -34,7 +34,7 @@ public class Constants {
    */
   public static final byte[] CRLF = {13, 10};
 
-  public static Charset encoding = Charset.forName("UTF-8");
+  public static final Charset ENCODING = Charset.forName("UTF-8");
 
   static {
 
@@ -46,6 +46,7 @@ public class Constants {
     v4constants.put(ConstantKey.JSON_NAVIGATION_SUFFIX, "@odata.navigationLink");
     v4constants.put(ConstantKey.DATASERVICES_NS, "http://docs.oasis-open.org/odata/ns/dataservices");
     v4constants.put(ConstantKey.METADATA_NS, "http://docs.oasis-open.org/odata/ns/metadata");
+    v4constants.put(ConstantKey.ATOM_LINK_REL, "http://docs.oasis-open.org/odata/ns/related/");
     v4constants.put(ConstantKey.ODATA_SERVICE_VERSION, "OData-Version");
     v4constants.put(ConstantKey.DEFAULT_SERVICE_URL, "http://localhost:9080/StaticService/V40/Static.svc/");
     v4constants.put(ConstantKey.ODATA_METADATA_PREFIX, "http://localhost:9080/StaticService/V40/Static.svc/$metadata#");

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/fit/src/main/java/org/apache/olingo/fit/utils/DataBinder.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/DataBinder.java b/fit/src/main/java/org/apache/olingo/fit/utils/DataBinder.java
index 9102e86..986c997 100644
--- a/fit/src/main/java/org/apache/olingo/fit/utils/DataBinder.java
+++ b/fit/src/main/java/org/apache/olingo/fit/utils/DataBinder.java
@@ -141,12 +141,12 @@ public class DataBinder {
       alink.setRel(link.getRel());
 
       if (link.getInlineEntry() instanceof JSONEntryImpl) {
-        Entry inlineEntry = link.getInlineEntry();
+        final Entry inlineEntry = link.getInlineEntry();
         if (inlineEntry instanceof JSONEntryImpl) {
           alink.setInlineEntry(getAtomEntry((JSONEntryImpl) link.getInlineEntry()));
         }
       } else if (link.getInlineFeed() instanceof JSONFeedImpl) {
-        Feed inlineFeed = link.getInlineFeed();
+        final Feed inlineFeed = link.getInlineFeed();
         if (inlineFeed instanceof JSONFeedImpl) {
           alink.setInlineFeed(getAtomFeed((JSONFeedImpl) link.getInlineFeed()));
         }
@@ -168,10 +168,10 @@ public class DataBinder {
         alink.setTitle(property.getName());
 
         alink.setType(navProperties.get(property.getName()).isFeed()
-                ? Constants.get(ConstantKey.ATOM_LINK_FEED)
-                : Constants.get(ConstantKey.ATOM_LINK_ENTRY));
+                ? Constants.get(version, ConstantKey.ATOM_LINK_FEED)
+                : Constants.get(version, ConstantKey.ATOM_LINK_ENTRY));
 
-        alink.setRel(Constants.get(ConstantKey.ATOM_LINK_REL) + property.getName());
+        alink.setRel(Constants.get(version, ConstantKey.ATOM_LINK_REL) + property.getName());
 
         if (property.getValue().isComplex()) {
           final Entry inline = new AtomEntryImpl();
@@ -187,7 +187,7 @@ public class DataBinder {
             final Entry inlineEntry = new AtomEntryImpl();
             inlineEntry.setType(navProperties.get(property.getName()).getType());
             for (Property prop : entry.asComplex().get()) {
-              inlineEntry.getProperties().add(prop);
+              inlineEntry.getProperties().add(getAtomProperty((JSONPropertyImpl) prop, inlineEntry.getType()));
             }
             inline.getEntries().add(inlineEntry);
           }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/fit/src/main/java/org/apache/olingo/fit/utils/FSManager.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/utils/FSManager.java b/fit/src/main/java/org/apache/olingo/fit/utils/FSManager.java
index d1543d5..46654fe 100644
--- a/fit/src/main/java/org/apache/olingo/fit/utils/FSManager.java
+++ b/fit/src/main/java/org/apache/olingo/fit/utils/FSManager.java
@@ -108,7 +108,7 @@ public class FSManager {
       final AtomSerializer atomSerializer = Commons.getAtomSerializer(serviceVersion);
 
       final ByteArrayOutputStream content = new ByteArrayOutputStream();
-      final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.encoding);
+      final OutputStreamWriter writer = new OutputStreamWriter(content, Constants.ENCODING);
 
       atomSerializer.write(writer, container);
       writer.flush();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/fit/src/main/resources/V40/People/1/entity.full.json
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/People/1/entity.full.json b/fit/src/main/resources/V40/People/1/entity.full.json
new file mode 100644
index 0000000..b2fc162
--- /dev/null
+++ b/fit/src/main/resources/V40/People/1/entity.full.json
@@ -0,0 +1,51 @@
+{
+  "@odata.context": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//$metadata#People/$entity",
+  "@odata.type": "#Microsoft.Test.OData.Services.ODataWCFService.Customer",
+  "@odata.id": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//People(1)",
+  "@odata.editLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//People(1)/Microsoft.Test.OData.Services.ODataWCFService.Customer",
+  "PersonID": 1,
+  "FirstName": "Bob",
+  "LastName": "Cat",
+  "MiddleName": null,
+  "HomeAddress": {
+    "@odata.type": "#Microsoft.Test.OData.Services.ODataWCFService.HomeAddress",
+    "Street": "1 Microsoft Way",
+    "City": "London",
+    "PostalCode": "98052",
+    "FamilyName": "Cats"
+  },
+  "Home@odata.type": "#GeographyPoint",
+  "Home": {
+    "type": "Point",
+    "coordinates": [23.1, 32.1],
+    "crs": {
+      "type": "name",
+      "properties": {
+        "name": "EPSG:4326"
+      }
+    }
+  },
+  "Numbers@odata.type": "#Collection(String)",
+  "Numbers": ["111-111-1111", "012", "310", "bca", "ayz"],
+  "Emails@odata.type": "#Collection(String)",
+  "Emails": ["abc@abc.com"],
+  "City": "London",
+  "Birthday@odata.type": "#DateTimeOffset",
+  "Birthday": "1957-04-03T00:00:00Z",
+  "TimeBetweenLastTwoOrders@odata.type": "#Duration",
+  "TimeBetweenLastTwoOrders": "PT0.0000001S",
+  "Parent@odata.associationLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//People(1)/Microsoft.Test.OData.Services.ODataWCFService.Customer/Parent/$ref",
+  "Parent@odata.navigationLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//People(1)/Microsoft.Test.OData.Services.ODataWCFService.Customer/Parent",
+  "Orders@odata.associationLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//People(1)/Microsoft.Test.OData.Services.ODataWCFService.Customer/Orders/$ref",
+  "Orders@odata.navigationLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//People(1)/Microsoft.Test.OData.Services.ODataWCFService.Customer/Orders",
+  "Company@odata.associationLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//People(1)/Microsoft.Test.OData.Services.ODataWCFService.Customer/Company/$ref",
+  "Company@odata.navigationLink": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//People(1)/Microsoft.Test.OData.Services.ODataWCFService.Customer/Company",
+  "#Microsoft.Test.OData.Services.ODataWCFService.ResetAddress": {
+    "title": "Microsoft.Test.OData.Services.ODataWCFService.ResetAddress",
+    "target": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//People(1)/Microsoft.Test.OData.Services.ODataWCFService.Customer/Microsoft.Test.OData.Services.ODataWCFService.ResetAddress"
+  },
+  "#Microsoft.Test.OData.Services.ODataWCFService.GetHomeAddress": {
+    "title": "Microsoft.Test.OData.Services.ODataWCFService.GetHomeAddress",
+    "target": "http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//People(1)/Microsoft.Test.OData.Services.ODataWCFService.Customer/Microsoft.Test.OData.Services.ODataWCFService.GetHomeAddress"
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/fit/src/main/resources/V40/People/1/entity.xml
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/People/1/entity.xml b/fit/src/main/resources/V40/People/1/entity.xml
new file mode 100644
index 0000000..14b5cdc
--- /dev/null
+++ b/fit/src/main/resources/V40/People/1/entity.xml
@@ -0,0 +1,72 @@
+<?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 xml:base="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//" 
+       xmlns="http://www.w3.org/2005/Atom" 
+       xmlns:d="http://docs.oasis-open.org/odata/ns/data" 
+       xmlns:m="http://docs.oasis-open.org/odata/ns/metadata" 
+       xmlns:georss="http://www.georss.org/georss" 
+       xmlns:gml="http://www.opengis.net/gml" 
+       m:context="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/$metadata#People/$entity">
+  <id>http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/People(1)</id>
+  <category term="#Microsoft.Test.OData.Services.ODataWCFService.Customer" scheme="http://docs.oasis-open.org/odata/ns/scheme"/>
+  <link rel="edit" href="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/People(1)"/>
+  <link rel="http://docs.oasis-open.org/odata/ns/related/Parent" type="application/atom+xml;type=entry" title="Parent" href="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//People(1)/Microsoft.Test.OData.Services.ODataWCFService.Customer/Parent"/>
+  <link rel="http://docs.oasis-open.org/odata/ns/related/Orders" type="application/atom+xml;type=feed" title="Orders" href="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//People(1)/Microsoft.Test.OData.Services.ODataWCFService.Customer/Orders"/>
+  <link rel="http://docs.oasis-open.org/odata/ns/related/Company" type="application/atom+xml;type=entry" title="Company" href="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc//People(1)/Microsoft.Test.OData.Services.ODataWCFService.Customer/Company"/>
+  <title/>
+  <updated>2014-04-17T12:35:59Z</updated>
+  <author>
+    <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:HomeAddress m:type="#Microsoft.Test.OData.Services.ODataWCFService.HomeAddress">
+        <d:Street>1 Microsoft Way</d:Street>
+        <d:City>London</d:City>
+        <d:PostalCode>98052</d:PostalCode>
+        <d:FamilyName>Cats</d:FamilyName>
+      </d:HomeAddress>
+      <d:Home m:type="GeographyPoint">
+        <gml:Point gml:srsName="http://www.opengis.net/def/crs/EPSG/0/4326">
+          <gml:pos>32.1 23.1</gml:pos>
+        </gml:Point>
+      </d:Home>
+      <d:Numbers m:type="#Collection(String)">
+        <m:element>111-111-1111</m:element>
+        <m:element>012</m:element>
+        <m:element>310</m:element>
+        <m:element>bca</m:element>
+        <m:element>ayz</m:element>
+      </d:Numbers>
+      <d:Emails m:type="#Collection(String)">
+        <m:element>abc@abc.com</m:element>
+      </d:Emails>
+      <d:City>London</d:City>
+      <d:Birthday m:type="DateTimeOffset">1957-04-03T00:00:00Z</d:Birthday>
+      <d:TimeBetweenLastTwoOrders m:type="Duration">PT0.0000001S</d:TimeBetweenLastTwoOrders>
+    </m:properties>
+  </content>
+</entry>

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/fit/src/main/resources/V40/People/5/entity.xml
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/People/5/entity.xml b/fit/src/main/resources/V40/People/5/entity.xml
index daebef8..adb0d4e 100644
--- a/fit/src/main/resources/V40/People/5/entity.xml
+++ b/fit/src/main/resources/V40/People/5/entity.xml
@@ -19,7 +19,13 @@
     under the License.
 
 -->
-<entry xml:base="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/" xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://docs.oasis-open.org/odata/ns/data" xmlns:m="http://docs.oasis-open.org/odata/ns/metadata" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml" m:context="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/$metadata#People/$entity">
+<entry xml:base="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/" 
+       xmlns="http://www.w3.org/2005/Atom" 
+       xmlns:d="http://docs.oasis-open.org/odata/ns/data" 
+       xmlns:m="http://docs.oasis-open.org/odata/ns/metadata" 
+       xmlns:georss="http://www.georss.org/georss" 
+       xmlns:gml="http://www.opengis.net/gml" 
+       m:context="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/$metadata#People/$entity">
   <id>http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/People(5)</id>
   <category term="#Microsoft.Test.OData.Services.ODataWCFService.Person" scheme="http://docs.oasis-open.org/odata/ns/scheme" />
   <link rel="edit" href="http://localhost:${cargo.servlet.port}/StaticService/V40/Static.svc/People(5)" />

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/CommonStreamedRequestFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/CommonStreamedRequestFactory.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/CommonStreamedRequestFactory.java
index 1518fe8..ec91b9b 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/CommonStreamedRequestFactory.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/CommonStreamedRequestFactory.java
@@ -21,6 +21,7 @@ package org.apache.olingo.client.api.communication.request.streamed;
 import java.io.InputStream;
 import java.io.Serializable;
 import java.net.URI;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
 
 /**
  * OData request factory class.
@@ -32,11 +33,13 @@ public interface CommonStreamedRequestFactory extends Serializable {
    * <br/>
    * Use this kind of request to create a new media entity.
    *
+   * @param <E> concrete ODataEntity implementation
    * @param targetURI entity set URI.
    * @param media entity blob to be created.
    * @return new ODataMediaEntityCreateRequest instance.
    */
-  ODataMediaEntityCreateRequest getMediaEntityCreateRequest(URI targetURI, InputStream media);
+  <E extends CommonODataEntity> ODataMediaEntityCreateRequest<E> getMediaEntityCreateRequest(
+          URI targetURI, InputStream media);
 
   /**
    * Gets a stream update request object instance.
@@ -54,9 +57,11 @@ public interface CommonStreamedRequestFactory extends Serializable {
    * <br/>
    * Use this kind of request to update a media entity.
    *
+   * @param <E> concrete ODataEntity implementation
    * @param editURI media entity edit link URI.
    * @param media entity blob to be updated.
    * @return new ODataMediaEntityUpdateRequest instance.
    */
-  ODataMediaEntityUpdateRequest getMediaEntityUpdateRequest(URI editURI, InputStream media);
+  <E extends CommonODataEntity> ODataMediaEntityUpdateRequest<E> getMediaEntityUpdateRequest(
+          URI editURI, InputStream media);
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/MediaEntityCreateStreamManager.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/MediaEntityCreateStreamManager.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/MediaEntityCreateStreamManager.java
index 21c9c89..7b24fb4 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/MediaEntityCreateStreamManager.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/MediaEntityCreateStreamManager.java
@@ -20,9 +20,13 @@ package org.apache.olingo.client.api.communication.request.streamed;
 
 import org.apache.olingo.client.api.communication.request.ODataStreamManager;
 import org.apache.olingo.client.api.communication.response.ODataMediaEntityCreateResponse;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
 
 /**
  * Media entity payload object.
+ *
+ * @param <E> concrete ODataEntity implementation
  */
-public interface MediaEntityCreateStreamManager extends ODataStreamManager<ODataMediaEntityCreateResponse> {
+public interface MediaEntityCreateStreamManager<E extends CommonODataEntity>
+        extends ODataStreamManager<ODataMediaEntityCreateResponse<E>> {
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/MediaEntityUpdateStreamManager.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/MediaEntityUpdateStreamManager.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/MediaEntityUpdateStreamManager.java
index d545e3a..230fab1 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/MediaEntityUpdateStreamManager.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/MediaEntityUpdateStreamManager.java
@@ -20,9 +20,13 @@ package org.apache.olingo.client.api.communication.request.streamed;
 
 import org.apache.olingo.client.api.communication.request.ODataStreamManager;
 import org.apache.olingo.client.api.communication.response.ODataMediaEntityUpdateResponse;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
 
 /**
  * Media entity payload object.
+ *
+ * @param <E> concrete ODataEntity implementation
  */
-public interface MediaEntityUpdateStreamManager extends ODataStreamManager<ODataMediaEntityUpdateResponse> {
+public interface MediaEntityUpdateStreamManager<E extends CommonODataEntity>
+        extends ODataStreamManager<ODataMediaEntityUpdateResponse<E>> {
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/ODataMediaEntityCreateRequest.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/ODataMediaEntityCreateRequest.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/ODataMediaEntityCreateRequest.java
index 76a7a8c..f3cb4ca 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/ODataMediaEntityCreateRequest.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/ODataMediaEntityCreateRequest.java
@@ -19,10 +19,13 @@
 package org.apache.olingo.client.api.communication.request.streamed;
 
 import org.apache.olingo.client.api.communication.response.ODataMediaEntityCreateResponse;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
 
 /**
  * This class implements an OData Media Entity create request. Get instance by using ODataStreamedRequestFactory.
+ *
+ * @param <E> concrete ODataEntity implementation
  */
-public interface ODataMediaEntityCreateRequest
-        extends ODataStreamedEntityRequest<ODataMediaEntityCreateResponse, MediaEntityCreateStreamManager> {
+public interface ODataMediaEntityCreateRequest<E extends CommonODataEntity>
+        extends ODataStreamedEntityRequest<ODataMediaEntityCreateResponse<E>, MediaEntityCreateStreamManager<E>> {
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/ODataMediaEntityUpdateRequest.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/ODataMediaEntityUpdateRequest.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/ODataMediaEntityUpdateRequest.java
index 913ce36..2f711b4 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/ODataMediaEntityUpdateRequest.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/streamed/ODataMediaEntityUpdateRequest.java
@@ -19,10 +19,13 @@
 package org.apache.olingo.client.api.communication.request.streamed;
 
 import org.apache.olingo.client.api.communication.response.ODataMediaEntityUpdateResponse;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
 
 /**
  * This class implements an OData Media Entity create request. Get instance by using ODataStreamedRequestFactory.
+ *
+ * @param <E> concrete ODataEntity implementation
  */
-public interface ODataMediaEntityUpdateRequest
-        extends ODataStreamedEntityRequest<ODataMediaEntityUpdateResponse, MediaEntityUpdateStreamManager> {
+public interface ODataMediaEntityUpdateRequest<E extends CommonODataEntity>
+        extends ODataStreamedEntityRequest<ODataMediaEntityUpdateResponse<E>, MediaEntityUpdateStreamManager<E>> {
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataMediaEntityCreateResponse.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataMediaEntityCreateResponse.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataMediaEntityCreateResponse.java
index c29193b..4a757c1 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataMediaEntityCreateResponse.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataMediaEntityCreateResponse.java
@@ -21,16 +21,16 @@ package org.apache.olingo.client.api.communication.response;
 import org.apache.olingo.commons.api.domain.CommonODataEntity;
 
 /**
- * This class implements the response to an Odata media entity create request.
+ * This class implements the response to an OData media entity create request.
  *
- * @see org.apache.olingo.client.core.communication.request.streamed.ODataMediaEntityCreateRequest
+ * @param <E> concrete ODataEntity implementation
  */
-public interface ODataMediaEntityCreateResponse extends ODataResponse {
+public interface ODataMediaEntityCreateResponse<E extends CommonODataEntity> extends ODataResponse {
 
   /**
    * Gets created object.
    *
    * @return created object.
    */
-  CommonODataEntity getBody();
+  E getBody();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataMediaEntityUpdateResponse.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataMediaEntityUpdateResponse.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataMediaEntityUpdateResponse.java
index 97aab03..e5b7f7b 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataMediaEntityUpdateResponse.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataMediaEntityUpdateResponse.java
@@ -23,14 +23,14 @@ import org.apache.olingo.commons.api.domain.CommonODataEntity;
 /**
  * This class implements the response to an Odata media entity update request.
  *
- * @see org.apache.olingo.client.core.communication.request.streamed.ODataMediaEntityUpdateRequest
+ * @param <E> concrete ODataEntity implementation
  */
-public interface ODataMediaEntityUpdateResponse extends ODataResponse {
+public interface ODataMediaEntityUpdateResponse<E extends CommonODataEntity> extends ODataResponse {
 
   /**
    * Gets updated object.
    *
    * @return updated object.
    */
-  CommonODataEntity getBody();
+  E getBody();
 }


[4/5] [OLINGO-175] More V4 CRUD tests for containment, deep insert and bind operation

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/pom.xml
----------------------------------------------------------------------
diff --git a/lib/client-core/pom.xml b/lib/client-core/pom.xml
index e8c20b5..58025ee 100644
--- a/lib/client-core/pom.xml
+++ b/lib/client-core/pom.xml
@@ -81,7 +81,7 @@
         <configuration>
           <systemPropertyVariables>
             <propertyName>org.slf4j.simpleLogger.defaultLogLevel</propertyName>
-            <org.slf4j.simpleLogger.defaultLogLevel>ERROR</org.slf4j.simpleLogger.defaultLogLevel>
+            <org.slf4j.simpleLogger.defaultLogLevel>DEBUG</org.slf4j.simpleLogger.defaultLogLevel>
           </systemPropertyVariables>
         </configuration>
       </plugin>

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/AbstractCUDRequestFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/AbstractCUDRequestFactory.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/AbstractCUDRequestFactory.java
index 73d39f9..a45afc7 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/AbstractCUDRequestFactory.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/AbstractCUDRequestFactory.java
@@ -36,9 +36,9 @@ public abstract class AbstractCUDRequestFactory<UT extends CommonUpdateType> imp
 
   private static final long serialVersionUID = -2723641791198745990L;
 
-  protected final CommonODataClient client;
+  protected final CommonODataClient<?> client;
 
-  protected AbstractCUDRequestFactory(final CommonODataClient client) {
+  protected AbstractCUDRequestFactory(final CommonODataClient<?> client) {
     this.client = client;
   }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractODataStreamedEntityRequest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractODataStreamedEntityRequest.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractODataStreamedEntityRequest.java
index ace08d3..ec5f773 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractODataStreamedEntityRequest.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractODataStreamedEntityRequest.java
@@ -45,8 +45,9 @@ public abstract class AbstractODataStreamedEntityRequest<V extends ODataResponse
    * @param method HTTP request method.
    * @param uri request URI.
    */
-  public AbstractODataStreamedEntityRequest(final CommonODataClient odataClient, final HttpMethod method,
-          URI uri) {
+  public AbstractODataStreamedEntityRequest(final CommonODataClient<?> odataClient, final HttpMethod method,
+          final URI uri) {
+
     super(odataClient, method, uri);
     setAccept(getFormat().toString(odataClient.getServiceVersion()));
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractStreamedRequestFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractStreamedRequestFactory.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractStreamedRequestFactory.java
index 014e1bc..cf15fcb 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractStreamedRequestFactory.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractStreamedRequestFactory.java
@@ -26,22 +26,23 @@ import org.apache.olingo.client.api.communication.request.streamed.ODataMediaEnt
 import org.apache.olingo.client.api.communication.request.streamed.ODataStreamUpdateRequest;
 import org.apache.olingo.client.api.communication.request.streamed.CommonStreamedRequestFactory;
 import org.apache.olingo.client.api.http.HttpMethod;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
 
 public abstract class AbstractStreamedRequestFactory implements CommonStreamedRequestFactory {
 
   private static final long serialVersionUID = -2438839640443961168L;
 
-  protected final CommonODataClient client;
+  protected final CommonODataClient<?> client;
 
-  protected AbstractStreamedRequestFactory(final CommonODataClient client) {
+  protected AbstractStreamedRequestFactory(final CommonODataClient<?> client) {
     this.client = client;
   }
 
   @Override
-  public ODataMediaEntityCreateRequest getMediaEntityCreateRequest(
+  public <E extends CommonODataEntity> ODataMediaEntityCreateRequest<E> getMediaEntityCreateRequest(
           final URI targetURI, final InputStream media) {
 
-    return new ODataMediaEntityCreateRequestImpl(client, targetURI, media);
+    return new ODataMediaEntityCreateRequestImpl<E>(client, targetURI, media);
   }
 
   @Override
@@ -59,16 +60,16 @@ public abstract class AbstractStreamedRequestFactory implements CommonStreamedRe
   }
 
   @Override
-  public ODataMediaEntityUpdateRequest getMediaEntityUpdateRequest(
+  public <E extends CommonODataEntity> ODataMediaEntityUpdateRequest<E> getMediaEntityUpdateRequest(
           final URI editURI, final InputStream media) {
 
-    final ODataMediaEntityUpdateRequest req;
+    final ODataMediaEntityUpdateRequest<E> req;
 
     if (client.getConfiguration().isUseXHTTPMethod()) {
-      req = new ODataMediaEntityUpdateRequestImpl(client, HttpMethod.POST, editURI, media);
+      req = new ODataMediaEntityUpdateRequestImpl<E>(client, HttpMethod.POST, editURI, media);
       req.setXHTTPMethod(HttpMethod.PUT.name());
     } else {
-      req = new ODataMediaEntityUpdateRequestImpl(client, HttpMethod.PUT, editURI, media);
+      req = new ODataMediaEntityUpdateRequestImpl<E>(client, HttpMethod.PUT, editURI, media);
     }
 
     return req;

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataMediaEntityCreateRequestImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataMediaEntityCreateRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataMediaEntityCreateRequestImpl.java
index 2c1dd22..cbd292d 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataMediaEntityCreateRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataMediaEntityCreateRequestImpl.java
@@ -37,10 +37,12 @@ import org.apache.olingo.commons.api.data.Entry;
 
 /**
  * This class implements an OData Media Entity create request. Get instance by using ODataStreamedRequestFactory.
+ *
+ * @param <E> concrete ODataEntity implementation
  */
-public class ODataMediaEntityCreateRequestImpl
-        extends AbstractODataStreamedEntityRequest<ODataMediaEntityCreateResponse, MediaEntityCreateStreamManager>
-        implements ODataMediaEntityCreateRequest, ODataBatchableRequest {
+public class ODataMediaEntityCreateRequestImpl<E extends CommonODataEntity>
+        extends AbstractODataStreamedEntityRequest<ODataMediaEntityCreateResponse<E>, MediaEntityCreateStreamManager<E>>
+        implements ODataMediaEntityCreateRequest<E>, ODataBatchableRequest {
 
   private final InputStream media;
 
@@ -51,27 +53,26 @@ public class ODataMediaEntityCreateRequestImpl
    * @param targetURI target entity set.
    * @param media media entity blob to be created.
    */
-  ODataMediaEntityCreateRequestImpl(final CommonODataClient odataClient, final URI targetURI, final InputStream media) {
+  ODataMediaEntityCreateRequestImpl(final CommonODataClient<?> odataClient, final URI targetURI,
+          final InputStream media) {
+
     super(odataClient, HttpMethod.POST, targetURI);
     this.media = media;
   }
 
-  /**
-   * {@inheritDoc }
-   */
   @Override
-  protected MediaEntityCreateStreamManager getStreamManager() {
+  protected MediaEntityCreateStreamManager<E> getStreamManager() {
     if (streamManager == null) {
       streamManager = new MediaEntityCreateStreamManagerImpl(media);
     }
-    return (MediaEntityCreateStreamManager) streamManager;
+    return (MediaEntityCreateStreamManager<E>) streamManager;
   }
 
   /**
    * Media entity payload object.
    */
-  public class MediaEntityCreateStreamManagerImpl extends AbstractODataStreamManager<ODataMediaEntityCreateResponse>
-          implements MediaEntityCreateStreamManager {
+  public class MediaEntityCreateStreamManagerImpl extends AbstractODataStreamManager<ODataMediaEntityCreateResponse<E>>
+          implements MediaEntityCreateStreamManager<E> {
 
     /**
      * Private constructor.
@@ -82,11 +83,8 @@ public class ODataMediaEntityCreateRequestImpl
       super(ODataMediaEntityCreateRequestImpl.this.futureWrapper, input);
     }
 
-    /**
-     * {@inheritDoc }
-     */
     @Override
-    protected ODataMediaEntityCreateResponse getResponse(final long timeout, final TimeUnit unit) {
+    protected ODataMediaEntityCreateResponse<E> getResponse(final long timeout, final TimeUnit unit) {
       finalizeBody();
       return new ODataMediaEntityCreateResponseImpl(httpClient, getHttpResponse(timeout, unit));
     }
@@ -96,9 +94,9 @@ public class ODataMediaEntityCreateRequestImpl
    * Response class about an ODataMediaEntityCreateRequest.
    */
   private class ODataMediaEntityCreateResponseImpl extends AbstractODataResponse
-          implements ODataMediaEntityCreateResponse {
+          implements ODataMediaEntityCreateResponse<E> {
 
-    private CommonODataEntity entity = null;
+    private E entity = null;
 
     /**
      * Constructor.
@@ -122,11 +120,12 @@ public class ODataMediaEntityCreateRequestImpl
      * {@inheritDoc }
      */
     @Override
-    public CommonODataEntity getBody() {
+    @SuppressWarnings("unchecked")
+    public E getBody() {
       if (entity == null) {
         try {
           final Container<Entry> container = odataClient.getDeserializer().toEntry(getRawResponse(), getFormat());
-          entity = odataClient.getBinder().getODataEntity(extractFromContainer(container));
+          entity = (E) odataClient.getBinder().getODataEntity(extractFromContainer(container));
         } finally {
           this.close();
         }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataMediaEntityUpdateRequestImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataMediaEntityUpdateRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataMediaEntityUpdateRequestImpl.java
index 614baa1..5967906 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataMediaEntityUpdateRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataMediaEntityUpdateRequestImpl.java
@@ -37,10 +37,12 @@ import org.apache.olingo.commons.api.data.Entry;
 
 /**
  * This class implements an OData Media Entity create request. Get instance by using ODataStreamedRequestFactory.
+ *
+ * @param <E> concrete ODataEntity implementation
  */
-public class ODataMediaEntityUpdateRequestImpl
-        extends AbstractODataStreamedEntityRequest<ODataMediaEntityUpdateResponse, MediaEntityUpdateStreamManager>
-        implements ODataMediaEntityUpdateRequest, ODataBatchableRequest {
+public class ODataMediaEntityUpdateRequestImpl<E extends CommonODataEntity>
+        extends AbstractODataStreamedEntityRequest<ODataMediaEntityUpdateResponse<E>, MediaEntityUpdateStreamManager<E>>
+        implements ODataMediaEntityUpdateRequest<E>, ODataBatchableRequest {
 
   private final InputStream media;
 
@@ -52,29 +54,26 @@ public class ODataMediaEntityUpdateRequestImpl
    * @param editURI edit URI of the entity to be updated.
    * @param media media entity blob to be created.
    */
-  ODataMediaEntityUpdateRequestImpl(final CommonODataClient odataClient,
+  ODataMediaEntityUpdateRequestImpl(final CommonODataClient<?> odataClient,
           final HttpMethod method, final URI editURI, final InputStream media) {
 
     super(odataClient, method, editURI);
     this.media = media;
   }
 
-  /**
-   * {@inheritDoc }
-   */
   @Override
-  protected MediaEntityUpdateStreamManager getStreamManager() {
+  protected MediaEntityUpdateStreamManager<E> getStreamManager() {
     if (streamManager == null) {
       streamManager = new MediaEntityUpdateStreamManagerImpl(media);
     }
-    return (MediaEntityUpdateStreamManager) streamManager;
+    return (MediaEntityUpdateStreamManager<E>) streamManager;
   }
 
   /**
    * Media entity payload object.
    */
-  public class MediaEntityUpdateStreamManagerImpl extends AbstractODataStreamManager<ODataMediaEntityUpdateResponse>
-          implements MediaEntityUpdateStreamManager {
+  public class MediaEntityUpdateStreamManagerImpl extends AbstractODataStreamManager<ODataMediaEntityUpdateResponse<E>>
+          implements MediaEntityUpdateStreamManager<E> {
 
     /**
      * Private constructor.
@@ -85,11 +84,8 @@ public class ODataMediaEntityUpdateRequestImpl
       super(ODataMediaEntityUpdateRequestImpl.this.futureWrapper, input);
     }
 
-    /**
-     * {@inheritDoc }
-     */
     @Override
-    protected ODataMediaEntityUpdateResponse getResponse(final long timeout, final TimeUnit unit) {
+    protected ODataMediaEntityUpdateResponse<E> getResponse(final long timeout, final TimeUnit unit) {
       finalizeBody();
       return new ODataMediaEntityUpdateResponseImpl(httpClient, getHttpResponse(timeout, unit));
     }
@@ -99,16 +95,17 @@ public class ODataMediaEntityUpdateRequestImpl
    * Response class about an ODataMediaEntityUpdateRequest.
    */
   private class ODataMediaEntityUpdateResponseImpl extends AbstractODataResponse
-          implements ODataMediaEntityUpdateResponse {
+          implements ODataMediaEntityUpdateResponse<E> {
 
-    private CommonODataEntity entity = null;
+    private E entity = null;
 
     /**
      * Constructor.
-     * <p>
+     * <br/>
      * Just to create response templates to be initialized from batch.
      */
     private ODataMediaEntityUpdateResponseImpl() {
+      super();
     }
 
     /**
@@ -121,15 +118,13 @@ public class ODataMediaEntityUpdateRequestImpl
       super(client, res);
     }
 
-    /**
-     * {@inheritDoc }
-     */
     @Override
-    public CommonODataEntity getBody() {
+    @SuppressWarnings("unchecked")
+    public E getBody() {
       if (entity == null) {
         try {
           final Container<Entry> container = odataClient.getDeserializer().toEntry(getRawResponse(), getFormat());
-          entity = odataClient.getBinder().getODataEntity(extractFromContainer(container));
+          entity = (E) odataClient.getBinder().getODataEntity(extractFromContainer(container));
         } finally {
           this.close();
         }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataStreamUpdateRequestImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataStreamUpdateRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataStreamUpdateRequestImpl.java
index aa27b2e..cf8eaa3 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataStreamUpdateRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/ODataStreamUpdateRequestImpl.java
@@ -49,7 +49,7 @@ public class ODataStreamUpdateRequestImpl
    * @param targetURI target URI.
    * @param stream stream to be updated.
    */
-  ODataStreamUpdateRequestImpl(final CommonODataClient odataClient,
+  ODataStreamUpdateRequestImpl(final CommonODataClient<?> odataClient,
           final HttpMethod method, final URI targetURI, final InputStream stream) {
 
     super(odataClient, method, targetURI);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/main/java/org/apache/olingo/client/core/data/JSONServiceDocumentDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/data/JSONServiceDocumentDeserializer.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/data/JSONServiceDocumentDeserializer.java
index f949e16..7cff539 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/data/JSONServiceDocumentDeserializer.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/data/JSONServiceDocumentDeserializer.java
@@ -48,8 +48,6 @@ public class JSONServiceDocumentDeserializer extends ODataJacksonDeserializer<Co
             : new org.apache.olingo.client.core.data.v4.JSONServiceDocumentImpl();
 
     final String metadataETag;
-    final URI contextURL;
-
     if (tree.hasNonNull(Constants.JSON_METADATA_ETAG)) {
       metadataETag = tree.get(Constants.JSON_METADATA_ETAG).textValue();
       tree.remove(Constants.JSON_METADATA_ETAG);
@@ -57,6 +55,7 @@ public class JSONServiceDocumentDeserializer extends ODataJacksonDeserializer<Co
       metadataETag = null;
     }
 
+    final URI contextURL;
     if (tree.hasNonNull(Constants.JSON_CONTEXT)) {
       contextURL = URI.create(tree.get(Constants.JSON_CONTEXT).textValue());
       tree.remove(Constants.JSON_CONTEXT);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataBinder.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataBinder.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataBinder.java
index ad58ab4..5b74502 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataBinder.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataBinder.java
@@ -291,18 +291,20 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
                 ? ODataLinkType.ENTITY_NAVIGATION
                 : ODataLinkType.fromString(client.getServiceVersion(), link.getRel(), link.getType());
         odataLinked.addLink(linkType == ODataLinkType.ENTITY_NAVIGATION
-                ? client.getObjectFactory().newEntityNavigationLink(link.getTitle(), base, link.getHref())
-                : client.getObjectFactory().newEntitySetNavigationLink(link.getTitle(), base, link.getHref()));
+                ? client.getObjectFactory().
+                newEntityNavigationLink(link.getTitle(), URIUtils.getURI(base, link.getHref()))
+                : client.getObjectFactory().
+                newEntitySetNavigationLink(link.getTitle(), URIUtils.getURI(base, link.getHref())));
       } else if (inlineEntry != null) {
-        odataLinked.addLink(client.getObjectFactory().newInlineEntity(
-                link.getTitle(), base, link.getHref(),
+        odataLinked.addLink(new ODataInlineEntity(client.getServiceVersion(),
+                URIUtils.getURI(base, link.getHref()), ODataLinkType.ENTITY_NAVIGATION, link.getTitle(),
                 getODataEntity(inlineEntry,
-                inlineEntry.getBaseURI() == null ? base : inlineEntry.getBaseURI())));
+                        inlineEntry.getBaseURI() == null ? base : inlineEntry.getBaseURI())));
       } else {
-        odataLinked.addLink(client.getObjectFactory().newInlineEntitySet(
-                link.getTitle(), base, link.getHref(),
+        odataLinked.addLink(new ODataInlineEntitySet(client.getServiceVersion(),
+                URIUtils.getURI(base, link.getHref()), ODataLinkType.ENTITY_SET_NAVIGATION, link.getTitle(),
                 getODataEntitySet(inlineFeed,
-                inlineFeed.getBaseURI() == null ? base : inlineFeed.getBaseURI())));
+                        inlineFeed.getBaseURI() == null ? base : inlineFeed.getBaseURI())));
       }
     }
   }
@@ -337,13 +339,17 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
     }
 
     for (Link link : resource.getAssociationLinks()) {
-      entity.addLink(client.getObjectFactory().newAssociationLink(link.getTitle(), base, link.getHref()));
+      entity.addLink(new ODataLink.Builder().setVersion(client.getServiceVersion()).
+              setURI(URIUtils.getURI(base, link.getHref())).
+              setType(ODataLinkType.ASSOCIATION).setTitle(link.getTitle()).build());
     }
 
     odataLinks(resource, entity, base);
 
     for (Link link : resource.getMediaEditLinks()) {
-      entity.addLink(client.getObjectFactory().newMediaEditLink(link.getTitle(), base, link.getHref()));
+      entity.addLink(new ODataLink.Builder().setVersion(client.getServiceVersion()).
+              setURI(URIUtils.getURI(base, link.getHref())).
+              setType(ODataLinkType.MEDIA_EDIT).setTitle(link.getTitle()).build());
     }
 
     for (ODataOperation operation : resource.getOperations()) {
@@ -373,18 +379,18 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
       value = client.getObjectFactory().newPrimitiveValueBuilder().
               setText(resource.getValue().asPrimitive().get()).
               setType(typeInfo == null
-              ? null
-              : EdmPrimitiveTypeKind.valueOfFQN(
-              client.getServiceVersion(), typeInfo.getFullQualifiedName().toString())).build();
+                      ? null
+                      : EdmPrimitiveTypeKind.valueOfFQN(
+                              client.getServiceVersion(), typeInfo.getFullQualifiedName().toString())).build();
     } else if (resource.getValue().isGeospatial()) {
       value = client.getObjectFactory().newPrimitiveValueBuilder().
               setValue(resource.getValue().asGeospatial().get()).
               setType(typeInfo == null
-              || EdmPrimitiveTypeKind.Geography.getFullQualifiedName().equals(typeInfo.getFullQualifiedName())
-              || EdmPrimitiveTypeKind.Geometry.getFullQualifiedName().equals(typeInfo.getFullQualifiedName())
-              ? resource.getValue().asGeospatial().get().getEdmPrimitiveTypeKind()
-              : EdmPrimitiveTypeKind.valueOfFQN(
-              client.getServiceVersion(), typeInfo.getFullQualifiedName().toString())).build();
+                      || EdmPrimitiveTypeKind.Geography.getFullQualifiedName().equals(typeInfo.getFullQualifiedName())
+                      || EdmPrimitiveTypeKind.Geometry.getFullQualifiedName().equals(typeInfo.getFullQualifiedName())
+                      ? resource.getValue().asGeospatial().get().getEdmPrimitiveTypeKind()
+                      : EdmPrimitiveTypeKind.valueOfFQN(
+                              client.getServiceVersion(), typeInfo.getFullQualifiedName().toString())).build();
     } else if (resource.getValue().isComplex()) {
       value = client.getObjectFactory().newComplexValue(typeInfo == null
               ? null : typeInfo.getFullQualifiedName().toString());

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java
index f9405ec..36f45b9 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java
@@ -283,9 +283,8 @@ public abstract class AbstractTestITCase extends AbstractBaseTestITCase {
     contactAliasValue.add(getClient().getObjectFactory().newCollectionProperty("AlternativeNames", aliasAltNamesValue));
 
     if (withInlineInfo) {
-      final ODataInlineEntity inlineInfo = getClient().getObjectFactory().newInlineEntity(
+      final ODataInlineEntity inlineInfo = getClient().getObjectFactory().newDeepInsertEntity(
               "Info",
-              URI.create("Customer(" + id + ")/Info"),
               getSampleCustomerInfo(id, sampleName + "_Info"));
       inlineInfo.getEntity().setMediaEntity(true);
       entity.addLink(inlineInfo);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AsyncTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AsyncTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AsyncTestITCase.java
index 18dd57e..a5a60b9 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AsyncTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AsyncTestITCase.java
@@ -102,11 +102,11 @@ public class AsyncTestITCase extends AbstractTestITCase {
     final String TO_BE_UPDATED = "async buffered stream sample";
     final InputStream input = IOUtils.toInputStream(TO_BE_UPDATED);
 
-    final ODataMediaEntityCreateRequest createReq =
+    final ODataMediaEntityCreateRequest<ODataEntity> createReq =
             client.getStreamedRequestFactory().getMediaEntityCreateRequest(builder.build(), input);
 
-    final MediaEntityCreateStreamManager streamManager = createReq.execute();
-    final Future<ODataMediaEntityCreateResponse> futureCreateRes = streamManager.getAsyncResponse();
+    final MediaEntityCreateStreamManager<ODataEntity> streamManager = createReq.execute();
+    final Future<ODataMediaEntityCreateResponse<ODataEntity>> futureCreateRes = streamManager.getAsyncResponse();
 
     while (!futureCreateRes.isDone()) {
       Thread.sleep(1000L);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityCreateTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityCreateTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityCreateTestITCase.java
index 2329aae..f57b443 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityCreateTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityCreateTestITCase.java
@@ -118,8 +118,8 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
     final int id = 5;
     final ODataEntity original = getSampleCustomerProfile(id, "Sample customer", false);
 
-    original.addLink(client.getObjectFactory().newInlineEntity(
-            "Info", null, getSampleCustomerInfo(id, "Sample Customer_Info")));
+    original.addLink(client.getObjectFactory().newDeepInsertEntity(
+            "Info", getSampleCustomerInfo(id, "Sample Customer_Info")));
 
     createEntity(getServiceRoot(), format, original, "Customer");
     final ODataEntity actual =
@@ -145,8 +145,8 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
     final int id = 6;
     final ODataEntity original = getSampleCustomerProfile(id, "Sample customer", false);
 
-    original.addLink(client.getObjectFactory().newInlineEntity(
-            "Info", null, getSampleCustomerInfo(id, "Sample Customer_Info")));
+    original.addLink(client.getObjectFactory().newDeepInsertEntity(
+            "Info", getSampleCustomerInfo(id, "Sample Customer_Info")));
 
     createEntity(getServiceRoot(), format, original, "Customer");
     final ODataEntity actual =
@@ -224,7 +224,7 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
   @Test
   public void createReturnNoContent() {
     final int id = 1;
-    final ODataEntity original = (ODataEntity) getSampleCustomerProfile(id, "Sample customer", false);
+    final ODataEntity original = getSampleCustomerProfile(id, "Sample customer", false);
 
     final ODataEntityCreateRequest<ODataEntity> createReq = client.getCUDRequestFactory().getEntityCreateRequest(
             client.getURIBuilder(getServiceRoot()).appendEntitySetSegment("Customer").build(), original);
@@ -251,7 +251,7 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
   @Test
   public void issue135() {
     final int id = 2;
-    final ODataEntity original = (ODataEntity) getSampleCustomerProfile(id, "Sample customer for issue 135", false);
+    final ODataEntity original = getSampleCustomerProfile(id, "Sample customer for issue 135", false);
 
     final URIBuilder uriBuilder = client.getURIBuilder(getServiceRoot()).appendEntitySetSegment("Customer");
     final ODataEntityCreateRequest<ODataEntity> createReq =
@@ -278,7 +278,7 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
           throws EdmPrimitiveTypeException {
 
     final String sampleName = "Sample customer";
-    final ODataEntity original = (ODataEntity) getSampleCustomerProfile(id, sampleName, false);
+    final ODataEntity original = getSampleCustomerProfile(id, sampleName, false);
 
     final Set<Integer> keys = new HashSet<Integer>();
     keys.add(-100);
@@ -288,12 +288,10 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
       final ODataEntity order = client.getObjectFactory().
               newEntity(new FullQualifiedName("Microsoft.Test.OData.Services.AstoriaDefaultService.Order"));
 
-      getClient().getBinder().add(order,
-              client.getObjectFactory().newPrimitiveProperty("OrderId",
-                      client.getObjectFactory().newPrimitiveValueBuilder().buildInt32(key)));
-      getClient().getBinder().add(order,
-              client.getObjectFactory().newPrimitiveProperty("CustomerId",
-                      client.getObjectFactory().newPrimitiveValueBuilder().buildInt32(id)));
+      order.getProperties().add(client.getObjectFactory().newPrimitiveProperty("OrderId",
+              client.getObjectFactory().newPrimitiveValueBuilder().buildInt32(key)));
+      order.getProperties().add(client.getObjectFactory().newPrimitiveProperty("CustomerId",
+              client.getObjectFactory().newPrimitiveValueBuilder().buildInt32(id)));
 
       final ODataEntityCreateRequest<ODataEntity> createReq = client.getCUDRequestFactory().getEntityCreateRequest(
               client.getURIBuilder(getServiceRoot()).appendEntitySetSegment("Order").build(), order);
@@ -304,9 +302,9 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
               createReq.execute().getBody().getEditLink()));
     }
 
-    final ODataEntity created = (ODataEntity) createEntity(getServiceRoot(), format, original, "Customer");
+    final ODataEntity created = createEntity(getServiceRoot(), format, original, "Customer");
     // now, compare the created one with the actual one and go deeply into the associated customer info.....
-    final ODataEntity actual = (ODataEntity) compareEntities(getServiceRoot(), format, created, id, null);
+    final ODataEntity actual = compareEntities(getServiceRoot(), format, created, id, null);
 
     final URIBuilder uriBuilder = client.getURIBuilder(getServiceRoot());
     uriBuilder.appendEntitySetSegment("Customer").appendKeySegment(id).appendEntitySetSegment("Orders");
@@ -381,8 +379,8 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
 
     final String sampleName = "Sample customer";
 
-    ODataEntity customer = (ODataEntity) getSampleCustomerProfile(id, sampleName, false);
-    customer = (ODataEntity) createEntity(getServiceRoot(), format, customer, "Customer");
+    ODataEntity customer = getSampleCustomerProfile(id, sampleName, false);
+    customer = createEntity(getServiceRoot(), format, customer, "Customer");
 
     ODataEntity order = client.getObjectFactory().newEntity(new FullQualifiedName(
             "Microsoft.Test.OData.Services.AstoriaDefaultService.Order"));
@@ -396,9 +394,9 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
     order.addLink(client.getObjectFactory().newEntityNavigationLink(
             "Customer", URIUtils.getURI(getServiceRoot(), customer.getEditLink().toASCIIString())));
 
-    order = (ODataEntity) createEntity(getServiceRoot(), format, order, "Order");
+    order = createEntity(getServiceRoot(), format, order, "Order");
 
-    ODataEntity changes = client.getObjectFactory().newEntity(new FullQualifiedName(
+    final ODataEntity changes = client.getObjectFactory().newEntity(new FullQualifiedName(
             "Microsoft.Test.OData.Services.AstoriaDefaultService.Customer"));
     changes.setEditLink(customer.getEditLink());
     changes.addLink(client.getObjectFactory().newEntitySetNavigationLink(

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/LinkTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/LinkTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/LinkTestITCase.java
index 17e66a2..a1476a5 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/LinkTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/LinkTestITCase.java
@@ -36,7 +36,6 @@ import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse
 import org.apache.olingo.commons.api.domain.ODataLink;
 import org.apache.olingo.client.api.domain.v3.ODataLinkCollection;
 import org.apache.olingo.commons.api.format.ODataFormat;
-import org.apache.olingo.client.api.uri.CommonURIBuilder;
 import org.apache.olingo.client.api.uri.v3.URIBuilder;
 import org.junit.Test;
 
@@ -50,7 +49,7 @@ public class LinkTestITCase extends AbstractTestITCase {
   }
 
   private ODataLinkCollection doRetrieveLinkURIs(final ODataFormat format, final String linkname) throws IOException {
-    final CommonURIBuilder<?> uriBuilder = client.getURIBuilder(getServiceRoot()).
+    final URIBuilder uriBuilder = client.getURIBuilder(getServiceRoot()).
             appendEntitySetSegment("Customer").appendKeySegment(-10);
 
     final ODataLinkCollectionRequest req =
@@ -94,9 +93,9 @@ public class LinkTestITCase extends AbstractTestITCase {
 
     // 2. create new link
     final ODataLink newLink = client.getObjectFactory().
-            newAssociationLink(null, URI.create(getServiceRoot() + "/Login('3')"));
+            newAssociationLink(URI.create(getServiceRoot() + "/Login('3')"));
 
-    final CommonURIBuilder<?> uriBuilder = client.getURIBuilder(getServiceRoot()).
+    final URIBuilder uriBuilder = client.getURIBuilder(getServiceRoot()).
             appendEntitySetSegment("Customer").appendKeySegment(-10).appendLinksSegment("Logins");
 
     final ODataLinkCreateRequest req =
@@ -133,8 +132,8 @@ public class LinkTestITCase extends AbstractTestITCase {
     final URI before = doRetrieveLinkURIs(format, "Info").getLinks().get(0);
 
     // 2. update the link
-    ODataLink newLink =
-            client.getObjectFactory().newAssociationLink(null, URI.create(getServiceRoot() + "/CustomerInfo(12)"));
+    ODataLink newLink = client.getObjectFactory().
+            newAssociationLink(URI.create(getServiceRoot() + "/CustomerInfo(12)"));
 
     final URIBuilder uriBuilder = client.getURIBuilder(getServiceRoot());
     uriBuilder.appendEntitySetSegment("Customer").appendKeySegment(-10).appendLinksSegment("Info");
@@ -151,7 +150,7 @@ public class LinkTestITCase extends AbstractTestITCase {
     assertEquals(newLink.getLink(), after);
 
     // 3. reset back the link value
-    newLink = client.getObjectFactory().newAssociationLink(null, before);
+    newLink = client.getObjectFactory().newAssociationLink(before);
     req = client.getCUDRequestFactory().getLinkUpdateRequest(uriBuilder.build(), updateType, newLink);
     req.setFormat(format);
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/MediaEntityTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/MediaEntityTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/MediaEntityTestITCase.java
index 03bdf00..133e950 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/MediaEntityTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/MediaEntityTestITCase.java
@@ -18,9 +18,6 @@
  */
 package org.apache.olingo.client.core.it.v3;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 import org.apache.commons.io.IOUtils;
@@ -36,18 +33,23 @@ import org.apache.olingo.client.api.communication.response.ODataMediaEntityCreat
 import org.apache.olingo.client.api.communication.response.ODataMediaEntityUpdateResponse;
 import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
 import org.apache.olingo.client.api.communication.response.ODataStreamUpdateResponse;
-import org.apache.olingo.commons.api.domain.CommonODataEntity;
-import org.apache.olingo.commons.api.domain.CommonODataProperty;
+import org.apache.olingo.client.api.uri.v3.URIBuilder;
+import org.apache.olingo.commons.api.domain.v3.ODataEntity;
+import org.apache.olingo.commons.api.domain.v3.ODataProperty;
 import org.apache.olingo.commons.api.format.ODataMediaFormat;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
-import org.apache.olingo.client.api.uri.CommonURIBuilder;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNotNull;
+
 import org.junit.Test;
 
 public class MediaEntityTestITCase extends AbstractTestITCase {
 
   @Test
   public void read() throws Exception {
-    final CommonURIBuilder<?> builder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Car").appendKeySegment(12).appendValueSegment();
 
     final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaRequest(builder.build());
@@ -62,7 +64,7 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
 
   @Test(expected = ODataClientErrorException.class)
   public void readWithXmlError() throws Exception {
-    final CommonURIBuilder<?> builder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Car").appendKeySegment(12).appendValueSegment();
 
     final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaRequest(builder.build());
@@ -73,7 +75,7 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
 
   @Test(expected = ODataClientErrorException.class)
   public void readWithJsonError() throws Exception {
-    final CommonURIBuilder<?> builder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Car").appendKeySegment(12).appendValueSegment();
 
     final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaRequest(builder.build());
@@ -109,7 +111,7 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
 
   @Test
   public void updateNamedStream() throws Exception {
-    CommonURIBuilder<?> builder = client.getURIBuilder(testStaticServiceRootURL).
+    URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Car").appendKeySegment(16).appendNavigationSegment("Photo");
 
     final String TO_BE_UPDATED = "buffered stream sample";
@@ -131,18 +133,18 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
   }
 
   private void updateMediaEntity(final ODataPubFormat format, final int id) throws Exception {
-    CommonURIBuilder<?> builder = client.getURIBuilder(testStaticServiceRootURL).
+    URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Car").appendKeySegment(id).appendValueSegment();
 
     final String TO_BE_UPDATED = "new buffered stream sample";
     final InputStream input = IOUtils.toInputStream(TO_BE_UPDATED);
 
-    final ODataMediaEntityUpdateRequest updateReq =
+    final ODataMediaEntityUpdateRequest<ODataEntity> updateReq =
             client.getStreamedRequestFactory().getMediaEntityUpdateRequest(builder.build(), input);
     updateReq.setFormat(format);
 
-    final MediaEntityUpdateStreamManager streamManager = updateReq.execute();
-    final ODataMediaEntityUpdateResponse updateRes = streamManager.getResponse();
+    final MediaEntityUpdateStreamManager<ODataEntity> streamManager = updateReq.execute();
+    final ODataMediaEntityUpdateResponse<ODataEntity> updateRes = streamManager.getResponse();
     assertEquals(204, updateRes.getStatusCode());
 
     final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaRequest(builder.build());
@@ -153,23 +155,23 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
   }
 
   private void createMediaEntity(final ODataPubFormat format, final InputStream input) throws Exception {
-    final CommonURIBuilder<?> builder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Car");
 
-    final ODataMediaEntityCreateRequest createReq =
+    final ODataMediaEntityCreateRequest<ODataEntity> createReq =
             client.getStreamedRequestFactory().getMediaEntityCreateRequest(builder.build(), input);
     createReq.setFormat(format);
 
-    final MediaEntityCreateStreamManager streamManager = createReq.execute();
-    final ODataMediaEntityCreateResponse createRes = streamManager.getResponse();
+    final MediaEntityCreateStreamManager<ODataEntity> streamManager = createReq.execute();
+    final ODataMediaEntityCreateResponse<ODataEntity> createRes = streamManager.getResponse();
     assertEquals(201, createRes.getStatusCode());
 
-    final CommonODataEntity created = createRes.getBody();
+    final ODataEntity created = createRes.getBody();
     assertNotNull(created);
     assertEquals(2, created.getProperties().size());
 
     Integer id = null;
-    for (CommonODataProperty prop : created.getProperties()) {
+    for (ODataProperty prop : created.getProperties()) {
       if ("VIN".equals(prop.getName())) {
         id = prop.getPrimitiveValue().toCastValue(Integer.class);
       }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/BatchTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/BatchTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/BatchTestITCase.java
index d9465a5..b1d2194 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/BatchTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/BatchTestITCase.java
@@ -159,7 +159,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     final ODataChangeset changeset = streamManager.addChangeset();
     ODataEntity order = newOrder(20);
 
-    URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Orders");
+    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Orders");
 
     // add create request
     final ODataEntityCreateRequest<ODataEntity> createReq =
@@ -176,13 +176,13 @@ public class BatchTestITCase extends AbstractTestITCase {
             "OrderDetails",
             client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("OrderDetails").
             appendKeySegment(new HashMap<String, Object>() {
-      private static final long serialVersionUID = 3109256773218160485L;
+              private static final long serialVersionUID = 3109256773218160485L;
 
-      {
-        put("OrderID", 7);
-        put("ProductID", 5);
-      }
-    }).build()));
+              {
+                put("OrderID", 7);
+                put("ProductID", 5);
+              }
+            }).build()));
 
     final ODataEntityUpdateRequest<ODataEntity> updateReq = client.getCUDRequestFactory().getEntityUpdateRequest(
             URI.create("$" + createRequestRef), UpdateType.PATCH, customerChanges);
@@ -206,7 +206,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     assertTrue(res instanceof ODataEntityCreateResponse);
 
     order = ((ODataEntityCreateResponse<ODataEntity>) res).getBody();
-    ODataEntitySetRequest<ODataEntitySet> req = client.getRetrieveRequestFactory().getEntitySetRequest(
+    final ODataEntitySetRequest<ODataEntitySet> req = client.getRetrieveRequestFactory().getEntitySetRequest(
             URIUtils.getURI(testStaticServiceRootURL, order.getEditLink().toASCIIString() + "/OrderDetails"));
 
     assertEquals(Integer.valueOf(7),
@@ -274,7 +274,7 @@ public class BatchTestITCase extends AbstractTestITCase {
             "LastName",
             client.getObjectFactory().newPrimitiveValueBuilder().buildString("new last name")));
 
-    final ODataEntityUpdateRequest changeReq =
+    final ODataEntityUpdateRequest<ODataEntity> changeReq =
             client.getCUDRequestFactory().getEntityUpdateRequest(UpdateType.PATCH, patch);
     changeReq.setFormat(ODataPubFormat.JSON_FULL_METADATA);
 
@@ -295,8 +295,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     retrieve = streamManager.addRetrieve();
 
     // prepare URI
-    targetURI = client.getURIBuilder(testStaticServiceRootURL).
-            appendEntitySetSegment("Customers").appendKeySegment(1);
+    targetURI = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customers").appendKeySegment(1);
 
     // create new request
     queryReq = client.getRetrieveRequestFactory().getEntityRequest(targetURI.build());
@@ -309,7 +308,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     assertEquals("OK", response.getStatusMessage());
     final Iterator<ODataBatchResponseItem> iter = response.getBody();
 
-    // retrive the first item (ODataRetrieve)
+    // retrieve the first item (ODataRetrieve)
     ODataBatchResponseItem item = iter.next();
     assertTrue(item instanceof ODataRetrieveResponseItem);
 
@@ -368,13 +367,13 @@ public class BatchTestITCase extends AbstractTestITCase {
       super(new Wrapper<Future<HttpResponse>>());
     }
 
-    public ODataStreamManager<ODataBatchResponse> addObject(byte[] src) {
+    public ODataStreamManager<ODataBatchResponse> addObject(final byte[] src) {
       stream(src);
       return this;
     }
 
     @Override
-    protected ODataBatchResponse getResponse(long timeout, TimeUnit unit) {
+    protected ODataBatchResponse getResponse(final long timeout, final TimeUnit unit) {
       throw new UnsupportedOperationException("Not supported yet.");
     }
   };
@@ -387,6 +386,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     private final TestStreamManager streaming;
 
     public StreamingThread(final TestStreamManager streaming) {
+      super();
       this.streaming = streaming;
     }
 
@@ -422,6 +422,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     private final BatchStreamManager streaming;
 
     public BatchStreamingThread(final BatchStreamManager streaming) {
+      super();
       this.streaming = streaming;
     }
 
@@ -430,7 +431,7 @@ public class BatchTestITCase extends AbstractTestITCase {
       try {
         final StringBuilder builder = new StringBuilder();
 
-        byte[] buff = new byte[1024];
+        final byte[] buff = new byte[1024];
 
         int len;
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityCreateTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityCreateTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityCreateTestITCase.java
index 9385daa..6a736c6 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityCreateTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityCreateTestITCase.java
@@ -32,10 +32,13 @@ import org.apache.olingo.client.api.communication.request.cud.ODataEntityCreateR
 import org.apache.olingo.client.api.communication.response.ODataDeleteResponse;
 import org.apache.olingo.client.api.communication.response.ODataEntityCreateResponse;
 import org.apache.olingo.commons.api.domain.ODataCollectionValue;
+import org.apache.olingo.commons.api.domain.ODataInlineEntitySet;
+import org.apache.olingo.commons.api.domain.ODataLink;
 import org.apache.olingo.commons.api.domain.v4.ODataEntity;
 import org.apache.olingo.commons.api.domain.v4.ODataEntitySet;
 import org.apache.olingo.commons.api.domain.v4.ODataProperty;
 import org.apache.olingo.commons.api.domain.v4.ODataValue;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
@@ -167,4 +170,83 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
   public void jsonOnContained() {
     onContained(ODataPubFormat.JSON);
   }
+
+  private void deepInsert(final ODataPubFormat format) throws EdmPrimitiveTypeException {
+    final int productId = RandomUtils.nextInt(10, 20);
+    final ODataEntity product = getClient().getObjectFactory().
+            newEntity(new FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.Product"));
+    product.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("ProductID",
+            getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(productId)));
+    product.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("Name",
+            getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("Latte")));
+    product.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("QuantityPerUnit",
+            getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("100g Bag")));
+    product.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("UnitPrice",
+            getClient().getObjectFactory().newPrimitiveValueBuilder().buildSingle(3.24f)));
+    product.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("QuantityInStock",
+            getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(100)));
+    product.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("Discontinued",
+            getClient().getObjectFactory().newPrimitiveValueBuilder().buildBoolean(false)));
+    product.getProperties().add(getClient().getObjectFactory().newEnumProperty("UserAccess",
+            getClient().getObjectFactory().
+            newEnumValue("Microsoft.Test.OData.Services.ODataWCFService.AccessLevel", "Execute")));
+    product.getProperties().add(getClient().getObjectFactory().newEnumProperty("SkinColor",
+            getClient().getObjectFactory().
+            newEnumValue("Microsoft.Test.OData.Services.ODataWCFService.Color", "Blue")));
+    product.getProperties().add(getClient().getObjectFactory().newCollectionProperty("CoverColors",
+            getClient().getObjectFactory().
+            newCollectionValue("Collection(Microsoft.Test.OData.Services.ODataWCFService.ProductDetail)")));
+    product.getProperty("CoverColors").getCollectionValue().add(getClient().getObjectFactory().
+            newEnumValue("Microsoft.Test.OData.Services.ODataWCFService.Color", "Green"));
+    product.getProperty("CoverColors").getCollectionValue().add(getClient().getObjectFactory().
+            newEnumValue("Microsoft.Test.OData.Services.ODataWCFService.Color", "Red"));
+
+    final int productDetailId = RandomUtils.nextInt(10, 20);
+    final ODataEntity detail = getClient().getObjectFactory().
+            newEntity(new FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.ProductDetail"));
+    detail.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("ProductID",
+            getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(productId)));
+    detail.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("ProductDetailID",
+            getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(productDetailId)));
+    detail.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("ProductName",
+            getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("LatteHQ")));
+    detail.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("Description",
+            getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("High-Quality Milk")));
+
+    final ODataEntitySet details = getClient().getObjectFactory().newEntitySet();
+    details.getEntities().add(detail);
+
+    final ODataInlineEntitySet inlineDetails = getClient().getObjectFactory().
+            newDeepInsertEntitySet("Details", details);
+    product.addLink(inlineDetails);
+
+    final ODataEntityCreateRequest<ODataEntity> req = getClient().getCUDRequestFactory().getEntityCreateRequest(
+            getClient().getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Products").build(), product);
+    req.setFormat(format);
+    final ODataEntityCreateResponse<ODataEntity> res = req.execute();
+    assertEquals(201, res.getStatusCode());
+
+    final ODataEntity createdProduct = res.getBody();
+    assertEquals(productId,
+            createdProduct.getProperty("ProductID").getPrimitiveValue().toCastValue(Integer.class), 0);
+
+    final ODataLink createdLink = createdProduct.getNavigationLink("Details");
+    assertNotNull(createdLink);
+
+    final ODataEntitySet createdProductDetails =
+            getClient().getRetrieveRequestFactory().getEntitySetRequest(createdLink.getLink()).execute().getBody();
+    assertNotNull(createdProductDetails);
+    assertEquals(productDetailId, createdProductDetails.getEntities().iterator().next().
+            getProperty("ProductDetailID").getPrimitiveValue().toCastValue(Integer.class), 0);
+  }
+
+  @Test
+  public void atomDeepInsert() throws EdmPrimitiveTypeException {
+    deepInsert(ODataPubFormat.ATOM);
+  }
+
+  @Test
+  public void jsonDeepInsert() throws EdmPrimitiveTypeException {
+    deepInsert(ODataPubFormat.JSON_FULL_METADATA);
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityUpdateTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityUpdateTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityUpdateTestITCase.java
index e1e6331..36a9e65 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityUpdateTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityUpdateTestITCase.java
@@ -18,19 +18,21 @@
  */
 package org.apache.olingo.client.core.it.v4;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-
 import java.net.URI;
 import java.util.Calendar;
 import java.util.UUID;
 import org.apache.olingo.client.api.communication.request.cud.ODataEntityUpdateRequest;
 import org.apache.olingo.client.api.communication.request.cud.v4.UpdateType;
 import org.apache.olingo.client.api.communication.response.ODataEntityUpdateResponse;
+import org.apache.olingo.commons.api.domain.ODataLink;
 import org.apache.olingo.commons.api.domain.v4.ODataEntity;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
 import org.junit.Test;
 
 public class EntityUpdateTestITCase extends AbstractTestITCase {
@@ -112,4 +114,41 @@ public class EntityUpdateTestITCase extends AbstractTestITCase {
     onContained(ODataPubFormat.JSON);
   }
 
+  private void bindOperation(final ODataPubFormat format) throws EdmPrimitiveTypeException {
+    final ODataEntity changes = getClient().getObjectFactory().newEntity(
+            new FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.Customer"));
+    final ODataLink parent = getClient().getObjectFactory().newEntityNavigationLink("Parent",
+            getClient().getURIBuilder(testStaticServiceRootURL).
+            appendEntitySetSegment("People").appendKeySegment(1).build());
+    changes.getNavigationLinks().add(parent);
+
+    final URI uri = getClient().getURIBuilder(testStaticServiceRootURL).
+            appendEntitySetSegment("People").appendKeySegment(5).build();
+    final ODataEntityUpdateRequest<ODataEntity> req = getClient().getCUDRequestFactory().
+            getEntityUpdateRequest(uri, UpdateType.PATCH, changes);
+    req.setFormat(format);
+
+    final ODataEntityUpdateResponse<ODataEntity> res = req.execute();
+    assertEquals(204, res.getStatusCode());
+
+    final ODataEntity updated = getClient().getRetrieveRequestFactory().getEntityRequest(uri).execute().getBody();
+    assertNotNull(updated);
+    final ODataLink updatedLink = updated.getNavigationLink("Parent");
+    assertNotNull(updatedLink);
+
+    final ODataEntity updatedEntity = getClient().getRetrieveRequestFactory().getEntityRequest(updatedLink.getLink()).
+            execute().getBody();
+    assertNotNull(updatedEntity);
+    assertEquals(1, updatedEntity.getProperty("PersonID").getPrimitiveValue().toCastValue(Integer.class), 0);
+  }
+
+  @Test
+  public void atomBindOperation() throws EdmPrimitiveTypeException {
+    bindOperation(ODataPubFormat.ATOM);
+  }
+
+  @Test
+  public void jsonBindOperation() throws EdmPrimitiveTypeException {
+    bindOperation(ODataPubFormat.JSON);
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/CommonODataObjectFactory.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/CommonODataObjectFactory.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/CommonODataObjectFactory.java
index b3945bf..eead623 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/CommonODataObjectFactory.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/CommonODataObjectFactory.java
@@ -59,65 +59,22 @@ public interface CommonODataObjectFactory {
   CommonODataEntity newEntity(FullQualifiedName typeName, URI link);
 
   /**
-   * Instantiates a new in-line entity set.
+   * Instantiates a new entity set (for deep insert).
    *
    * @param name name.
-   * @param link edit link.
    * @param entitySet entity set.
    * @return in-line entity set.
    */
-  ODataInlineEntitySet newInlineEntitySet(String name, URI link, CommonODataEntitySet entitySet);
+  ODataInlineEntitySet newDeepInsertEntitySet(String name, CommonODataEntitySet entitySet);
 
   /**
-   * Instantiates a new in-line entity set.
+   * Instantiates a new entity (for deep insert).
    *
    * @param name name.
-   * @param baseURI base URI.
-   * @param href href.
-   * @param entitySet entity set.
-   * @return in-line entity set.
-   */
-  ODataInlineEntitySet newInlineEntitySet(String name, URI baseURI, String href, CommonODataEntitySet entitySet);
-
-  /**
-   * Instantiates a new in-line entity.
-   *
-   * @param name name.
-   * @param link edit link.
-   * @param entity entity.
-   * @return in-line entity.
-   */
-  ODataInlineEntity newInlineEntity(String name, URI link, CommonODataEntity entity);
-
-  /**
-   * Instantiates a new in-line entity.
-   *
-   * @param name name.
-   * @param baseURI base URI.
-   * @param href href.
    * @param entity entity.
    * @return in-line entity.
    */
-  ODataInlineEntity newInlineEntity(String name, URI baseURI, String href, CommonODataEntity entity);
-
-  /**
-   * Instantiates a new entity navigation link.
-   *
-   * @param name name.
-   * @param link link.
-   * @return entity navigation link.
-   */
-  ODataLink newEntityNavigationLink(String name, URI link);
-
-  /**
-   * Instantiates a new entity navigation link.
-   *
-   * @param name name.
-   * @param baseURI base URI.
-   * @param href href.
-   * @return entity navigation link.
-   */
-  ODataLink newEntityNavigationLink(String name, URI baseURI, String href);
+  ODataInlineEntity newDeepInsertEntity(String name, CommonODataEntity entity);
 
   /**
    * Instantiates a new entity set navigation link.
@@ -129,52 +86,13 @@ public interface CommonODataObjectFactory {
   ODataLink newEntitySetNavigationLink(String name, URI link);
 
   /**
-   * Instantiates a new entity set navigation link.
-   *
-   * @param name name.
-   * @param baseURI base URI.
-   * @param href href.
-   * @return entity set navigation link.
-   */
-  ODataLink newEntitySetNavigationLink(String name, URI baseURI, String href);
-
-  /**
-   * Instantiates a new association link.
-   *
-   * @param name name.
-   * @param link link.
-   * @return association link.
-   */
-  ODataLink newAssociationLink(String name, URI link);
-
-  /**
-   * Instantiates a new association link.
-   *
-   * @param name name.
-   * @param baseURI base URI.
-   * @param href href.
-   * @return association link.
-   */
-  ODataLink newAssociationLink(String name, URI baseURI, String href);
-
-  /**
-   * Instantiates a new media-edit link.
+   * Instantiates a new entity navigation link.
    *
    * @param name name.
    * @param link link.
-   * @return media-edit link.
-   */
-  ODataLink newMediaEditLink(String name, URI link);
-
-  /**
-   * Instantiates a new media-edit link.
-   *
-   * @param name name.
-   * @param baseURI base URI.
-   * @param href href.
-   * @return media-edit link.
+   * @return entity navigation link.
    */
-  ODataLink newMediaEditLink(String name, URI baseURI, String href);
+  ODataLink newEntityNavigationLink(String name, URI link);
 
   ODataPrimitiveValue.Builder newPrimitiveValueBuilder();
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v3/ODataObjectFactory.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v3/ODataObjectFactory.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v3/ODataObjectFactory.java
index 28b4c9e..096e8e9 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v3/ODataObjectFactory.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/v3/ODataObjectFactory.java
@@ -23,6 +23,7 @@ import org.apache.olingo.commons.api.domain.CommonODataObjectFactory;
 import org.apache.olingo.commons.api.domain.CommonODataProperty;
 import org.apache.olingo.commons.api.domain.ODataCollectionValue;
 import org.apache.olingo.commons.api.domain.ODataComplexValue;
+import org.apache.olingo.commons.api.domain.ODataLink;
 import org.apache.olingo.commons.api.domain.ODataPrimitiveValue;
 import org.apache.olingo.commons.api.domain.ODataValue;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
@@ -41,6 +42,14 @@ public interface ODataObjectFactory extends CommonODataObjectFactory {
   @Override
   ODataEntity newEntity(FullQualifiedName typeName, URI link);
 
+  /**
+   * Instantiates a new association link.
+   *
+   * @param link link.
+   * @return association link.
+   */
+  ODataLink newAssociationLink(URI link);
+
   @Override
   ODataComplexValue<ODataProperty> newComplexValue(String typeName);
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractJsonSerializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractJsonSerializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractJsonSerializer.java
index 2fa89d4..362552f 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractJsonSerializer.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/AbstractJsonSerializer.java
@@ -77,7 +77,9 @@ abstract class AbstractJsonSerializer<T> extends ODataJacksonSerializer<T> {
           uris = new ArrayList<String>();
           entitySetLinks.put(link.getTitle(), uris);
         }
-        uris.add(link.getHref());
+        if (StringUtils.isNotBlank(link.getHref())) {
+          uris.add(link.getHref());
+        }
       } else {
         if (StringUtils.isNotBlank(link.getHref())) {
           jgen.writeStringField(link.getTitle() + Constants.JSON_BIND_LINK_SUFFIX, link.getHref());
@@ -95,11 +97,13 @@ abstract class AbstractJsonSerializer<T> extends ODataJacksonSerializer<T> {
       }
     }
     for (Map.Entry<String, List<String>> entitySetLink : entitySetLinks.entrySet()) {
-      jgen.writeArrayFieldStart(entitySetLink.getKey() + Constants.JSON_BIND_LINK_SUFFIX);
-      for (String uri : entitySetLink.getValue()) {
-        jgen.writeString(uri);
+      if (!entitySetLink.getValue().isEmpty()) {
+        jgen.writeArrayFieldStart(entitySetLink.getKey() + Constants.JSON_BIND_LINK_SUFFIX);
+        for (String uri : entitySetLink.getValue()) {
+          jgen.writeString(uri);
+        }
+        jgen.writeEndArray();
       }
-      jgen.writeEndArray();
     }
   }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/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 e953948..65cb6b2 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
@@ -445,6 +445,14 @@ public class AtomSerializer extends AbstractAtomDealer {
           final XMLStreamWriter writer, final Container<T> container) throws XMLStreamException {
 
     if (container.getContextURL() != null) {
+      final String base = StringUtils.substringBefore(container.getContextURL().toASCIIString(), Constants.METADATA);
+      if (container.getObject() instanceof AtomFeedImpl) {
+        ((AtomFeedImpl) container.getObject()).setBaseURI(base);
+      }
+      if (container.getObject() instanceof AtomEntryImpl) {
+        ((AtomEntryImpl) container.getObject()).setBaseURI(base);
+      }
+
       writer.writeAttribute(
               version.getNamespaceMap().get(ODataServiceVersion.NS_METADATA),
               Constants.CONTEXT,

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntryDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntryDeserializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntryDeserializer.java
index 5730ee9..3493648 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntryDeserializer.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntryDeserializer.java
@@ -30,6 +30,7 @@ import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.olingo.commons.api.Constants;
 import org.apache.olingo.commons.api.data.Container;
 import org.apache.olingo.commons.api.data.Link;
@@ -55,17 +56,9 @@ public class JSONEntryDeserializer extends AbstractJsonDeserializer<JSONEntryImp
       throw new JsonParseException("Expected OData Entity, found EntitySet", parser.getCurrentLocation());
     }
 
-    final String metadataETag;
-    final URI contextURL;
     final JSONEntryImpl entry = new JSONEntryImpl();
 
-    if (tree.hasNonNull(Constants.JSON_METADATA_ETAG)) {
-      metadataETag = tree.get(Constants.JSON_METADATA_ETAG).textValue();
-      tree.remove(Constants.JSON_METADATA_ETAG);
-    } else {
-      metadataETag = null;
-    }
-
+    final URI contextURL;
     if (tree.hasNonNull(Constants.JSON_CONTEXT)) {
       contextURL = URI.create(tree.get(Constants.JSON_CONTEXT).textValue());
       tree.remove(Constants.JSON_CONTEXT);
@@ -75,10 +68,16 @@ public class JSONEntryDeserializer extends AbstractJsonDeserializer<JSONEntryImp
     } else {
       contextURL = null;
     }
-
     if (contextURL != null) {
-      String url = contextURL.toASCIIString();
-      entry.setBaseURI(url.substring(0, url.indexOf(Constants.METADATA)));
+      entry.setBaseURI(StringUtils.substringBefore(contextURL.toASCIIString(), Constants.METADATA));
+    }
+
+    final String metadataETag;
+    if (tree.hasNonNull(Constants.JSON_METADATA_ETAG)) {
+      metadataETag = tree.get(Constants.JSON_METADATA_ETAG).textValue();
+      tree.remove(Constants.JSON_METADATA_ETAG);
+    } else {
+      metadataETag = null;
     }
 
     if (tree.hasNonNull(jsonETag)) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntrySerializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntrySerializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntrySerializer.java
index bdfa439..d12bdad 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntrySerializer.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONEntrySerializer.java
@@ -58,8 +58,15 @@ public class JSONEntrySerializer extends AbstractJsonSerializer<JSONEntryImpl> {
     }
 
     if (serverMode) {
-      if (version.compareTo(ODataServiceVersion.V40) >= 0 && StringUtils.isNotBlank(container.getMetadataETag())) {
-        jgen.writeStringField(Constants.JSON_METADATA_ETAG, container.getMetadataETag());
+      if (container.getContextURL() != null) {
+        jgen.writeStringField(version.compareTo(ODataServiceVersion.V40) >= 0
+                ? Constants.JSON_CONTEXT : Constants.JSON_METADATA,
+                container.getContextURL().toASCIIString());
+      }
+      if (version.compareTo(ODataServiceVersion.V40) >= 0) {
+        if (StringUtils.isNotBlank(container.getMetadataETag())) {
+          jgen.writeStringField(Constants.JSON_METADATA_ETAG, container.getMetadataETag());
+        }
       }
 
       if (StringUtils.isNotBlank(entry.getETag())) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONFeedDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONFeedDeserializer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONFeedDeserializer.java
index 3c180b9..238e56b 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONFeedDeserializer.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/data/JSONFeedDeserializer.java
@@ -47,17 +47,9 @@ public class JSONFeedDeserializer extends AbstractJsonDeserializer<JSONFeedImpl>
       return null;
     }
 
-    final String metadataETag;
-    final URI contextURL;
     final JSONFeedImpl feed = new JSONFeedImpl();
 
-    if (tree.hasNonNull(Constants.JSON_METADATA_ETAG)) {
-      metadataETag = tree.get(Constants.JSON_METADATA_ETAG).textValue();
-      tree.remove(Constants.JSON_METADATA_ETAG);
-    } else {
-      metadataETag = null;
-    }
-
+    final URI contextURL;
     if (tree.hasNonNull(Constants.JSON_CONTEXT)) {
       contextURL = URI.create(tree.get(Constants.JSON_CONTEXT).textValue());
       tree.remove(Constants.JSON_CONTEXT);
@@ -67,9 +59,16 @@ public class JSONFeedDeserializer extends AbstractJsonDeserializer<JSONFeedImpl>
     } else {
       contextURL = null;
     }
-
     feed.setMetadataContextURL(contextURL);
 
+    final String metadataETag;
+    if (tree.hasNonNull(Constants.JSON_METADATA_ETAG)) {
+      metadataETag = tree.get(Constants.JSON_METADATA_ETAG).textValue();
+      tree.remove(Constants.JSON_METADATA_ETAG);
+    } else {
+      metadataETag = null;
+    }
+
     if (tree.hasNonNull(Constants.JSON_COUNT)) {
       feed.setCount(tree.get(Constants.JSON_COUNT).asInt());
     }
@@ -81,8 +80,8 @@ public class JSONFeedDeserializer extends AbstractJsonDeserializer<JSONFeedImpl>
       for (final Iterator<JsonNode> itor = tree.get(Constants.VALUE).iterator(); itor.hasNext();) {
         feed.getEntries().add(
                 itor.next().traverse(parser.getCodec()).<Container<JSONEntryImpl>>readValueAs(
-                new TypeReference<JSONEntryImpl>() {
-        }).getObject());
+                        new TypeReference<JSONEntryImpl>() {
+                        }).getObject());
       }
     }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/AbstractODataObjectFactory.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/AbstractODataObjectFactory.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/AbstractODataObjectFactory.java
index 43853fa..0e438c5 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/AbstractODataObjectFactory.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/AbstractODataObjectFactory.java
@@ -39,29 +39,13 @@ public abstract class AbstractODataObjectFactory implements CommonODataObjectFac
   }
 
   @Override
-  public ODataInlineEntitySet newInlineEntitySet(final String name, final URI link,
-          final CommonODataEntitySet entitySet) {
-
-    return new ODataInlineEntitySet(version, link, ODataLinkType.ENTITY_SET_NAVIGATION, name, entitySet);
-  }
-
-  @Override
-  public ODataInlineEntitySet newInlineEntitySet(final String name, final URI baseURI, final String href,
-          final CommonODataEntitySet entitySet) {
-
-    return new ODataInlineEntitySet(version, baseURI, href, ODataLinkType.ENTITY_SET_NAVIGATION, name, entitySet);
-  }
-
-  @Override
-  public ODataInlineEntity newInlineEntity(final String name, final URI link, final CommonODataEntity entity) {
-    return new ODataInlineEntity(version, link, ODataLinkType.ENTITY_NAVIGATION, name, entity);
+  public ODataInlineEntitySet newDeepInsertEntitySet(final String name, final CommonODataEntitySet entitySet) {
+    return new ODataInlineEntitySet(version, null, ODataLinkType.ENTITY_SET_NAVIGATION, name, entitySet);
   }
 
   @Override
-  public ODataInlineEntity newInlineEntity(final String name, final URI baseURI, final String href,
-          final CommonODataEntity entity) {
-
-    return new ODataInlineEntity(version, baseURI, href, ODataLinkType.ENTITY_NAVIGATION, name, entity);
+  public ODataInlineEntity newDeepInsertEntity(final String name, final CommonODataEntity entity) {
+    return new ODataInlineEntity(version, null, ODataLinkType.ENTITY_NAVIGATION, name, entity);
   }
 
   @Override
@@ -71,45 +55,8 @@ public abstract class AbstractODataObjectFactory implements CommonODataObjectFac
   }
 
   @Override
-  public ODataLink newEntityNavigationLink(final String name, final URI baseURI, final String href) {
-    return new ODataLink.Builder().setVersion(version).setURI(baseURI, href).
-            setType(ODataLinkType.ENTITY_NAVIGATION).setTitle(name).build();
-  }
-
-  @Override
   public ODataLink newEntitySetNavigationLink(final String name, final URI link) {
     return new ODataLink.Builder().setVersion(version).setURI(link).
             setType(ODataLinkType.ENTITY_SET_NAVIGATION).setTitle(name).build();
   }
-
-  @Override
-  public ODataLink newEntitySetNavigationLink(final String name, final URI baseURI, final String href) {
-    return new ODataLink.Builder().setVersion(version).setURI(baseURI, href).
-            setType(ODataLinkType.ENTITY_SET_NAVIGATION).setTitle(name).build();
-  }
-
-  @Override
-  public ODataLink newAssociationLink(final String name, final URI link) {
-    return new ODataLink.Builder().setVersion(version).setURI(link).
-            setType(ODataLinkType.ASSOCIATION).setTitle(name).build();
-  }
-
-  @Override
-  public ODataLink newAssociationLink(final String name, final URI baseURI, final String href) {
-    return new ODataLink.Builder().setVersion(version).setURI(baseURI, href).
-            setType(ODataLinkType.ASSOCIATION).setTitle(name).build();
-  }
-
-  @Override
-  public ODataLink newMediaEditLink(final String name, final URI link) {
-    return new ODataLink.Builder().setVersion(version).setURI(link).
-            setType(ODataLinkType.MEDIA_EDIT).setTitle(name).build();
-  }
-
-  @Override
-  public ODataLink newMediaEditLink(final String name, final URI baseURI, final String href) {
-    return new ODataLink.Builder().setVersion(version).setURI(baseURI, href).
-            setType(ODataLinkType.MEDIA_EDIT).setTitle(name).build();
-  }
-
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/3bb39def/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v3/ODataObjectFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v3/ODataObjectFactoryImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v3/ODataObjectFactoryImpl.java
index 1f41c59..f488ed9 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v3/ODataObjectFactoryImpl.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/v3/ODataObjectFactoryImpl.java
@@ -22,6 +22,8 @@ import java.net.URI;
 import org.apache.olingo.commons.api.domain.CommonODataProperty;
 import org.apache.olingo.commons.api.domain.ODataCollectionValue;
 import org.apache.olingo.commons.api.domain.ODataComplexValue;
+import org.apache.olingo.commons.api.domain.ODataLink;
+import org.apache.olingo.commons.api.domain.ODataLinkType;
 import org.apache.olingo.commons.api.domain.ODataPrimitiveValue;
 import org.apache.olingo.commons.api.domain.ODataValue;
 import org.apache.olingo.commons.api.domain.v3.ODataEntitySet;
@@ -61,6 +63,11 @@ public class ODataObjectFactoryImpl extends AbstractODataObjectFactory implement
   }
 
   @Override
+  public ODataLink newAssociationLink(final URI link) {
+    return new ODataLink.Builder().setVersion(version).setURI(link).setType(ODataLinkType.ASSOCIATION).build();
+  }
+
+  @Override
   public ODataPrimitiveValue.Builder newPrimitiveValueBuilder() {
     return new ODataPrimitiveValueImpl.BuilderImpl(version);
   }


[2/5] git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/olingo-odata4

Posted by il...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/olingo-odata4


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

Branch: refs/heads/master
Commit: 03e5462c07261f773899e7ae3cd3c6a27957b228
Parents: 7ee1e39 c953fca
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Wed Apr 16 13:13:18 2014 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Wed Apr 16 13:13:18 2014 +0200

----------------------------------------------------------------------
 .../org/apache/olingo/fit/AbstractServices.java | 172 +++++++++++++------
 .../org/apache/olingo/fit/V3KeyAsSegment.java   |  17 +-
 .../java/org/apache/olingo/fit/V3OpenType.java  |   9 +-
 .../java/org/apache/olingo/fit/V3Services.java  |   1 -
 .../java/org/apache/olingo/fit/V4OpenType.java  |  12 +-
 .../java/org/apache/olingo/fit/V4Services.java  |  22 ++-
 .../olingo/fit/utils/AbstractUtilities.java     |  27 ++-
 .../V30/CustomerInfo/17/entity.full.json        |  11 ++
 .../resources/V30/CustomerInfo/17/entity.xml    |  37 ++++
 .../client/core/it/v3/BatchTestITCase.java      |   7 +-
 10 files changed, 238 insertions(+), 77 deletions(-)
----------------------------------------------------------------------



[3/5] git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/olingo-odata4

Posted by il...@apache.org.
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/olingo-odata4


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

Branch: refs/heads/master
Commit: ef8c3a0531f5d57fea56e3da951c3746c2f00754
Parents: 03e5462 7276a70
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Thu Apr 17 10:42:29 2014 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Thu Apr 17 10:42:29 2014 +0200

----------------------------------------------------------------------
 .../org/apache/olingo/fit/AbstractServices.java | 163 ++++---
 .../olingo/fit/utils/AbstractJSONUtilities.java |  15 -
 .../olingo/fit/utils/AbstractUtilities.java     |  29 +-
 .../olingo/fit/utils/AbstractXMLUtilities.java  | 133 ------
 .../org/apache/olingo/fit/utils/Commons.java    |   1 +
 .../org/apache/olingo/fit/utils/DataBinder.java |   8 +-
 .../resources/V40/Accounts/101/entity.full.json |  28 +-
 .../main/resources/V40/Accounts/101/entity.xml  |  14 +-
 .../MyPaymentInstruments(101901).full.json      |  14 +-
 .../101/links/MyPaymentInstruments(101901).xml  |   8 +-
 .../101/links/MyPaymentInstruments.full.json    |  46 +-
 .../Accounts/101/links/MyPaymentInstruments.xml |  26 +-
 .../V40/OrderDetails/7 5/entity.full.json       |  17 +
 .../resources/V40/OrderDetails/7 5/entity.xml   |  42 ++
 .../client/core/it/v3/BatchTestITCase.java      |   1 -
 .../client/core/it/v4/BatchTestITCase.java      | 466 +++++++++++++++++++
 .../core/it/v4/EntityRetrieveTestITCase.java    |   2 +-
 17 files changed, 706 insertions(+), 307 deletions(-)
----------------------------------------------------------------------