You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by sk...@apache.org on 2014/04/04 07:26:11 UTC

[07/51] [abbrv] [OLINGO-200] Introducing specialization for V3 and V4 domain objects

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/RetrieveRequestFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/RetrieveRequestFactoryImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/RetrieveRequestFactoryImpl.java
index 69f6f2a..a32a153 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/RetrieveRequestFactoryImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/RetrieveRequestFactoryImpl.java
@@ -18,10 +18,20 @@
  */
 package org.apache.olingo.client.core.communication.request.retrieve.v4;
 
+import java.net.URI;
+import org.apache.olingo.client.api.communication.request.retrieve.ODataEntityRequest;
+import org.apache.olingo.client.api.communication.request.retrieve.ODataEntitySetRequest;
+import org.apache.olingo.client.api.communication.request.retrieve.ODataPropertyRequest;
 import org.apache.olingo.client.api.communication.request.retrieve.XMLMetadataRequest;
-import org.apache.olingo.client.api.v4.ODataClient;
 import org.apache.olingo.client.api.communication.request.retrieve.v4.RetrieveRequestFactory;
+import org.apache.olingo.client.api.v4.ODataClient;
 import org.apache.olingo.client.core.communication.request.retrieve.AbstractRetrieveRequestFactory;
+import org.apache.olingo.client.core.communication.request.retrieve.ODataEntityRequestImpl;
+import org.apache.olingo.client.core.communication.request.retrieve.ODataEntitySetRequestImpl;
+import org.apache.olingo.client.core.communication.request.retrieve.ODataPropertyRequestImpl;
+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;
 
 public class RetrieveRequestFactoryImpl extends AbstractRetrieveRequestFactory
         implements RetrieveRequestFactory {
@@ -37,4 +47,22 @@ public class RetrieveRequestFactoryImpl extends AbstractRetrieveRequestFactory
     return new XMLMetadataRequestImpl(((ODataClient) client),
             client.getURIBuilder(serviceRoot).appendMetadataSegment().build());
   }
+
+  @SuppressWarnings("unchecked")
+  @Override
+  public ODataEntitySetRequest<ODataEntitySet> getEntitySetRequest(final URI query) {
+    return new ODataEntitySetRequestImpl<ODataEntitySet>(client, query);
+  }
+
+  @SuppressWarnings("unchecked")
+  @Override
+  public ODataEntityRequest<ODataEntity> getEntityRequest(final URI query) {
+    return new ODataEntityRequestImpl<ODataEntity>(client, query);
+  }
+
+  @SuppressWarnings("unchecked")
+  @Override
+  public ODataPropertyRequest<ODataProperty> getPropertyRequest(final URI query) {
+    return new ODataPropertyRequestImpl<ODataProperty>(client, query);
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/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 f7e5ffa..2c1dd22 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
@@ -28,7 +28,7 @@ import org.apache.olingo.client.api.communication.request.ODataBatchableRequest;
 import org.apache.olingo.client.api.communication.request.streamed.MediaEntityCreateStreamManager;
 import org.apache.olingo.client.api.communication.request.streamed.ODataMediaEntityCreateRequest;
 import org.apache.olingo.client.api.communication.response.ODataMediaEntityCreateResponse;
-import org.apache.olingo.commons.api.domain.ODataEntity;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.client.core.communication.request.AbstractODataStreamManager;
 import org.apache.olingo.client.core.communication.response.AbstractODataResponse;
@@ -98,7 +98,7 @@ public class ODataMediaEntityCreateRequestImpl
   private class ODataMediaEntityCreateResponseImpl extends AbstractODataResponse
           implements ODataMediaEntityCreateResponse {
 
-    private ODataEntity entity = null;
+    private CommonODataEntity entity = null;
 
     /**
      * Constructor.
@@ -122,7 +122,7 @@ public class ODataMediaEntityCreateRequestImpl
      * {@inheritDoc }
      */
     @Override
-    public ODataEntity getBody() {
+    public CommonODataEntity getBody() {
       if (entity == null) {
         try {
           final Container<Entry> container = odataClient.getDeserializer().toEntry(getRawResponse(), getFormat());

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/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 a22843f..614baa1 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
@@ -28,7 +28,7 @@ import org.apache.olingo.client.api.communication.request.ODataBatchableRequest;
 import org.apache.olingo.client.api.communication.request.streamed.MediaEntityUpdateStreamManager;
 import org.apache.olingo.client.api.communication.request.streamed.ODataMediaEntityUpdateRequest;
 import org.apache.olingo.client.api.communication.response.ODataMediaEntityUpdateResponse;
-import org.apache.olingo.commons.api.domain.ODataEntity;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.client.core.communication.request.AbstractODataStreamManager;
 import org.apache.olingo.client.core.communication.response.AbstractODataResponse;
@@ -101,7 +101,7 @@ public class ODataMediaEntityUpdateRequestImpl
   private class ODataMediaEntityUpdateResponseImpl extends AbstractODataResponse
           implements ODataMediaEntityUpdateResponse {
 
-    private ODataEntity entity = null;
+    private CommonODataEntity entity = null;
 
     /**
      * Constructor.
@@ -125,7 +125,7 @@ public class ODataMediaEntityUpdateRequestImpl
      * {@inheritDoc }
      */
     @Override
-    public ODataEntity getBody() {
+    public CommonODataEntity getBody() {
       if (entity == null) {
         try {
           final Container<Entry> container = odataClient.getDeserializer().toEntry(getRawResponse(), getFormat());

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/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 2a0ea4f..4c86604 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
@@ -35,14 +35,13 @@ import org.apache.olingo.commons.api.data.Property;
 import org.apache.olingo.commons.api.data.Value;
 import org.apache.olingo.commons.api.domain.ODataCollectionValue;
 import org.apache.olingo.commons.api.domain.ODataComplexValue;
-import org.apache.olingo.commons.api.domain.ODataEntity;
-import org.apache.olingo.commons.api.domain.ODataEntitySet;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
+import org.apache.olingo.commons.api.domain.CommonODataEntitySet;
 import org.apache.olingo.commons.api.domain.ODataInlineEntity;
 import org.apache.olingo.commons.api.domain.ODataInlineEntitySet;
 import org.apache.olingo.commons.api.domain.ODataLink;
 import org.apache.olingo.commons.api.domain.ODataOperation;
-import org.apache.olingo.commons.api.domain.ODataProperty;
-import org.apache.olingo.commons.core.domain.ODataPropertyImpl;
+import org.apache.olingo.commons.api.domain.CommonODataProperty;
 import org.apache.olingo.commons.api.domain.ODataServiceDocument;
 import org.apache.olingo.commons.api.domain.ODataValue;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
@@ -89,7 +88,7 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
   }
 
   @Override
-  public Feed getFeed(final ODataEntitySet entitySet, final Class<? extends Feed> reference) {
+  public Feed getFeed(final CommonODataEntitySet entitySet, final Class<? extends Feed> reference) {
     final Feed feed = ResourceFactory.newFeed(reference);
 
     feed.setCount(entitySet.getCount());
@@ -99,7 +98,7 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
       feed.setNext(next);
     }
 
-    for (ODataEntity entity : entitySet.getEntities()) {
+    for (CommonODataEntity entity : entitySet.getEntities()) {
       feed.getEntries().add(getEntry(entity, ResourceFactory.entryClassForFeed(reference)));
     }
 
@@ -107,15 +106,14 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
   }
 
   @Override
-  public Entry getEntry(final ODataEntity entity, final Class<? extends Entry> reference) {
+  public Entry getEntry(final CommonODataEntity entity, final Class<? extends Entry> reference) {
     return getEntry(entity, reference, true);
   }
 
   @Override
-  public Entry getEntry(final ODataEntity entity, final Class<? extends Entry> reference, final boolean setType) {
+  public Entry getEntry(final CommonODataEntity entity, final Class<? extends Entry> reference, final boolean setType) {
     final Entry entry = ResourceFactory.newEntry(reference);
 
-    entry.setId(entity.getReference());
     entry.setType(entity.getName());
 
     // -------------------------------------------------------------
@@ -176,7 +174,7 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
       entry.setMediaContentType(entity.getMediaContentType());
     }
 
-    for (ODataProperty property : entity.getProperties()) {
+    for (CommonODataProperty property : entity.getProperties()) {
       entry.getProperties().add(getProperty(property, reference, setType));
     }
 
@@ -194,13 +192,13 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
 
     if (link instanceof ODataInlineEntity) {
       // append inline entity
-      final ODataEntity inlineEntity = ((ODataInlineEntity) link).getEntity();
+      final CommonODataEntity inlineEntity = ((ODataInlineEntity) link).getEntity();
       LOG.debug("Append in-line entity\n{}", inlineEntity);
 
       linkResource.setInlineEntry(getEntry(inlineEntity, ResourceFactory.entryClassForFormat(isXML)));
     } else if (link instanceof ODataInlineEntitySet) {
       // append inline feed
-      final ODataEntitySet InlineFeed = ((ODataInlineEntitySet) link).getEntitySet();
+      final CommonODataEntitySet InlineFeed = ((ODataInlineEntitySet) link).getEntitySet();
       LOG.debug("Append in-line feed\n{}", InlineFeed);
 
       linkResource.setInlineFeed(getFeed(InlineFeed, ResourceFactory.feedClassForFormat(isXML)));
@@ -210,7 +208,7 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
   }
 
   @Override
-  public Property getProperty(final ODataProperty property, final Class<? extends Entry> reference,
+  public Property getProperty(final CommonODataProperty property, final Class<? extends Entry> reference,
           final boolean setType) {
 
     final Property propertyResource = ResourceFactory.newProperty(reference);
@@ -243,7 +241,7 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
       final ODataComplexValue _value = value.asComplex();
       valueResource = new ComplexValueImpl();
 
-      for (final Iterator<ODataProperty> itor = _value.iterator(); itor.hasNext();) {
+      for (final Iterator<CommonODataProperty> itor = _value.iterator(); itor.hasNext();) {
         valueResource.asComplex().get().add(getProperty(itor.next(), reference, setType));
       }
     } else if (value.isCollection()) {
@@ -259,12 +257,14 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
   }
 
   @Override
-  public ODataEntitySet getODataEntitySet(final Feed resource) {
+  public CommonODataEntitySet getODataEntitySet(final Feed resource) {
     return getODataEntitySet(resource, null);
   }
 
+  protected abstract boolean add(CommonODataEntitySet entitySet, CommonODataEntity entity);
+
   @Override
-  public ODataEntitySet getODataEntitySet(final Feed resource, final URI defaultBaseURI) {
+  public CommonODataEntitySet getODataEntitySet(final Feed resource, final URI defaultBaseURI) {
     if (LOG.isDebugEnabled()) {
       final StringWriter writer = new StringWriter();
       client.getSerializer().feed(resource, writer);
@@ -276,7 +276,7 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
 
     final URI next = resource.getNext();
 
-    final ODataEntitySet entitySet = next == null
+    final CommonODataEntitySet entitySet = next == null
             ? client.getObjectFactory().newEntitySet()
             : client.getObjectFactory().newEntitySet(URIUtils.getURI(base, next.toASCIIString()));
 
@@ -285,19 +285,19 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
     }
 
     for (Entry entryResource : resource.getEntries()) {
-      entitySet.getEntities().add(getODataEntity(entryResource));
+      add(entitySet, getODataEntity(entryResource));
     }
 
     return entitySet;
   }
 
   @Override
-  public ODataEntity getODataEntity(final Entry resource) {
+  public CommonODataEntity getODataEntity(final Entry resource) {
     return getODataEntity(resource, null);
   }
 
   @Override
-  public ODataEntity getODataEntity(final Entry resource, final URI defaultBaseURI) {
+  public CommonODataEntity getODataEntity(final Entry resource, final URI defaultBaseURI) {
     if (LOG.isDebugEnabled()) {
       final StringWriter writer = new StringWriter();
       client.getSerializer().entry(resource, writer);
@@ -307,13 +307,11 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
 
     final URI base = defaultBaseURI == null ? resource.getBaseURI() : defaultBaseURI;
 
-    final ODataEntity entity = resource.getSelfLink() == null
+    final CommonODataEntity entity = resource.getSelfLink() == null
             ? client.getObjectFactory().newEntity(resource.getType())
             : client.getObjectFactory().newEntity(resource.getType(),
                     URIUtils.getURI(base, resource.getSelfLink().getHref()));
 
-    entity.setReference(resource.getId());
-
     if (StringUtils.isNotBlank(resource.getETag())) {
       entity.setETag(resource.getETag());
     }
@@ -362,18 +360,13 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
     }
 
     for (Property property : resource.getProperties()) {
-      entity.getProperties().add(getODataProperty(property));
+      add(entity, getODataProperty(property));
     }
 
     return entity;
   }
 
-  @Override
-  public ODataProperty getODataProperty(final Property property) {
-    return new ODataPropertyImpl(property.getName(), getODataValue(property));
-  }
-
-  private ODataValue getODataValue(final Property resource) {
+  protected ODataValue getODataValue(final Property resource) {
     ODataValue value = null;
 
     if (resource.getValue().isPrimitive()) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataReader.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataReader.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataReader.java
index f21f16a..4ff36f9 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataReader.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/AbstractODataReader.java
@@ -25,11 +25,11 @@ import org.apache.olingo.client.api.CommonODataClient;
 import org.apache.olingo.client.api.data.ServiceDocument;
 import org.apache.olingo.commons.api.domain.ODataError;
 import org.apache.olingo.commons.api.data.Property;
-import org.apache.olingo.commons.api.domain.ODataEntity;
-import org.apache.olingo.commons.api.domain.ODataEntitySet;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
+import org.apache.olingo.commons.api.domain.CommonODataEntitySet;
 import org.apache.olingo.client.api.domain.ODataEntitySetIterator;
 import org.apache.olingo.client.api.edm.xml.Schema;
-import org.apache.olingo.commons.api.domain.ODataProperty;
+import org.apache.olingo.commons.api.domain.CommonODataProperty;
 import org.apache.olingo.commons.api.domain.ODataServiceDocument;
 import org.apache.olingo.commons.api.domain.ODataValue;
 import org.apache.olingo.client.api.edm.xml.XMLMetadata;
@@ -78,17 +78,17 @@ public abstract class AbstractODataReader implements CommonODataReader {
   }
 
   @Override
-  public ODataEntitySet readEntitySet(final InputStream input, final ODataPubFormat format) {
+  public CommonODataEntitySet readEntitySet(final InputStream input, final ODataPubFormat format) {
     return client.getBinder().getODataEntitySet(client.getDeserializer().toFeed(input, format).getObject());
   }
 
   @Override
-  public ODataEntity readEntity(final InputStream input, final ODataPubFormat format) {
+  public CommonODataEntity readEntity(final InputStream input, final ODataPubFormat format) {
     return client.getBinder().getODataEntity(client.getDeserializer().toEntry(input, format).getObject());
   }
 
   @Override
-  public ODataProperty readProperty(final InputStream input, final ODataFormat format) {
+  public CommonODataProperty readProperty(final InputStream input, final ODataFormat format) {
     final Property property = client.getDeserializer().toProperty(input, format).getObject();
     return client.getBinder().getODataProperty(property);
   }
@@ -107,19 +107,19 @@ public abstract class AbstractODataReader implements CommonODataReader {
       if (ODataEntitySetIterator.class.isAssignableFrom(reference)) {
         res = new Container<T>(
                 null, null, (T) new ODataEntitySetIterator(client, src, ODataPubFormat.fromString(format)));
-      } else if (ODataEntitySet.class.isAssignableFrom(reference)) {
+      } else if (CommonODataEntitySet.class.isAssignableFrom(reference)) {
         final Container<Feed> container = client.getDeserializer().toFeed(src, ODataPubFormat.fromString(format));
         res = new Container<T>(
                 container.getContextURL(),
                 container.getMetadataETag(),
                 (T) client.getBinder().getODataEntitySet(container.getObject()));
-      } else if (ODataEntity.class.isAssignableFrom(reference)) {
+      } else if (CommonODataEntity.class.isAssignableFrom(reference)) {
         final Container<Entry> container = client.getDeserializer().toEntry(src, ODataPubFormat.fromString(format));
         res = new Container<T>(
                 container.getContextURL(),
                 container.getMetadataETag(),
                 (T) client.getBinder().getODataEntity(container.getObject()));
-      } else if (ODataProperty.class.isAssignableFrom(reference)) {
+      } else if (CommonODataProperty.class.isAssignableFrom(reference)) {
         final Container<Property> container = client.getDeserializer().toProperty(src, ODataFormat.fromString(format));
         res = new Container<T>(
                 container.getContextURL(),

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-core/src/main/java/org/apache/olingo/client/core/op/ODataWriterImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/ODataWriterImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/ODataWriterImpl.java
index 2b914b4..7ea9c99 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/ODataWriterImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/ODataWriterImpl.java
@@ -26,9 +26,9 @@ import java.util.Collection;
 import java.util.Collections;
 import org.apache.commons.io.IOUtils;
 import org.apache.olingo.client.api.CommonODataClient;
-import org.apache.olingo.commons.api.domain.ODataEntity;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
 import org.apache.olingo.commons.api.domain.ODataLink;
-import org.apache.olingo.commons.api.domain.ODataProperty;
+import org.apache.olingo.commons.api.domain.CommonODataProperty;
 import org.apache.olingo.commons.api.format.ODataFormat;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
 import org.apache.olingo.client.api.op.ODataWriter;
@@ -44,17 +44,17 @@ public class ODataWriterImpl implements ODataWriter {
   }
 
   @Override
-  public InputStream writeEntities(final Collection<ODataEntity> entities, final ODataPubFormat format) {
+  public InputStream writeEntities(final Collection<CommonODataEntity> entities, final ODataPubFormat format) {
     return writeEntities(entities, format, true);
   }
 
   @Override
   public InputStream writeEntities(
-          final Collection<ODataEntity> entities, final ODataPubFormat format, final boolean outputType) {
+          final Collection<CommonODataEntity> entities, final ODataPubFormat format, final boolean outputType) {
 
     final ByteArrayOutputStream output = new ByteArrayOutputStream();
     try {
-      for (ODataEntity entity : entities) {
+      for (CommonODataEntity entity : entities) {
         client.getSerializer().entry(client.getBinder().getEntry(
                 entity, ResourceFactory.entryClassForFormat(format == ODataPubFormat.ATOM), outputType), output);
       }
@@ -66,17 +66,19 @@ public class ODataWriterImpl implements ODataWriter {
   }
 
   @Override
-  public InputStream writeEntity(final ODataEntity entity, final ODataPubFormat format) {
+  public InputStream writeEntity(final CommonODataEntity entity, final ODataPubFormat format) {
     return writeEntity(entity, format, true);
   }
 
   @Override
-  public InputStream writeEntity(final ODataEntity entity, final ODataPubFormat format, final boolean outputType) {
-    return writeEntities(Collections.<ODataEntity>singleton(entity), format, outputType);
+  public InputStream writeEntity(final CommonODataEntity entity, final ODataPubFormat format,
+          final boolean outputType) {
+
+    return writeEntities(Collections.<CommonODataEntity>singleton(entity), format, outputType);
   }
 
   @Override
-  public InputStream writeProperty(final ODataProperty property, final ODataFormat format) {
+  public InputStream writeProperty(final CommonODataProperty property, final ODataFormat format) {
     final ByteArrayOutputStream output = new ByteArrayOutputStream();
     try {
       client.getSerializer().property(client.getBinder().getProperty(

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v3/ODataBinderImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v3/ODataBinderImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v3/ODataBinderImpl.java
index 3c5f5a4..28887dc 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v3/ODataBinderImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v3/ODataBinderImpl.java
@@ -18,11 +18,22 @@
  */
 package org.apache.olingo.client.core.op.impl.v3;
 
+import java.net.URI;
 import org.apache.olingo.commons.api.data.v3.LinkCollection;
 import org.apache.olingo.client.api.domain.v3.ODataLinkCollection;
 import org.apache.olingo.client.api.op.v3.ODataBinder;
 import org.apache.olingo.client.core.op.AbstractODataBinder;
 import org.apache.olingo.client.core.v3.ODataClientImpl;
+import org.apache.olingo.commons.api.data.Entry;
+import org.apache.olingo.commons.api.data.Feed;
+import org.apache.olingo.commons.api.data.Property;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
+import org.apache.olingo.commons.api.domain.CommonODataEntitySet;
+import org.apache.olingo.commons.api.domain.CommonODataProperty;
+import org.apache.olingo.commons.api.domain.v3.ODataEntity;
+import org.apache.olingo.commons.api.domain.v3.ODataEntitySet;
+import org.apache.olingo.commons.api.domain.v3.ODataProperty;
+import org.apache.olingo.commons.core.domain.v3.ODataPropertyImpl;
 
 public class ODataBinderImpl extends AbstractODataBinder implements ODataBinder {
 
@@ -33,6 +44,41 @@ public class ODataBinderImpl extends AbstractODataBinder implements ODataBinder
   }
 
   @Override
+  public boolean add(final CommonODataEntity entity, final CommonODataProperty property) {
+    return ((ODataEntity) entity).getProperties().add((ODataProperty) property);
+  }
+
+  @Override
+  protected boolean add(final CommonODataEntitySet entitySet, final CommonODataEntity entity) {
+    return ((ODataEntitySet) entitySet).getEntities().add((ODataEntity) entity);
+  }
+
+  @Override
+  public ODataEntitySet getODataEntitySet(final Feed resource) {
+    return (ODataEntitySet) super.getODataEntitySet(resource);
+  }
+
+  @Override
+  public ODataEntitySet getODataEntitySet(final Feed resource, final URI defaultBaseURI) {
+    return (ODataEntitySet) super.getODataEntitySet(resource, defaultBaseURI);
+  }
+
+  @Override
+  public ODataEntity getODataEntity(final Entry resource) {
+    return (ODataEntity) super.getODataEntity(resource);
+  }
+
+  @Override
+  public ODataEntity getODataEntity(final Entry resource, final URI defaultBaseURI) {
+    return (ODataEntity) super.getODataEntity(resource, defaultBaseURI);
+  }
+
+  @Override
+  public ODataProperty getODataProperty(final Property property) {
+    return new ODataPropertyImpl(property.getName(), getODataValue(property));
+  }
+
+  @Override
   public ODataLinkCollection getLinkCollection(final LinkCollection linkCollection) {
     final ODataLinkCollection collection = new ODataLinkCollection(linkCollection.getNext());
     collection.setLinks(linkCollection.getLinks());

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataBinderImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataBinderImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataBinderImpl.java
index 9c81baf..0acc7d1 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataBinderImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/v4/ODataBinderImpl.java
@@ -18,6 +18,7 @@
  */
 package org.apache.olingo.client.core.op.impl.v4;
 
+import java.net.URI;
 import org.apache.olingo.client.api.data.ServiceDocument;
 import org.apache.olingo.client.api.data.ServiceDocumentItem;
 import org.apache.olingo.commons.api.domain.ODataServiceDocument;
@@ -25,6 +26,16 @@ import org.apache.olingo.client.api.op.v4.ODataBinder;
 import org.apache.olingo.client.core.uri.URIUtils;
 import org.apache.olingo.client.api.v4.ODataClient;
 import org.apache.olingo.client.core.op.AbstractODataBinder;
+import org.apache.olingo.commons.api.data.Entry;
+import org.apache.olingo.commons.api.data.Feed;
+import org.apache.olingo.commons.api.data.Property;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
+import org.apache.olingo.commons.api.domain.CommonODataEntitySet;
+import org.apache.olingo.commons.api.domain.CommonODataProperty;
+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.core.domain.v4.ODataPropertyImpl;
 
 public class ODataBinderImpl extends AbstractODataBinder implements ODataBinder {
 
@@ -35,6 +46,16 @@ public class ODataBinderImpl extends AbstractODataBinder implements ODataBinder
   }
 
   @Override
+  public boolean add(final CommonODataEntity entity, final CommonODataProperty property) {
+    return ((ODataEntity) entity).getProperties().add((ODataProperty) property);
+  }
+
+  @Override
+  protected boolean add(final CommonODataEntitySet entitySet, final CommonODataEntity entity) {
+    return ((ODataEntitySet) entitySet).getEntities().add((ODataEntity) entity);
+  }
+
+  @Override
   public ODataServiceDocument getODataServiceDocument(final ServiceDocument resource) {
     final ODataServiceDocument serviceDocument = super.getODataServiceDocument(resource);
 
@@ -56,4 +77,39 @@ public class ODataBinderImpl extends AbstractODataBinder implements ODataBinder
 
     return serviceDocument;
   }
+
+  @Override
+  public Entry getEntry(final CommonODataEntity entity, final Class<? extends Entry> reference, final boolean setType) {
+    final Entry entry = super.getEntry(entity, reference, setType);
+    entry.setId(((ODataEntity) entity).getReference());
+    return entry;
+  }
+
+  @Override
+  public ODataEntitySet getODataEntitySet(final Feed resource) {
+    return (ODataEntitySet) super.getODataEntitySet(resource);
+  }
+
+  @Override
+  public ODataEntitySet getODataEntitySet(final Feed resource, final URI defaultBaseURI) {
+    return (ODataEntitySet) super.getODataEntitySet(resource, defaultBaseURI);
+  }
+
+  @Override
+  public ODataEntity getODataEntity(final Entry resource) {
+    return (ODataEntity) super.getODataEntity(resource);
+  }
+
+  @Override
+  public ODataEntity getODataEntity(final Entry resource, final URI defaultBaseURI) {
+    final ODataEntity entity = (ODataEntity) super.getODataEntity(resource, defaultBaseURI);
+    entity.setReference(resource.getId());
+    return entity;
+  }
+
+  @Override
+  public ODataProperty getODataProperty(final Property property) {
+    return new ODataPropertyImpl(property.getName(), getODataValue(property));
+  }
+
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java
index d6d5e36..f1b5d23 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java
@@ -46,7 +46,9 @@ import org.apache.olingo.client.core.op.impl.v3.ODataReaderImpl;
 import org.apache.olingo.client.core.op.impl.v3.ODataSerializerImpl;
 import org.apache.olingo.client.core.uri.v3.URIBuilderImpl;
 import org.apache.olingo.client.core.uri.v3.FilterFactoryImpl;
+import org.apache.olingo.commons.api.domain.v3.ODataObjectFactory;
 import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
+import org.apache.olingo.commons.core.domain.v3.ODataObjectFactoryImpl;
 
 public class ODataClientImpl extends AbstractODataClient implements ODataClient {
 
@@ -64,6 +66,8 @@ public class ODataClientImpl extends AbstractODataClient implements ODataClient
 
   private final ODataBinder binder = new ODataBinderImpl(this);
 
+  private final ODataObjectFactory objectFactory = new ODataObjectFactoryImpl(getServiceVersion());
+
   private final RetrieveRequestFactory retrieveReqFact = new RetrieveRequestFactoryImpl(this);
 
   private final CUDRequestFactory cudReqFact = new CUDRequestFactoryImpl(this);
@@ -124,6 +128,11 @@ public class ODataClientImpl extends AbstractODataClient implements ODataClient
   }
 
   @Override
+  public ODataObjectFactory getObjectFactory() {
+    return objectFactory;
+  }
+
+  @Override
   public RetrieveRequestFactory getRetrieveRequestFactory() {
     return retrieveReqFact;
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java
index a5aafab..d379bcf 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java
@@ -46,7 +46,9 @@ import org.apache.olingo.client.core.op.impl.v4.ODataReaderImpl;
 import org.apache.olingo.client.core.op.impl.v4.ODataSerializerImpl;
 import org.apache.olingo.client.core.uri.v4.URIBuilderImpl;
 import org.apache.olingo.client.core.uri.v4.FilterFactoryImpl;
+import org.apache.olingo.commons.api.domain.v4.ODataObjectFactory;
 import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
+import org.apache.olingo.commons.core.domain.v4.ODataObjectFactoryImpl;
 
 public class ODataClientImpl extends AbstractODataClient implements ODataClient {
 
@@ -64,6 +66,8 @@ public class ODataClientImpl extends AbstractODataClient implements ODataClient
 
   private final ODataBinder binder = new ODataBinderImpl(this);
 
+  private final ODataObjectFactory objectFactory = new ODataObjectFactoryImpl(getServiceVersion());
+
   private final RetrieveRequestFactory retrieveReqFact = new RetrieveRequestFactoryImpl(this);
 
   private final CUDRequestFactory cudReqFact = new CUDRequestFactoryImpl(this);
@@ -123,6 +127,11 @@ public class ODataClientImpl extends AbstractODataClient implements ODataClient
   }
 
   @Override
+  public ODataObjectFactory getObjectFactory() {
+    return objectFactory;
+  }
+
+  @Override
   public RetrieveRequestFactory getRetrieveRequestFactory() {
     return retrieveReqFact;
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-core/src/test/java/org/apache/olingo/client/core/it/AbstractTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/AbstractTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/AbstractTestITCase.java
index bba68de..0a3b53d 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/AbstractTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/AbstractTestITCase.java
@@ -54,12 +54,12 @@ import org.apache.olingo.commons.api.data.Entry;
 import org.apache.olingo.commons.api.data.Feed;
 import org.apache.olingo.commons.api.domain.ODataCollectionValue;
 import org.apache.olingo.commons.api.domain.ODataComplexValue;
-import org.apache.olingo.commons.api.domain.ODataEntity;
-import org.apache.olingo.commons.api.domain.ODataEntitySet;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
+import org.apache.olingo.commons.api.domain.CommonODataEntitySet;
 import org.apache.olingo.commons.api.domain.ODataInlineEntity;
 import org.apache.olingo.commons.api.domain.ODataInlineEntitySet;
 import org.apache.olingo.commons.api.domain.ODataLink;
-import org.apache.olingo.commons.api.domain.ODataProperty;
+import org.apache.olingo.commons.api.domain.CommonODataProperty;
 import org.apache.olingo.commons.api.domain.ODataValue;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
 import org.apache.olingo.client.api.http.HttpMethod;
@@ -117,10 +117,10 @@ public abstract class AbstractTestITCase {
       assertNotNull(foundActual);
 
       if (foundOriginal instanceof ODataInlineEntity && foundActual instanceof ODataInlineEntity) {
-        final ODataEntity originalInline = ((ODataInlineEntity) foundOriginal).getEntity();
+        final CommonODataEntity originalInline = ((ODataInlineEntity) foundOriginal).getEntity();
         assertNotNull(originalInline);
 
-        final ODataEntity actualInline = ((ODataInlineEntity) foundActual).getEntity();
+        final CommonODataEntity actualInline = ((ODataInlineEntity) foundActual).getEntity();
         assertNotNull(actualInline);
 
         checkProperties(originalInline.getProperties(), actualInline.getProperties());
@@ -128,23 +128,25 @@ public abstract class AbstractTestITCase {
     }
   }
 
-  protected void checkProperties(final Collection<ODataProperty> original, final Collection<ODataProperty> actual) {
+  protected void checkProperties(final Collection<? extends CommonODataProperty> original,
+          final Collection<? extends CommonODataProperty> actual) {
+
     assertTrue(original.size() <= actual.size());
 
     // re-organize actual properties into a Map<String, ODataProperty>
-    final Map<String, ODataProperty> actualProps = new HashMap<String, ODataProperty>(actual.size());
+    final Map<String, CommonODataProperty> actualProps = new HashMap<String, CommonODataProperty>(actual.size());
 
-    for (ODataProperty prop : actual) {
+    for (CommonODataProperty prop : actual) {
       assertFalse(actualProps.containsKey(prop.getName()));
       actualProps.put(prop.getName(), prop);
     }
 
     assertTrue(actual.size() <= actualProps.size());
 
-    for (ODataProperty prop : original) {
+    for (CommonODataProperty prop : original) {
       assertNotNull(prop);
       if (actualProps.containsKey(prop.getName())) {
-        final ODataProperty actualProp = actualProps.get(prop.getName());
+        final CommonODataProperty actualProp = actualProps.get(prop.getName());
         assertNotNull(actualProp);
 
         if (prop.getValue() != null && actualProp.getValue() != null) {
@@ -168,13 +170,13 @@ public abstract class AbstractTestITCase {
             original.getClass().getSimpleName(), actual.getClass().getSimpleName());
 
     if (original.isComplex()) {
-      final List<ODataProperty> originalFileds = new ArrayList<ODataProperty>();
-      for (ODataProperty prop : original.asComplex()) {
+      final List<CommonODataProperty> originalFileds = new ArrayList<CommonODataProperty>();
+      for (CommonODataProperty prop : original.asComplex()) {
         originalFileds.add(prop);
       }
 
-      final List<ODataProperty> actualFileds = new ArrayList<ODataProperty>();
-      for (ODataProperty prop : (ODataComplexValue) actual) {
+      final List<CommonODataProperty> actualFileds = new ArrayList<CommonODataProperty>();
+      for (CommonODataProperty prop : (ODataComplexValue) actual) {
         actualFileds.add(prop);
       }
 
@@ -207,39 +209,42 @@ public abstract class AbstractTestITCase {
     }
   }
 
-  protected ODataEntity getSampleCustomerInfo(final int id, final String sampleinfo) {
-    final ODataEntity entity = getClient().getObjectFactory().newEntity(
+  protected CommonODataEntity getSampleCustomerInfo(final int id, final String sampleinfo) {
+    final CommonODataEntity entity = getClient().getObjectFactory().newEntity(
             "Microsoft.Test.OData.Services.AstoriaDefaultService.CustomerInfo");
     entity.setMediaEntity(true);
 
-    entity.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("Information",
-            getClient().getObjectFactory().newPrimitiveValueBuilder().setText(sampleinfo).setType(
-                    EdmPrimitiveTypeKind.String).build()));
+    getClient().getBinder().add(entity,
+            getClient().getObjectFactory().newPrimitiveProperty("Information",
+                    getClient().getObjectFactory().newPrimitiveValueBuilder().setText(sampleinfo).
+                    setType(EdmPrimitiveTypeKind.String).build()));
 
     return entity;
   }
 
-  protected ODataEntity getSampleCustomerProfile(
+  protected CommonODataEntity getSampleCustomerProfile(
           final int id, final String sampleName, final boolean withInlineInfo) {
 
-    final ODataEntity entity =
+    final CommonODataEntity entity =
             getClient().getObjectFactory().newEntity("Microsoft.Test.OData.Services.AstoriaDefaultService.Customer");
 
     // add name attribute
-    entity.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("Name",
-            getClient().getObjectFactory().newPrimitiveValueBuilder().setText(sampleName).setType(
-                    EdmPrimitiveTypeKind.String).build()));
+    getClient().getBinder().add(entity,
+            getClient().getObjectFactory().newPrimitiveProperty("Name",
+                    getClient().getObjectFactory().newPrimitiveValueBuilder().setText(sampleName).
+                    setType(EdmPrimitiveTypeKind.String).build()));
 
     // add key attribute
-    entity.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("CustomerId",
-            getClient().getObjectFactory().newPrimitiveValueBuilder().setText(String.valueOf(id)).setType(
-                    EdmPrimitiveTypeKind.Int32).build()));
+    getClient().getBinder().add(entity,
+            getClient().getObjectFactory().newPrimitiveProperty("CustomerId",
+                    getClient().getObjectFactory().newPrimitiveValueBuilder().setText(String.valueOf(id)).
+                    setType(EdmPrimitiveTypeKind.Int32).build()));
 
     // add BackupContactInfo attribute (collection)
     final ODataCollectionValue backupContactInfoValue = getClient().getObjectFactory().newCollectionValue(
             "Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.ContactDetails)");
-    entity.getProperties().add(getClient().getObjectFactory().newCollectionProperty("BackupContactInfo",
-            backupContactInfoValue));
+    getClient().getBinder().add(entity,
+            getClient().getObjectFactory().newCollectionProperty("BackupContactInfo", backupContactInfoValue));
 
     // add BackupContactInfo.ContactDetails attribute (complex)
     final ODataComplexValue contactDetails = getClient().getObjectFactory().newComplexValue(
@@ -302,7 +307,7 @@ public abstract class AbstractTestITCase {
     }
   }
 
-  protected void debugODataProperty(final ODataProperty property, final String message) {
+  protected void debugODataProperty(final CommonODataProperty property, final String message) {
     LOG.debug(message + "\n{}", property.toString());
   }
 
@@ -310,7 +315,7 @@ public abstract class AbstractTestITCase {
     LOG.debug(message + "\n{}", value.toString());
   }
 
-  protected void debugODataEntity(final ODataEntity entity, final String message) {
+  protected void debugODataEntity(final CommonODataEntity entity, final String message) {
     if (LOG.isDebugEnabled()) {
       StringWriter writer = new StringWriter();
       getClient().getSerializer().entry(getClient().getBinder().getEntry(entity, AtomEntryImpl.class), writer);
@@ -337,7 +342,7 @@ public abstract class AbstractTestITCase {
   }
 
   protected String getETag(final URI uri) {
-    final ODataRetrieveResponse<ODataEntity> res = getClient().getRetrieveRequestFactory().
+    final ODataRetrieveResponse<CommonODataEntity> res = getClient().getRetrieveRequestFactory().
             getEntityRequest(uri).execute();
     try {
       return res.getEtag();
@@ -346,12 +351,13 @@ public abstract class AbstractTestITCase {
     }
   }
 
-  protected ODataEntity read(final ODataPubFormat format, final URI editLink) {
-    final ODataEntityRequest req = getClient().getRetrieveRequestFactory().getEntityRequest(editLink);
+  protected CommonODataEntity read(final ODataPubFormat format, final URI editLink) {
+    final ODataEntityRequest<CommonODataEntity> req = getClient().getRetrieveRequestFactory().
+            getEntityRequest(editLink);
     req.setFormat(format);
 
-    final ODataRetrieveResponse<ODataEntity> res = req.execute();
-    final ODataEntity entity = res.getBody();
+    final ODataRetrieveResponse<CommonODataEntity> res = req.execute();
+    final CommonODataEntity entity = res.getBody();
 
     assertNotNull(entity);
 
@@ -362,10 +368,10 @@ public abstract class AbstractTestITCase {
     return entity;
   }
 
-  protected ODataEntity createEntity(
+  protected CommonODataEntity createEntity(
           final String serviceRootURL,
           final ODataPubFormat format,
-          final ODataEntity original,
+          final CommonODataEntity original,
           final String entitySetName) {
 
     final CommonURIBuilder<?> uriBuilder = getClient().getURIBuilder(serviceRootURL).
@@ -381,7 +387,7 @@ public abstract class AbstractTestITCase {
     assertEquals(201, createRes.getStatusCode());
     assertEquals("Created", createRes.getStatusMessage());
 
-    final ODataEntity created = createRes.getBody();
+    final CommonODataEntity created = createRes.getBody();
     assertNotNull(created);
 
     debugODataEntity(created, "Just created");
@@ -389,9 +395,9 @@ public abstract class AbstractTestITCase {
     return created;
   }
 
-  protected ODataEntity compareEntities(final String serviceRootURL,
+  protected CommonODataEntity compareEntities(final String serviceRootURL,
           final ODataPubFormat format,
-          final ODataEntity original,
+          final CommonODataEntity original,
           final int actualObjectId,
           final Collection<String> expands) {
 
@@ -405,13 +411,14 @@ public abstract class AbstractTestITCase {
       }
     }
 
-    final ODataEntityRequest req = getClient().getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
+    final ODataEntityRequest<CommonODataEntity> req = getClient().getRetrieveRequestFactory().
+            getEntityRequest(uriBuilder.build());
     req.setFormat(format);
 
-    final ODataRetrieveResponse<ODataEntity> res = req.execute();
+    final ODataRetrieveResponse<CommonODataEntity> res = req.execute();
     assertEquals(200, res.getStatusCode());
 
-    final ODataEntity actual = res.getBody();
+    final CommonODataEntity actual = res.getBody();
     assertNotNull(actual);
 
     // check defined links
@@ -427,7 +434,7 @@ public abstract class AbstractTestITCase {
 
   protected void cleanAfterCreate(
           final ODataPubFormat format,
-          final ODataEntity created,
+          final CommonODataEntity created,
           final boolean includeInline,
           final String baseUri) {
 
@@ -437,15 +444,15 @@ public abstract class AbstractTestITCase {
     if (includeInline) {
       for (ODataLink link : created.getNavigationLinks()) {
         if (link instanceof ODataInlineEntity) {
-          final ODataEntity inline = ((ODataInlineEntity) link).getEntity();
+          final CommonODataEntity inline = ((ODataInlineEntity) link).getEntity();
           if (inline.getEditLink() != null) {
             toBeDeleted.add(URIUtils.getURI(baseUri, inline.getEditLink().toASCIIString()));
           }
         }
 
         if (link instanceof ODataInlineEntitySet) {
-          final ODataEntitySet inline = ((ODataInlineEntitySet) link).getEntitySet();
-          for (ODataEntity entity : inline.getEntities()) {
+          final CommonODataEntitySet inline = ((ODataInlineEntitySet) link).getEntitySet();
+          for (CommonODataEntity entity : inline.getEntities()) {
             if (entity.getEditLink() != null) {
               toBeDeleted.add(URIUtils.getURI(baseUri, entity.getEditLink().toASCIIString()));
             }
@@ -465,7 +472,8 @@ public abstract class AbstractTestITCase {
 
       deleteRes.close();
 
-      final ODataEntityRequest retrieveReq = getClient().getRetrieveRequestFactory().getEntityRequest(link);
+      final ODataEntityRequest<CommonODataEntity> retrieveReq = getClient().getRetrieveRequestFactory().
+              getEntityRequest(link);
       // bug that needs to be fixed on the SampleService - cannot get entity not found with header
       // Accept: application/json;odata=minimalmetadata
       retrieveReq.setFormat(format == ODataPubFormat.JSON_FULL_METADATA ? ODataPubFormat.JSON : format);
@@ -483,25 +491,25 @@ public abstract class AbstractTestITCase {
   }
 
   protected void updateEntityDescription(
-          final ODataPubFormat format, final ODataEntity changes, final UpdateType type) {
+          final ODataPubFormat format, final CommonODataEntity changes, final UpdateType type) {
 
     updateEntityDescription(format, changes, type, null);
   }
 
   protected void updateEntityDescription(
-          final ODataPubFormat format, final ODataEntity changes, final UpdateType type, final String etag) {
+          final ODataPubFormat format, final CommonODataEntity changes, final UpdateType type, final String etag) {
 
     updateEntityStringProperty("Description", format, changes, type, etag);
   }
 
   protected void updateEntityStringProperty(final String propertyName,
-          final ODataPubFormat format, final ODataEntity changes, final UpdateType type, final String etag) {
+          final ODataPubFormat format, final CommonODataEntity changes, final UpdateType type, final String etag) {
 
     final URI editLink = changes.getEditLink();
 
     final String newm = "New " + propertyName + "(" + System.currentTimeMillis() + ")";
 
-    ODataProperty propertyValue = changes.getProperty(propertyName);
+    CommonODataProperty propertyValue = changes.getProperty(propertyName);
 
     final String oldm;
     if (propertyValue == null) {
@@ -513,16 +521,17 @@ public abstract class AbstractTestITCase {
 
     assertNotEquals(newm, oldm);
 
-    changes.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty(propertyName,
-            getClient().getObjectFactory().newPrimitiveValueBuilder().setText(newm).build()));
+    getClient().getBinder().add(changes,
+            getClient().getObjectFactory().newPrimitiveProperty(propertyName,
+                    getClient().getObjectFactory().newPrimitiveValueBuilder().setText(newm).build()));
 
     update(type, changes, format, etag);
 
-    final ODataEntity actual = read(format, editLink);
+    final CommonODataEntity actual = read(format, editLink);
 
     propertyValue = null;
 
-    for (ODataProperty prop : actual.getProperties()) {
+    for (CommonODataProperty prop : actual.getProperties()) {
       if (prop.getName().equals(propertyName)) {
         propertyValue = prop;
       }
@@ -533,7 +542,7 @@ public abstract class AbstractTestITCase {
   }
 
   protected void update(
-          final UpdateType type, final ODataEntity changes, final ODataPubFormat format, final String etag) {
+          final UpdateType type, final CommonODataEntity changes, final ODataPubFormat format, final String etag) {
     final ODataEntityUpdateRequest req = getClient().getCUDRequestFactory().getEntityUpdateRequest(type, changes);
 
     if (getClient().getConfiguration().isUseXHTTPMethod()) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/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 b77ebf8..01e0d7b 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
@@ -19,25 +19,26 @@
 package org.apache.olingo.client.core.it.v3;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
 
 import java.io.InputStream;
 import java.net.URI;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Future;
 import org.apache.commons.io.IOUtils;
-import org.apache.olingo.client.api.communication.request.cud.v3.UpdateType;
 import org.apache.olingo.client.api.communication.request.cud.ODataEntityUpdateRequest;
+import org.apache.olingo.client.api.communication.request.cud.v3.UpdateType;
 import org.apache.olingo.client.api.communication.request.retrieve.ODataMediaRequest;
 import org.apache.olingo.client.api.communication.request.streamed.MediaEntityCreateStreamManager;
 import org.apache.olingo.client.api.communication.request.streamed.ODataMediaEntityCreateRequest;
 import org.apache.olingo.client.api.communication.response.ODataEntityUpdateResponse;
 import org.apache.olingo.client.api.communication.response.ODataMediaEntityCreateResponse;
 import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
-import org.apache.olingo.commons.api.domain.ODataEntity;
-import org.apache.olingo.commons.api.domain.ODataEntitySet;
 import org.apache.olingo.client.api.uri.CommonURIBuilder;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
+import org.apache.olingo.commons.api.domain.v3.ODataEntity;
+import org.apache.olingo.commons.api.domain.v3.ODataEntitySet;
 import org.junit.Ignore;
 import org.junit.Test;
 
@@ -68,14 +69,15 @@ public class AsyncTestITCase extends AbstractTestITCase {
 
     final ODataRetrieveResponse<ODataEntity> entityRes = client.getRetrieveRequestFactory().
             getEntityRequest(uri).execute();
-    final ODataEntity entity = entityRes.getBody();
+    final CommonODataEntity entity = entityRes.getBody();
     entity.getAssociationLinks().clear();
     entity.getNavigationLinks().clear();
     entity.getEditMediaLinks().clear();
 
     entity.getProperties().remove(entity.getProperty("Description"));
-    entity.getProperties().add(client.getObjectFactory().newPrimitiveProperty("Description",
-            client.getObjectFactory().newPrimitiveValueBuilder().setText("AsyncTest#updateEntity").build()));
+    getClient().getBinder().add(entity,
+            client.getObjectFactory().newPrimitiveProperty("Description",
+                    client.getObjectFactory().newPrimitiveValueBuilder().setText("AsyncTest#updateEntity").build()));
 
     final ODataEntityUpdateRequest updateReq =
             client.getCUDRequestFactory().getEntityUpdateRequest(uri, UpdateType.MERGE, entity);
@@ -116,7 +118,7 @@ public class AsyncTestITCase extends AbstractTestITCase {
 
     assertEquals(201, createRes.getStatusCode());
 
-    final ODataEntity created = createRes.getBody();
+    final CommonODataEntity created = createRes.getBody();
     assertNotNull(created);
     assertEquals(2, created.getProperties().size());
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/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 1ebe190..bd1419f 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
@@ -18,11 +18,6 @@
  */
 package org.apache.olingo.client.core.it.v3;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
 import java.net.URI;
 import java.util.Collections;
 import java.util.HashSet;
@@ -39,17 +34,24 @@ import org.apache.olingo.client.api.communication.request.retrieve.ODataEntitySe
 import org.apache.olingo.client.api.communication.response.ODataDeleteResponse;
 import org.apache.olingo.client.api.communication.response.ODataEntityCreateResponse;
 import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
-import org.apache.olingo.commons.api.domain.ODataEntity;
-import org.apache.olingo.commons.api.domain.ODataEntitySet;
-import org.apache.olingo.commons.api.domain.ODataInlineEntitySet;
-import org.apache.olingo.commons.api.domain.ODataLink;
-import org.apache.olingo.commons.api.domain.ODataProperty;
-import org.apache.olingo.commons.api.format.ODataPubFormat;
 import org.apache.olingo.client.api.http.NoContentException;
 import org.apache.olingo.client.api.uri.CommonURIBuilder;
 import org.apache.olingo.client.core.uri.URIUtils;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
+import org.apache.olingo.commons.api.domain.CommonODataEntitySet;
+import org.apache.olingo.commons.api.domain.CommonODataProperty;
+import org.apache.olingo.commons.api.domain.ODataInlineEntitySet;
+import org.apache.olingo.commons.api.domain.ODataLink;
+import org.apache.olingo.commons.api.domain.v3.ODataEntity;
+import org.apache.olingo.commons.api.domain.v3.ODataEntitySet;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
+import org.apache.olingo.commons.api.format.ODataPubFormat;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
 import org.junit.Ignore;
 import org.junit.Test;
 
@@ -66,10 +68,10 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
   public void createAsAtom() {
     final ODataPubFormat format = ODataPubFormat.ATOM;
     final int id = 1;
-    final ODataEntity original = getSampleCustomerProfile(id, "Sample customer", false);
+    final CommonODataEntity original = getSampleCustomerProfile(id, "Sample customer", false);
 
     createEntity(getServiceRoot(), format, original, "Customer");
-    final ODataEntity actual = compareEntities(getServiceRoot(), format, original, id, null);
+    final CommonODataEntity actual = compareEntities(getServiceRoot(), format, original, id, null);
 
     cleanAfterCreate(format, actual, false, getServiceRoot());
   }
@@ -78,10 +80,10 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
   public void createAsJSON() {
     final ODataPubFormat format = ODataPubFormat.JSON_FULL_METADATA;
     final int id = 2;
-    final ODataEntity original = getSampleCustomerProfile(id, "Sample customer", false);
+    final CommonODataEntity original = getSampleCustomerProfile(id, "Sample customer", false);
 
     createEntity(getServiceRoot(), format, original, "Customer");
-    final ODataEntity actual = compareEntities(getServiceRoot(), format, original, id, null);
+    final CommonODataEntity actual = compareEntities(getServiceRoot(), format, original, id, null);
 
     cleanAfterCreate(format, actual, false, getServiceRoot());
   }
@@ -90,10 +92,10 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
   public void createWithInlineAsAtom() {
     final ODataPubFormat format = ODataPubFormat.ATOM;
     final int id = 3;
-    final ODataEntity original = getSampleCustomerProfile(id, "Sample customer", true);
+    final CommonODataEntity original = getSampleCustomerProfile(id, "Sample customer", true);
 
     createEntity(getServiceRoot(), format, original, "Customer");
-    final ODataEntity actual =
+    final CommonODataEntity actual =
             compareEntities(getServiceRoot(), format, original, id, Collections.<String>singleton("Info"));
 
     cleanAfterCreate(format, actual, true, getServiceRoot());
@@ -104,10 +106,10 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
     // this needs to be full, otherwise there is no mean to recognize links
     final ODataPubFormat format = ODataPubFormat.JSON_FULL_METADATA;
     final int id = 4;
-    final ODataEntity original = getSampleCustomerProfile(id, "Sample customer", true);
+    final CommonODataEntity original = getSampleCustomerProfile(id, "Sample customer", true);
 
     createEntity(getServiceRoot(), format, original, "Customer");
-    final ODataEntity actual =
+    final CommonODataEntity actual =
             compareEntities(getServiceRoot(), format, original, id, Collections.<String>singleton("Info"));
 
     cleanAfterCreate(format, actual, true, getServiceRoot());
@@ -117,13 +119,13 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
   public void createInlineWithoutLinkAsAtom() {
     final ODataPubFormat format = ODataPubFormat.ATOM;
     final int id = 5;
-    final ODataEntity original = getSampleCustomerProfile(id, "Sample customer", false);
+    final CommonODataEntity original = getSampleCustomerProfile(id, "Sample customer", false);
 
     original.addLink(client.getObjectFactory().newInlineEntity(
             "Info", null, getSampleCustomerInfo(id, "Sample Customer_Info")));
 
     createEntity(getServiceRoot(), format, original, "Customer");
-    final ODataEntity actual =
+    final CommonODataEntity actual =
             compareEntities(getServiceRoot(), format, original, id, Collections.<String>singleton("Info"));
 
     boolean found = false;
@@ -144,13 +146,13 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
   public void createInlineWithoutLinkAsJSON() {
     final ODataPubFormat format = ODataPubFormat.JSON_FULL_METADATA;
     final int id = 6;
-    final ODataEntity original = getSampleCustomerProfile(id, "Sample customer", false);
+    final CommonODataEntity original = getSampleCustomerProfile(id, "Sample customer", false);
 
     original.addLink(client.getObjectFactory().newInlineEntity(
             "Info", null, getSampleCustomerInfo(id, "Sample Customer_Info")));
 
     createEntity(getServiceRoot(), format, original, "Customer");
-    final ODataEntity actual =
+    final CommonODataEntity actual =
             compareEntities(getServiceRoot(), format, original, id, Collections.<String>singleton("Info"));
 
     boolean found = false;
@@ -170,7 +172,7 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
   @Test
   public void createWithNavigationAsAtom() {
     final ODataPubFormat format = ODataPubFormat.ATOM;
-    final ODataEntity actual = createWithNavigationLink(format, 5);
+    final CommonODataEntity actual = createWithNavigationLink(format, 5);
     cleanAfterCreate(format, actual, false, getServiceRoot());
   }
 
@@ -178,14 +180,14 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
   public void createWithNavigationAsJSON() {
     // this needs to be full, otherwise there is no mean to recognize links
     final ODataPubFormat format = ODataPubFormat.JSON_FULL_METADATA;
-    final ODataEntity actual = createWithNavigationLink(format, 6);
+    final CommonODataEntity actual = createWithNavigationLink(format, 6);
     cleanAfterCreate(format, actual, false, getServiceRoot());
   }
 
   @Test
   public void createWithFeedNavigationAsAtom() throws EdmPrimitiveTypeException {
     final ODataPubFormat format = ODataPubFormat.ATOM;
-    final ODataEntity actual = createWithFeedNavigationLink(format, 7);
+    final CommonODataEntity actual = createWithFeedNavigationLink(format, 7);
     cleanAfterCreate(format, actual, false, getServiceRoot());
   }
 
@@ -193,14 +195,14 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
   public void createWithFeedNavigationAsJSON() throws EdmPrimitiveTypeException {
     // this needs to be full, otherwise there is no mean to recognize links
     final ODataPubFormat format = ODataPubFormat.JSON_FULL_METADATA;
-    final ODataEntity actual = createWithFeedNavigationLink(format, 8);
+    final CommonODataEntity actual = createWithFeedNavigationLink(format, 8);
     cleanAfterCreate(format, actual, false, getServiceRoot());
   }
 
   @Test
   public void createWithBackNavigationAsAtom() throws EdmPrimitiveTypeException {
     final ODataPubFormat format = ODataPubFormat.ATOM;
-    final ODataEntity actual = createWithBackNavigationLink(format, 9);
+    final CommonODataEntity actual = createWithBackNavigationLink(format, 9);
     cleanAfterCreate(format, actual, true, getServiceRoot());
   }
 
@@ -208,7 +210,7 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
   public void createWithBackNavigationAsJSON() throws EdmPrimitiveTypeException {
     // this needs to be full, otherwise there is no mean to recognize links
     final ODataPubFormat format = ODataPubFormat.JSON_FULL_METADATA;
-    final ODataEntity actual = createWithBackNavigationLink(format, 10);
+    final CommonODataEntity actual = createWithBackNavigationLink(format, 10);
     cleanAfterCreate(format, actual, true, getServiceRoot());
   }
 
@@ -225,7 +227,7 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
   @Test
   public void createReturnNoContent() {
     final int id = 1;
-    final ODataEntity original = getSampleCustomerProfile(id, "Sample customer", false);
+    final CommonODataEntity original = getSampleCustomerProfile(id, "Sample customer", false);
 
     final ODataEntityCreateRequest createReq = client.getCUDRequestFactory().getEntityCreateRequest(
             client.getURIBuilder(getServiceRoot()).appendEntitySetSegment("Customer").build(), original);
@@ -253,7 +255,7 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
   @Ignore
   public void issue135() {
     final int id = 2;
-    final ODataEntity original = getSampleCustomerProfile(id, "Sample customer for issue 135", false);
+    final CommonODataEntity original = getSampleCustomerProfile(id, "Sample customer for issue 135", false);
 
     final CommonURIBuilder<?> uriBuilder = client.getURIBuilder(getServiceRoot()).appendEntitySetSegment("Customer");
     final ODataEntityCreateRequest createReq =
@@ -276,26 +278,28 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
     }
   }
 
-  private ODataEntity createWithFeedNavigationLink(final ODataPubFormat format, final int id)
+  private CommonODataEntity createWithFeedNavigationLink(final ODataPubFormat format, final int id)
           throws EdmPrimitiveTypeException {
 
     final String sampleName = "Sample customer";
-    final ODataEntity original = getSampleCustomerProfile(id, sampleName, false);
+    final CommonODataEntity original = getSampleCustomerProfile(id, sampleName, false);
 
     final Set<Integer> keys = new HashSet<Integer>();
     keys.add(-100);
     keys.add(-101);
 
     for (Integer key : keys) {
-      final ODataEntity order =
+      final CommonODataEntity order =
               client.getObjectFactory().newEntity("Microsoft.Test.OData.Services.AstoriaDefaultService.Order");
 
-      order.getProperties().add(client.getObjectFactory().newPrimitiveProperty("OrderId",
-              client.getObjectFactory().newPrimitiveValueBuilder().setValue(key).setType(EdmPrimitiveTypeKind.Int32)
-              .build()));
-      order.getProperties().add(client.getObjectFactory().newPrimitiveProperty("CustomerId",
-              client.getObjectFactory().newPrimitiveValueBuilder().setValue(id).setType(EdmPrimitiveTypeKind.Int32)
-              .build()));
+      getClient().getBinder().add(order,
+              client.getObjectFactory().newPrimitiveProperty("OrderId",
+                      client.getObjectFactory().newPrimitiveValueBuilder().setValue(key).
+                      setType(EdmPrimitiveTypeKind.Int32).build()));
+      getClient().getBinder().add(order,
+              client.getObjectFactory().newPrimitiveProperty("CustomerId",
+                      client.getObjectFactory().newPrimitiveValueBuilder().setValue(id).
+                      setType(EdmPrimitiveTypeKind.Int32).build()));
 
       final ODataEntityCreateRequest createReq = client.getCUDRequestFactory().getEntityCreateRequest(
               client.getURIBuilder(getServiceRoot()).appendEntitySetSegment("Order").build(), order);
@@ -306,24 +310,25 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
               createReq.execute().getBody().getEditLink()));
     }
 
-    final ODataEntity created = createEntity(getServiceRoot(), format, original, "Customer");
+    final CommonODataEntity 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 = compareEntities(getServiceRoot(), format, created, id, null);
+    final CommonODataEntity actual = compareEntities(getServiceRoot(), format, created, id, null);
 
     final CommonURIBuilder<?> uriBuilder = client.getURIBuilder(getServiceRoot());
     uriBuilder.appendEntitySetSegment("Customer").appendKeySegment(id).appendEntitySetSegment("Orders");
 
-    final ODataEntitySetRequest req = client.getRetrieveRequestFactory().getEntitySetRequest(uriBuilder.build());
+    final ODataEntitySetRequest<ODataEntitySet> req = client.getRetrieveRequestFactory().
+            getEntitySetRequest(uriBuilder.build());
     req.setFormat(format);
 
     final ODataRetrieveResponse<ODataEntitySet> res = req.execute();
     assertEquals(200, res.getStatusCode());
 
-    final ODataEntitySet entitySet = res.getBody();
+    final CommonODataEntitySet entitySet = res.getBody();
     assertNotNull(entitySet);
     assertEquals(2, entitySet.getCount());
 
-    for (ODataEntity entity : entitySet.getEntities()) {
+    for (CommonODataEntity entity : entitySet.getEntities()) {
       final Integer key = entity.getProperty("OrderId").getPrimitiveValue().toCastValue(Integer.class);
       final Integer customerId = entity.getProperty("CustomerId").getPrimitiveValue().toCastValue(Integer.class);
       assertTrue(keys.contains(key));
@@ -340,32 +345,32 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
     return actual;
   }
 
-  private ODataEntity createWithNavigationLink(final ODataPubFormat format, final int id) {
+  private CommonODataEntity createWithNavigationLink(final ODataPubFormat format, final int id) {
     final String sampleName = "Sample customer";
 
-    final ODataEntity original = getSampleCustomerProfile(id, sampleName, false);
+    final CommonODataEntity original = getSampleCustomerProfile(id, sampleName, false);
     original.addLink(client.getObjectFactory().newEntityNavigationLink(
             "Info", URI.create(getServiceRoot() + "/CustomerInfo(12)")));
 
-    final ODataEntity created = createEntity(getServiceRoot(), format, original, "Customer");
+    final CommonODataEntity 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 = compareEntities(getServiceRoot(), format, created, id, null);
+    final CommonODataEntity actual = compareEntities(getServiceRoot(), format, created, id, null);
 
     final CommonURIBuilder<?> uriBuilder = client.getURIBuilder(getServiceRoot());
     uriBuilder.appendEntitySetSegment("Customer").appendKeySegment(id).appendEntitySetSegment("Info");
 
-    final ODataEntityRequest req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
+    final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
     req.setFormat(format);
 
     final ODataRetrieveResponse<ODataEntity> res = req.execute();
     assertEquals(200, res.getStatusCode());
 
-    final ODataEntity info = res.getBody();
+    final CommonODataEntity info = res.getBody();
     assertNotNull(info);
 
     boolean found = false;
 
-    for (ODataProperty prop : info.getProperties()) {
+    for (CommonODataProperty prop : info.getProperties()) {
       if ("CustomerInfoId".equals(prop.getName())) {
         assertEquals("12", prop.getValue().toString());
         found = true;
@@ -377,27 +382,29 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
     return actual;
   }
 
-  private ODataEntity createWithBackNavigationLink(final ODataPubFormat format, final int id)
+  private CommonODataEntity createWithBackNavigationLink(final ODataPubFormat format, final int id)
           throws EdmPrimitiveTypeException {
 
     final String sampleName = "Sample customer";
 
-    ODataEntity customer = getSampleCustomerProfile(id, sampleName, false);
-    customer = createEntity(getServiceRoot(), format, customer, "Customer");
+    ODataEntity customer = (ODataEntity) getSampleCustomerProfile(id, sampleName, false);
+    customer = (ODataEntity) createEntity(getServiceRoot(), format, customer, "Customer");
 
     ODataEntity order = client.getObjectFactory().newEntity(
             "Microsoft.Test.OData.Services.AstoriaDefaultService.Order");
-    order.getProperties().add(client.getObjectFactory().newPrimitiveProperty("CustomerId",
-            client.getObjectFactory().newPrimitiveValueBuilder().setValue(id).
-            setType(EdmPrimitiveTypeKind.Int32).build()));
-    order.getProperties().add(client.getObjectFactory().newPrimitiveProperty("OrderId",
-            client.getObjectFactory().newPrimitiveValueBuilder().setValue(id).
-            setType(EdmPrimitiveTypeKind.Int32).build()));
+    getClient().getBinder().add(order,
+            client.getObjectFactory().newPrimitiveProperty("CustomerId",
+                    client.getObjectFactory().newPrimitiveValueBuilder().setValue(id).
+                    setType(EdmPrimitiveTypeKind.Int32).build()));
+    getClient().getBinder().add(order,
+            client.getObjectFactory().newPrimitiveProperty("OrderId",
+                    client.getObjectFactory().newPrimitiveValueBuilder().setValue(id).
+                    setType(EdmPrimitiveTypeKind.Int32).build()));
 
     order.addLink(client.getObjectFactory().newEntityNavigationLink(
             "Customer", URIUtils.getURI(getServiceRoot(), customer.getEditLink().toASCIIString())));
 
-    order = createEntity(getServiceRoot(), format, order, "Order");
+    order = (ODataEntity) createEntity(getServiceRoot(), format, order, "Order");
 
     ODataEntity changes = client.getObjectFactory().newEntity(
             "Microsoft.Test.OData.Services.AstoriaDefaultService.Customer");
@@ -406,7 +413,7 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
             "Orders", URIUtils.getURI(getServiceRoot(), order.getEditLink().toASCIIString())));
     update(UpdateType.PATCH, changes, format, null);
 
-    final ODataEntityRequest customerreq = client.getRetrieveRequestFactory().getEntityRequest(
+    final ODataEntityRequest<ODataEntity> customerreq = client.getRetrieveRequestFactory().getEntityRequest(
             URIUtils.getURI(getServiceRoot(), order.getEditLink().toASCIIString() + "/Customer"));
     customerreq.setFormat(format);
 
@@ -415,7 +422,7 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
     assertEquals(Integer.valueOf(id),
             customer.getProperty("CustomerId").getPrimitiveValue().toCastValue(Integer.class));
 
-    final ODataEntitySetRequest orderreq = client.getRetrieveRequestFactory().getEntitySetRequest(
+    final ODataEntitySetRequest<ODataEntitySet> orderreq = client.getRetrieveRequestFactory().getEntitySetRequest(
             URIUtils.getURI(getServiceRoot(), customer.getEditLink().toASCIIString() + "/Orders"));
     orderreq.setFormat(format);
 
@@ -426,7 +433,7 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
             orderres.getBody().getEntities().get(0).getProperty("OrderId").getPrimitiveValue().
             toCastValue(Integer.class));
 
-    final ODataEntityRequest req = client.getRetrieveRequestFactory().getEntityRequest(
+    final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(
             URIUtils.getURI(getServiceRoot(), customer.getEditLink().toASCIIString() + "?$expand=Orders"));
     req.setFormat(format);
 
@@ -444,27 +451,33 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
   }
 
   private void multiKey(final ODataPubFormat format) {
-    final ODataEntity message = client.getObjectFactory().newEntity(
+    final CommonODataEntity message = client.getObjectFactory().newEntity(
             "Microsoft.Test.OData.Services.AstoriaDefaultService.Message");
 
-    message.getProperties().add(client.getObjectFactory().newPrimitiveProperty("MessageId",
-            client.getObjectFactory().newPrimitiveValueBuilder().setValue(1000).
-            setType(EdmPrimitiveTypeKind.Int32).build()));
-    message.getProperties().add(client.getObjectFactory().newPrimitiveProperty("FromUsername",
-            client.getObjectFactory().newPrimitiveValueBuilder().setValue("1").
-            setType(EdmPrimitiveTypeKind.String).build()));
-    message.getProperties().add(client.getObjectFactory().newPrimitiveProperty("ToUsername",
-            client.getObjectFactory().newPrimitiveValueBuilder().setValue("xlodhxzzusxecbzptxlfxprneoxkn").
-            setType(EdmPrimitiveTypeKind.String).build()));
-    message.getProperties().add(client.getObjectFactory().newPrimitiveProperty("Subject",
-            client.getObjectFactory().newPrimitiveValueBuilder().setValue("Test subject").
-            setType(EdmPrimitiveTypeKind.String).build()));
-    message.getProperties().add(client.getObjectFactory().newPrimitiveProperty("Body",
-            client.getObjectFactory().newPrimitiveValueBuilder().setValue("Test body").
-            setType(EdmPrimitiveTypeKind.String).build()));
-    message.getProperties().add(client.getObjectFactory().newPrimitiveProperty("IsRead",
-            client.getObjectFactory().newPrimitiveValueBuilder().setValue(false).
-            setType(EdmPrimitiveTypeKind.Boolean).build()));
+    getClient().getBinder().add(message,
+            client.getObjectFactory().newPrimitiveProperty("MessageId",
+                    client.getObjectFactory().newPrimitiveValueBuilder().setValue(1000).
+                    setType(EdmPrimitiveTypeKind.Int32).build()));
+    getClient().getBinder().add(message,
+            client.getObjectFactory().newPrimitiveProperty("FromUsername",
+                    client.getObjectFactory().newPrimitiveValueBuilder().setValue("1").
+                    setType(EdmPrimitiveTypeKind.String).build()));
+    getClient().getBinder().add(message,
+            client.getObjectFactory().newPrimitiveProperty("ToUsername",
+                    client.getObjectFactory().newPrimitiveValueBuilder().setValue("xlodhxzzusxecbzptxlfxprneoxkn").
+                    setType(EdmPrimitiveTypeKind.String).build()));
+    getClient().getBinder().add(message,
+            client.getObjectFactory().newPrimitiveProperty("Subject",
+                    client.getObjectFactory().newPrimitiveValueBuilder().setValue("Test subject").
+                    setType(EdmPrimitiveTypeKind.String).build()));
+    getClient().getBinder().add(message,
+            client.getObjectFactory().newPrimitiveProperty("Body",
+                    client.getObjectFactory().newPrimitiveValueBuilder().setValue("Test body").
+                    setType(EdmPrimitiveTypeKind.String).build()));
+    getClient().getBinder().add(message,
+            client.getObjectFactory().newPrimitiveProperty("IsRead",
+                    client.getObjectFactory().newPrimitiveValueBuilder().setValue(false).
+                    setType(EdmPrimitiveTypeKind.Boolean).build()));
 
     final CommonURIBuilder<?> builder =
             client.getURIBuilder(getServiceRoot()).appendEntitySetSegment("Message");

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityRetrieveTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityRetrieveTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityRetrieveTestITCase.java
index ddcd342..1b43c47 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityRetrieveTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityRetrieveTestITCase.java
@@ -18,11 +18,6 @@
  */
 package org.apache.olingo.client.core.it.v3;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-import static org.junit.Assert.assertTrue;
-
 import java.util.LinkedHashMap;
 import java.util.List;
 import org.apache.commons.lang3.StringUtils;
@@ -30,16 +25,22 @@ import org.apache.olingo.client.api.communication.request.retrieve.ODataEntityRe
 import org.apache.olingo.client.api.communication.request.retrieve.ODataRawRequest;
 import org.apache.olingo.client.api.communication.response.ODataRawResponse;
 import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
-import org.apache.olingo.commons.api.domain.ODataEntity;
-import org.apache.olingo.commons.api.domain.ODataEntitySet;
+import org.apache.olingo.client.api.uri.CommonURIBuilder;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
+import org.apache.olingo.commons.api.domain.CommonODataEntitySet;
+import org.apache.olingo.commons.api.domain.CommonODataProperty;
 import org.apache.olingo.commons.api.domain.ODataInlineEntity;
 import org.apache.olingo.commons.api.domain.ODataInlineEntitySet;
 import org.apache.olingo.commons.api.domain.ODataLink;
-import org.apache.olingo.commons.api.domain.ODataProperty;
+import org.apache.olingo.commons.api.domain.v3.ODataEntity;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
-import org.apache.olingo.client.api.uri.CommonURIBuilder;
 import org.apache.olingo.commons.core.op.ResourceFactory;
-import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
 import org.junit.Test;
 
 /**
@@ -55,7 +56,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
     final CommonURIBuilder<?> uriBuilder = client.getURIBuilder(getServiceRoot()).
             appendEntitySetSegment("Customer").appendKeySegment(-10).expand("Info");
 
-    final ODataEntityRequest req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
+    final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
     req.setFormat(format);
 
     final ODataRetrieveResponse<ODataEntity> res = req.execute();
@@ -72,13 +73,13 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
 
     for (ODataLink link : entity.getNavigationLinks()) {
       if (link instanceof ODataInlineEntity) {
-        final ODataEntity inline = ((ODataInlineEntity) link).getEntity();
+        final CommonODataEntity inline = ((ODataInlineEntity) link).getEntity();
         assertNotNull(inline);
 
         debugEntry(client.getBinder().getEntry(
                 inline, ResourceFactory.entryClassForFormat(format == ODataPubFormat.ATOM)), "Just read");
 
-        final List<ODataProperty> properties = inline.getProperties();
+        final List<? extends CommonODataProperty> properties = inline.getProperties();
         assertEquals(2, properties.size());
 
         assertTrue(properties.get(0).getName().equals("CustomerInfoId")
@@ -108,7 +109,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
     final CommonURIBuilder<?> uriBuilder = client.getURIBuilder(getServiceRoot()).
             appendEntitySetSegment("Customer").appendKeySegment(-10).expand("Orders");
 
-    final ODataEntityRequest req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
+    final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
     req.setFormat(format);
 
     final ODataRetrieveResponse<ODataEntity> res = req.execute();
@@ -119,7 +120,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
 
     for (ODataLink link : entity.getNavigationLinks()) {
       if (link instanceof ODataInlineEntitySet) {
-        final ODataEntitySet inline = ((ODataInlineEntitySet) link).getEntitySet();
+        final CommonODataEntitySet inline = ((ODataInlineEntitySet) link).getEntitySet();
         assertNotNull(inline);
 
         debugFeed(client.getBinder().getFeed(inline, ResourceFactory.feedClassForFormat(
@@ -153,10 +154,10 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
     final ODataRawResponse res = req.execute();
     assertNotNull(res);
 
-    final ODataEntitySet entitySet = res.getBodyAs(ODataEntitySet.class);
+    final CommonODataEntitySet entitySet = res.getBodyAs(CommonODataEntitySet.class);
     assertNull(entitySet);
 
-    final ODataEntity entity = res.getBodyAs(ODataEntity.class);
+    final CommonODataEntity entity = res.getBodyAs(CommonODataEntity.class);
     assertNotNull(entity);
   }
 
@@ -179,7 +180,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
     final CommonURIBuilder<?> uriBuilder = client.getURIBuilder(getServiceRoot()).
             appendEntitySetSegment("Message").appendKeySegment(multiKey);
 
-    final ODataEntityRequest req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
+    final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
     req.setFormat(format);
 
     final ODataRetrieveResponse<ODataEntity> res = req.execute();
@@ -212,7 +213,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
     final CommonURIBuilder<?> uriBuilder =
             client.getURIBuilder(getServiceRoot()).appendEntitySetSegment("Product").appendKeySegment(-10);
 
-    final ODataEntityRequest req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
+    final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
     req.setFormat(format);
 
     final ODataRetrieveResponse<ODataEntity> res = req.execute();
@@ -221,7 +222,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
     final String etag = res.getEtag();
     assertTrue(StringUtils.isNotBlank(etag));
 
-    final ODataEntity product = res.getBody();
+    final CommonODataEntity product = res.getBody();
     assertEquals(etag, product.getETag());
   }
 
@@ -229,7 +230,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
   public void issue99() {
     final CommonURIBuilder<?> uriBuilder = client.getURIBuilder(getServiceRoot()).appendEntitySetSegment("Car");
 
-    final ODataEntityRequest req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
+    final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
     req.setFormat(ODataPubFormat.JSON);
 
     // this statement should cause an IllegalArgumentException bearing JsonParseException