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/01 16:19:00 UTC

[33/51] [abbrv] git commit: [OLINGO-200] Introducing specialization for V3 and V4 domain objects

[OLINGO-200] Introducing specialization for V3 and V4 domain objects


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

Branch: refs/heads/master
Commit: 80e5ed56d55f46e2bf5eb5933145ab5ef66ea694
Parents: ceda474
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Sat Mar 29 16:55:41 2014 +0100
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Sat Mar 29 16:55:41 2014 +0100

----------------------------------------------------------------------
 .../olingo/client/api/CommonODataClient.java    |   4 +-
 .../request/cud/CommonCUDRequestFactory.java    |  18 +-
 .../retrieve/CommonRetrieveRequestFactory.java  |  12 +-
 .../request/retrieve/ODataEntityRequest.java    |   4 +-
 .../request/retrieve/ODataEntitySetRequest.java |   5 +-
 .../request/retrieve/ODataPropertyRequest.java  |   4 +-
 .../retrieve/v3/RetrieveRequestFactory.java     |  18 +
 .../retrieve/v4/RetrieveRequestFactory.java     |  17 +
 .../response/ODataEntityCreateResponse.java     |   4 +-
 .../response/ODataEntityUpdateResponse.java     |   4 +-
 .../ODataMediaEntityCreateResponse.java         |   4 +-
 .../ODataMediaEntityUpdateResponse.java         |   4 +-
 .../response/ODataPropertyUpdateResponse.java   |   4 +-
 .../api/domain/ODataEntitySetIterator.java      |  12 +-
 .../olingo/client/api/op/CommonODataBinder.java |  33 +-
 .../olingo/client/api/op/CommonODataReader.java |  12 +-
 .../olingo/client/api/op/ODataWriter.java       |  14 +-
 .../olingo/client/api/op/v3/ODataBinder.java    |  22 ++
 .../olingo/client/api/op/v4/ODataBinder.java    |  21 ++
 .../olingo/client/api/v3/ODataClient.java       |  10 +-
 .../olingo/client/api/v4/ODataClient.java       |  10 +-
 .../olingo/client/core/AbstractODataClient.java |   9 -
 .../request/cud/AbstractCUDRequestFactory.java  |  16 +-
 .../cud/ODataEntityCreateRequestImpl.java       |  16 +-
 .../cud/ODataEntityUpdateRequestImpl.java       |  10 +-
 .../cud/ODataPropertyUpdateRequestImpl.java     |  10 +-
 .../request/invoke/ODataInvokeRequestImpl.java  |  24 +-
 .../invoke/v3/InvokeRequestFactoryImpl.java     |  18 +-
 .../AbstractRetrieveRequestFactory.java         |  18 -
 .../retrieve/ODataEntityRequestImpl.java        |  17 +-
 .../retrieve/ODataEntitySetRequestImpl.java     |  16 +-
 .../retrieve/ODataPropertyRequestImpl.java      |  19 +-
 .../retrieve/v3/RetrieveRequestFactoryImpl.java |  27 ++
 .../retrieve/v4/RetrieveRequestFactoryImpl.java |  30 +-
 .../ODataMediaEntityCreateRequestImpl.java      |   6 +-
 .../ODataMediaEntityUpdateRequestImpl.java      |   6 +-
 .../client/core/op/AbstractODataBinder.java     |  53 ++-
 .../client/core/op/AbstractODataReader.java     |  18 +-
 .../olingo/client/core/op/ODataWriterImpl.java  |  20 +-
 .../client/core/op/impl/v3/ODataBinderImpl.java |  46 +++
 .../client/core/op/impl/v4/ODataBinderImpl.java |  56 +++
 .../olingo/client/core/v3/ODataClientImpl.java  |   9 +
 .../olingo/client/core/v4/ODataClientImpl.java  |   9 +
 .../client/core/it/AbstractTestITCase.java      | 125 ++++---
 .../client/core/it/v3/AsyncTestITCase.java      |  18 +-
 .../core/it/v3/EntityCreateTestITCase.java      | 181 ++++-----
 .../core/it/v3/EntityRetrieveTestITCase.java    |  43 +--
 .../client/core/it/v3/EntitySetTestITCase.java  |  15 +-
 .../core/it/v3/EntityUpdateTestITCase.java      |  44 +--
 .../client/core/it/v3/ErrorTestITCase.java      |  13 +-
 .../core/it/v3/FilterFactoryTestITCase.java     |   4 +-
 .../client/core/it/v3/FilterTestITCase.java     |   4 +-
 .../core/it/v3/KeyAsSegmentTestITCase.java      |  21 +-
 .../core/it/v3/MediaEntityTestITCase.java       |   8 +-
 .../it/v3/NavigationLinkCreateTestITCase.java   | 159 ++++----
 .../client/core/it/v3/OpenTypeTestITCase.java   | 129 ++++---
 .../core/it/v3/PrimitiveKeysTestITCase.java     |   8 +-
 .../core/it/v3/PropertyRetrieveTestITCase.java  |  41 +-
 .../client/core/it/v3/PropertyTestITCase.java   |  29 +-
 .../core/it/v3/PropertyValueTestITCase.java     |  18 +-
 .../core/it/v3/QueryOptionsTestITCase.java      |  38 +-
 .../core/it/v4/EntityRetrieveTestITCase.java    |  52 +--
 .../client/core/it/v4/EntitySetTestITCase.java  |  18 +-
 .../core/it/v4/PropertyValueTestITCase.java     |   9 +-
 .../olingo/client/core/v3/EntitySetTest.java    |   6 +-
 .../olingo/client/core/v3/EntityTest.java       |  26 +-
 .../olingo/client/core/v3/PropertyTest.java     |  30 +-
 .../commons/api/domain/CommonODataEntity.java   | 177 +++++++++
 .../api/domain/CommonODataEntitySet.java        |  57 +++
 .../api/domain/CommonODataObjectFactory.java    | 210 +++++++++++
 .../commons/api/domain/CommonODataProperty.java |  91 +++++
 .../commons/api/domain/ODataComplexValue.java   |   6 +-
 .../olingo/commons/api/domain/ODataEntity.java  | 197 ----------
 .../commons/api/domain/ODataEntitySet.java      |  57 ---
 .../commons/api/domain/ODataInlineEntity.java   |   8 +-
 .../api/domain/ODataInlineEntitySet.java        |   8 +-
 .../commons/api/domain/ODataObjectFactory.java  | 210 -----------
 .../commons/api/domain/ODataProperty.java       |  91 -----
 .../commons/api/domain/v3/ODataEntity.java      |  32 ++
 .../commons/api/domain/v3/ODataEntitySet.java   |  29 ++
 .../api/domain/v3/ODataObjectFactory.java       |  50 +++
 .../commons/api/domain/v3/ODataProperty.java    |  25 ++
 .../commons/api/domain/v4/ODataEntity.java      |  52 +++
 .../commons/api/domain/v4/ODataEntitySet.java   |  29 ++
 .../commons/api/domain/v4/ODataEnumValue.java   |  24 ++
 .../api/domain/v4/ODataObjectFactory.java       |  52 +++
 .../commons/api/domain/v4/ODataProperty.java    |  38 ++
 .../commons/api/domain/v4/ODataValue.java       |  36 ++
 .../core/domain/AbstractODataEntity.java        | 326 ++++++++++++++++
 .../core/domain/AbstractODataEntitySet.java     |  73 ++++
 .../core/domain/AbstractODataObjectFactory.java | 133 +++++++
 .../core/domain/AbstractODataProperty.java      | 169 +++++++++
 .../core/domain/ODataComplexValueImpl.java      |  10 +-
 .../commons/core/domain/ODataEntityImpl.java    | 372 -------------------
 .../commons/core/domain/ODataEntitySetImpl.java | 104 ------
 .../core/domain/ODataObjectFactoryImpl.java     | 171 ---------
 .../commons/core/domain/ODataPropertyImpl.java  | 172 ---------
 .../commons/core/domain/v3/ODataEntityImpl.java |  46 +++
 .../core/domain/v3/ODataEntitySetImpl.java      |  51 +++
 .../core/domain/v3/ODataObjectFactoryImpl.java  |  75 ++++
 .../core/domain/v3/ODataPropertyImpl.java       |  33 ++
 .../commons/core/domain/v4/ODataEntityImpl.java |  62 ++++
 .../core/domain/v4/ODataEntitySetImpl.java      |  51 +++
 .../core/domain/v4/ODataObjectFactoryImpl.java  |  81 ++++
 .../core/domain/v4/ODataPropertyImpl.java       |  44 +++
 105 files changed, 3090 insertions(+), 2090 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonODataClient.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonODataClient.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonODataClient.java
index af904b3..ed0910a 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonODataClient.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonODataClient.java
@@ -25,7 +25,7 @@ import org.apache.olingo.client.api.communication.request.invoke.CommonInvokeReq
 import org.apache.olingo.client.api.communication.request.retrieve.CommonRetrieveRequestFactory;
 import org.apache.olingo.client.api.communication.request.streamed.CommonStreamedRequestFactory;
 import org.apache.olingo.client.api.op.ClientODataDeserializer;
-import org.apache.olingo.commons.api.domain.ODataObjectFactory;
+import org.apache.olingo.commons.api.domain.CommonODataObjectFactory;
 import org.apache.olingo.client.api.op.CommonODataBinder;
 import org.apache.olingo.client.api.op.CommonODataReader;
 import org.apache.olingo.commons.api.op.ODataSerializer;
@@ -56,7 +56,7 @@ public interface CommonODataClient {
 
   CommonODataBinder getBinder();
 
-  ODataObjectFactory getObjectFactory();
+  CommonODataObjectFactory getObjectFactory();
 
   CommonRetrieveRequestFactory getRetrieveRequestFactory();
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/cud/CommonCUDRequestFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/cud/CommonCUDRequestFactory.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/cud/CommonCUDRequestFactory.java
index 48786be..f05eb1a 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/cud/CommonCUDRequestFactory.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/cud/CommonCUDRequestFactory.java
@@ -20,10 +20,10 @@ package org.apache.olingo.client.api.communication.request.cud;
 
 import java.io.Serializable;
 import java.net.URI;
-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.ODataPrimitiveValue;
-import org.apache.olingo.commons.api.domain.ODataProperty;
+import org.apache.olingo.commons.api.domain.CommonODataProperty;
 
 /**
  * OData request factory class.
@@ -39,17 +39,19 @@ public interface CommonCUDRequestFactory extends Serializable {
    * @param entity entity to be created.
    * @return new ODataEntityCreateRequest instance.
    */
-  ODataEntityCreateRequest getEntityCreateRequest(URI targetURI, ODataEntity entity);
+  ODataEntityCreateRequest getEntityCreateRequest(URI targetURI, CommonODataEntity entity);
 
   /**
    * Gets an update request object instance.
    *
+   * @param <UT> concrete UpdateType.
    * @param targetURI edit link of the object to be updated.
    * @param type type of update to be performed.
    * @param changes changes to be applied.
    * @return new ODataEntityUpdateRequest instance.
    */
-  <UT extends UpdateType> ODataEntityUpdateRequest getEntityUpdateRequest(URI targetURI, UT type, ODataEntity changes);
+  <UT extends UpdateType> ODataEntityUpdateRequest getEntityUpdateRequest(URI targetURI, UT type,
+          CommonODataEntity changes);
 
   /**
    * Gets an update request object instance; uses entity's edit link as endpoint.
@@ -58,7 +60,7 @@ public interface CommonCUDRequestFactory extends Serializable {
    * @param entity changes to be applied.
    * @return new ODataEntityUpdateRequest instance.
    */
-  ODataEntityUpdateRequest getEntityUpdateRequest(UpdateType type, ODataEntity entity);
+  ODataEntityUpdateRequest getEntityUpdateRequest(UpdateType type, CommonODataEntity entity);
 
   /**
    * Gets a create request object instance.
@@ -81,7 +83,7 @@ public interface CommonCUDRequestFactory extends Serializable {
    * @param property value to be update.
    * @return new ODataPropertyUpdateRequest instance.
    */
-  ODataPropertyUpdateRequest getPropertyPrimitiveValueUpdateRequest(URI targetURI, ODataProperty property);
+  ODataPropertyUpdateRequest getPropertyPrimitiveValueUpdateRequest(URI targetURI, CommonODataProperty property);
 
   /**
    * Gets an update request object instance.
@@ -94,7 +96,7 @@ public interface CommonCUDRequestFactory extends Serializable {
    * @return new ODataPropertyUpdateRequest instance.
    */
   ODataPropertyUpdateRequest getPropertyComplexValueUpdateRequest(
-          URI targetURI, UpdateType type, ODataProperty property);
+          URI targetURI, UpdateType type, CommonODataProperty property);
 
   /**
    * Gets an update request object instance.
@@ -105,7 +107,7 @@ public interface CommonCUDRequestFactory extends Serializable {
    * @param property value to be update.
    * @return new ODataPropertyUpdateRequest instance.
    */
-  ODataPropertyUpdateRequest getPropertyCollectionValueUpdateRequest(URI targetURI, ODataProperty property);
+  ODataPropertyUpdateRequest getPropertyCollectionValueUpdateRequest(URI targetURI, CommonODataProperty property);
 
   /**
    * Gets an add link request object instance.

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/CommonRetrieveRequestFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/CommonRetrieveRequestFactory.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/CommonRetrieveRequestFactory.java
index f613cbc..02ca4ee 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/CommonRetrieveRequestFactory.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/CommonRetrieveRequestFactory.java
@@ -20,6 +20,9 @@ package org.apache.olingo.client.api.communication.request.retrieve;
 
 import java.io.Serializable;
 import java.net.URI;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
+import org.apache.olingo.commons.api.domain.CommonODataEntitySet;
+import org.apache.olingo.commons.api.domain.CommonODataProperty;
 
 /**
  * OData request factory class.
@@ -59,10 +62,11 @@ public interface CommonRetrieveRequestFactory extends Serializable {
   /**
    * Gets a query request returning a set of one or more OData entities.
    *
+   * @param <T> concrete ODataEntitySet implementation.
    * @param uri request URI.
    * @return new {@link ODataEntitySetRequest} instance.
    */
-  ODataEntitySetRequest getEntitySetRequest(URI uri);
+  <T extends CommonODataEntitySet> ODataEntitySetRequest<T> getEntitySetRequest(URI uri);
 
   /**
    * Gets a query request returning a set of one or more OData entities.
@@ -78,18 +82,20 @@ public interface CommonRetrieveRequestFactory extends Serializable {
   /**
    * Gets a query request returning a single OData entity.
    *
+   * @param <T> concrete ODataEntity implementation.
    * @param uri request URI.
    * @return new {@link ODataEntityRequest} instance.
    */
-  ODataEntityRequest getEntityRequest(URI uri);
+  <T extends CommonODataEntity> ODataEntityRequest<T> getEntityRequest(URI uri);
 
   /**
    * Gets a query request returning a single OData entity property.
    *
+   * @param <T> concrete ODataProperty implementation.
    * @param uri request URI.
    * @return new {@link ODataPropertyRequest} instance.
    */
-  ODataPropertyRequest getPropertyRequest(URI uri);
+  <T extends CommonODataProperty> ODataPropertyRequest<T> getPropertyRequest(URI uri);
 
   /**
    * Gets a query request returning a single OData entity property value.

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/ODataEntityRequest.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/ODataEntityRequest.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/ODataEntityRequest.java
index a22f82c..aee9602 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/ODataEntityRequest.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/ODataEntityRequest.java
@@ -18,11 +18,11 @@
  */
 package org.apache.olingo.client.api.communication.request.retrieve;
 
-import org.apache.olingo.commons.api.domain.ODataEntity;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
 
 /**
  * This class implements an OData retrieve query request returning a single entity.
  */
-public interface ODataEntityRequest extends ODataRetrieveRequest<ODataEntity, ODataPubFormat> {
+public interface ODataEntityRequest<T extends CommonODataEntity> extends ODataRetrieveRequest<T, ODataPubFormat> {
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/ODataEntitySetRequest.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/ODataEntitySetRequest.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/ODataEntitySetRequest.java
index fbafafd..865596c 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/ODataEntitySetRequest.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/ODataEntitySetRequest.java
@@ -18,11 +18,12 @@
  */
 package org.apache.olingo.client.api.communication.request.retrieve;
 
-import org.apache.olingo.commons.api.domain.ODataEntitySet;
+import org.apache.olingo.commons.api.domain.CommonODataEntitySet;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
 
 /**
  * This class implements an OData EntitySet query request.
  */
-public interface ODataEntitySetRequest extends ODataRetrieveRequest<ODataEntitySet, ODataPubFormat> {
+public interface ODataEntitySetRequest<T extends CommonODataEntitySet>
+        extends ODataRetrieveRequest<T, ODataPubFormat> {
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/ODataPropertyRequest.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/ODataPropertyRequest.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/ODataPropertyRequest.java
index 7492e11..f61783b 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/ODataPropertyRequest.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/ODataPropertyRequest.java
@@ -18,11 +18,11 @@
  */
 package org.apache.olingo.client.api.communication.request.retrieve;
 
-import org.apache.olingo.commons.api.domain.ODataProperty;
+import org.apache.olingo.commons.api.domain.CommonODataProperty;
 import org.apache.olingo.commons.api.format.ODataFormat;
 
 /**
  * This class implements an OData entity property query request.
  */
-public interface ODataPropertyRequest extends ODataRetrieveRequest<ODataProperty, ODataFormat> {
+public interface ODataPropertyRequest<T extends CommonODataProperty> extends ODataRetrieveRequest<T, ODataFormat> {
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/v3/RetrieveRequestFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/v3/RetrieveRequestFactory.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/v3/RetrieveRequestFactory.java
index a0d667a..25276fe 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/v3/RetrieveRequestFactory.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/v3/RetrieveRequestFactory.java
@@ -20,9 +20,27 @@ package org.apache.olingo.client.api.communication.request.retrieve.v3;
 
 import java.net.URI;
 import org.apache.olingo.client.api.communication.request.retrieve.CommonRetrieveRequestFactory;
+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.commons.api.domain.v3.ODataEntity;
+import org.apache.olingo.commons.api.domain.v3.ODataEntitySet;
+import org.apache.olingo.commons.api.domain.v3.ODataProperty;
 
 public interface RetrieveRequestFactory extends CommonRetrieveRequestFactory {
 
+  @SuppressWarnings("unchecked")
+  @Override
+  ODataEntitySetRequest<ODataEntitySet> getEntitySetRequest(URI uri);
+
+  @SuppressWarnings("unchecked")
+  @Override
+  ODataEntityRequest<ODataEntity> getEntityRequest(URI uri);
+
+  @SuppressWarnings("unchecked")
+  @Override
+  ODataPropertyRequest<ODataProperty> getPropertyRequest(URI uri);
+
   /**
    * Gets a query request returning a single OData link.
    *

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/v4/RetrieveRequestFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/v4/RetrieveRequestFactory.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/v4/RetrieveRequestFactory.java
index 55005cd..8d8184b 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/v4/RetrieveRequestFactory.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/v4/RetrieveRequestFactory.java
@@ -18,7 +18,24 @@
  */
 package org.apache.olingo.client.api.communication.request.retrieve.v4;
 
+import java.net.URI;
 import org.apache.olingo.client.api.communication.request.retrieve.CommonRetrieveRequestFactory;
+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.commons.api.domain.v4.ODataEntity;
+import org.apache.olingo.commons.api.domain.v4.ODataEntitySet;
+import org.apache.olingo.commons.api.domain.v4.ODataProperty;
 
+@SuppressWarnings("unchecked")
 public interface RetrieveRequestFactory extends CommonRetrieveRequestFactory {
+
+  @Override
+  ODataEntitySetRequest<ODataEntitySet> getEntitySetRequest(URI uri);
+
+  @Override
+  ODataEntityRequest<ODataEntity> getEntityRequest(URI uri);
+
+  @Override
+  ODataPropertyRequest<ODataProperty> getPropertyRequest(URI uri);
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataEntityCreateResponse.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataEntityCreateResponse.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataEntityCreateResponse.java
index 5fd7fb8..0407422 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataEntityCreateResponse.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataEntityCreateResponse.java
@@ -18,7 +18,7 @@
  */
 package org.apache.olingo.client.api.communication.response;
 
-import org.apache.olingo.commons.api.domain.ODataEntity;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
 
 /**
  * This class implements the response to an OData entity create request.
@@ -32,5 +32,5 @@ public interface ODataEntityCreateResponse extends ODataResponse {
    *
    * @return created object.
    */
-  ODataEntity getBody();
+  CommonODataEntity getBody();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataEntityUpdateResponse.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataEntityUpdateResponse.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataEntityUpdateResponse.java
index 6b84630..59b0112 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataEntityUpdateResponse.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataEntityUpdateResponse.java
@@ -18,7 +18,7 @@
  */
 package org.apache.olingo.client.api.communication.response;
 
-import org.apache.olingo.commons.api.domain.ODataEntity;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
 
 /**
  * This class implements the response to an OData update request.
@@ -32,5 +32,5 @@ public interface ODataEntityUpdateResponse extends ODataResponse {
    *
    * @return updated object.
    */
-  ODataEntity getBody();
+  CommonODataEntity getBody();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/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 ea3b8b7..c29193b 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
@@ -18,7 +18,7 @@
  */
 package org.apache.olingo.client.api.communication.response;
 
-import org.apache.olingo.commons.api.domain.ODataEntity;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
 
 /**
  * This class implements the response to an Odata media entity create request.
@@ -32,5 +32,5 @@ public interface ODataMediaEntityCreateResponse extends ODataResponse {
    *
    * @return created object.
    */
-  ODataEntity getBody();
+  CommonODataEntity getBody();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/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 f55dac8..97aab03 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
@@ -18,7 +18,7 @@
  */
 package org.apache.olingo.client.api.communication.response;
 
-import org.apache.olingo.commons.api.domain.ODataEntity;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
 
 /**
  * This class implements the response to an Odata media entity update request.
@@ -32,5 +32,5 @@ public interface ODataMediaEntityUpdateResponse extends ODataResponse {
    *
    * @return updated object.
    */
-  ODataEntity getBody();
+  CommonODataEntity getBody();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataPropertyUpdateResponse.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataPropertyUpdateResponse.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataPropertyUpdateResponse.java
index 23bfc1e..61f5dbd 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataPropertyUpdateResponse.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/response/ODataPropertyUpdateResponse.java
@@ -18,7 +18,7 @@
  */
 package org.apache.olingo.client.api.communication.response;
 
-import org.apache.olingo.commons.api.domain.ODataProperty;
+import org.apache.olingo.commons.api.domain.CommonODataProperty;
 
 /**
  * This class implements the response to an OData update entity property request.
@@ -32,5 +32,5 @@ public interface ODataPropertyUpdateResponse extends ODataResponse {
    *
    * @return updated object.
    */
-  ODataProperty getBody();
+  CommonODataProperty getBody();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-api/src/main/java/org/apache/olingo/client/api/domain/ODataEntitySetIterator.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/domain/ODataEntitySetIterator.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/domain/ODataEntitySetIterator.java
index e5eeeed..66e3476 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/domain/ODataEntitySetIterator.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/domain/ODataEntitySetIterator.java
@@ -32,8 +32,8 @@ import org.apache.olingo.client.api.CommonODataClient;
 import org.apache.olingo.commons.api.Constants;
 import org.apache.olingo.commons.api.data.Entry;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
-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.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -42,7 +42,7 @@ import org.slf4j.LoggerFactory;
  * <br/>
  * <b>Please don't forget to call the <tt>close()>/<tt> method when not needed any more.</b>
  */
-public class ODataEntitySetIterator implements Iterator<ODataEntity> {
+public class ODataEntitySetIterator implements Iterator<CommonODataEntity> {
 
   /**
    * Logger.
@@ -59,7 +59,7 @@ public class ODataEntitySetIterator implements Iterator<ODataEntity> {
 
   private Entry cached;
 
-  private ODataEntitySet entitySet;
+  private CommonODataEntitySet entitySet;
 
   private final ByteArrayOutputStream osFeed;
 
@@ -127,9 +127,9 @@ public class ODataEntitySetIterator implements Iterator<ODataEntity> {
    * {@inheritDoc }
    */
   @Override
-  public ODataEntity next() {
+  public CommonODataEntity next() {
     if (hasNext()) {
-      final ODataEntity res = odataClient.getBinder().getODataEntity(cached);
+      final CommonODataEntity res = odataClient.getBinder().getODataEntity(cached);
       cached = null;
       return res;
     }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-api/src/main/java/org/apache/olingo/client/api/op/CommonODataBinder.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/CommonODataBinder.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/op/CommonODataBinder.java
index 38fe16f..14fa946 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/CommonODataBinder.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/op/CommonODataBinder.java
@@ -25,10 +25,10 @@ import org.apache.olingo.commons.api.data.Feed;
 import org.apache.olingo.commons.api.data.Link;
 import org.apache.olingo.commons.api.data.Property;
 import org.apache.olingo.client.api.data.ServiceDocument;
-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.ODataLink;
-import org.apache.olingo.commons.api.domain.ODataProperty;
+import org.apache.olingo.commons.api.domain.CommonODataProperty;
 import org.apache.olingo.commons.api.domain.ODataServiceDocument;
 
 public interface CommonODataBinder extends Serializable {
@@ -40,7 +40,7 @@ public interface CommonODataBinder extends Serializable {
    * @param reference reference class.
    * @return <tt>Feed</tt> object.
    */
-  Feed getFeed(ODataEntitySet feed, Class<? extends Feed> reference);
+  Feed getFeed(CommonODataEntitySet feed, Class<? extends Feed> reference);
 
   /**
    * Gets an <tt>Entry</tt> from the given OData entity.
@@ -49,7 +49,7 @@ public interface CommonODataBinder extends Serializable {
    * @param reference reference class.
    * @return <tt>Entry</tt> object.
    */
-  Entry getEntry(ODataEntity entity, Class<? extends Entry> reference);
+  Entry getEntry(CommonODataEntity entity, Class<? extends Entry> reference);
 
   /**
    * Gets an <tt>Entry</tt> from the given OData entity.
@@ -59,7 +59,7 @@ public interface CommonODataBinder extends Serializable {
    * @param setType whether to explicitly output type information.
    * @return <tt>Entry</tt> object.
    */
-  Entry getEntry(ODataEntity entity, Class<? extends Entry> reference, boolean setType);
+  Entry getEntry(CommonODataEntity entity, Class<? extends Entry> reference, boolean setType);
 
   /**
    * Gets a <tt>Link</tt> from the given OData link.
@@ -78,7 +78,16 @@ public interface CommonODataBinder extends Serializable {
    * @param setType whether to explicitly output type information.
    * @return <tt>Property</tt> object.
    */
-  Property getProperty(ODataProperty property, Class<? extends Entry> reference, boolean setType);
+  Property getProperty(CommonODataProperty property, Class<? extends Entry> reference, boolean setType);
+
+  /**
+   * Adds the given property to the given entity.
+   *
+   * @param entity OData entity.
+   * @param property OData property.
+   * @return whether add was successful or not.
+   */
+  boolean add(CommonODataEntity entity, CommonODataProperty property);
 
   /**
    * Gets <tt>ODataServiceDocument</tt> from the given service document resource.
@@ -94,7 +103,7 @@ public interface CommonODataBinder extends Serializable {
    * @param resource feed resource.
    * @return <tt>ODataEntitySet</tt> object.
    */
-  ODataEntitySet getODataEntitySet(Feed resource);
+  CommonODataEntitySet getODataEntitySet(Feed resource);
 
   /**
    * Gets <tt>ODataEntitySet</tt> from the given feed resource.
@@ -103,7 +112,7 @@ public interface CommonODataBinder extends Serializable {
    * @param defaultBaseURI default base URI.
    * @return <tt>ODataEntitySet</tt> object.
    */
-  ODataEntitySet getODataEntitySet(Feed resource, URI defaultBaseURI);
+  CommonODataEntitySet getODataEntitySet(Feed resource, URI defaultBaseURI);
 
   /**
    * Gets <tt>ODataEntity</tt> from the given entry resource.
@@ -111,7 +120,7 @@ public interface CommonODataBinder extends Serializable {
    * @param resource entry resource.
    * @return <tt>ODataEntity</tt> object.
    */
-  ODataEntity getODataEntity(Entry resource);
+  CommonODataEntity getODataEntity(Entry resource);
 
   /**
    * Gets <tt>ODataEntity</tt> from the given entry resource.
@@ -120,7 +129,7 @@ public interface CommonODataBinder extends Serializable {
    * @param defaultBaseURI default base URI.
    * @return <tt>ODataEntity</tt> object.
    */
-  ODataEntity getODataEntity(Entry resource, URI defaultBaseURI);
+  CommonODataEntity getODataEntity(Entry resource, URI defaultBaseURI);
 
   /**
    * Gets an <tt>ODataProperty</tt> from the given property resource.
@@ -128,5 +137,5 @@ public interface CommonODataBinder extends Serializable {
    * @param property property resource.
    * @return <tt>ODataProperty</tt> object.
    */
-  ODataProperty getODataProperty(Property property);
+  CommonODataProperty getODataProperty(Property property);
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-api/src/main/java/org/apache/olingo/client/api/op/CommonODataReader.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/CommonODataReader.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/op/CommonODataReader.java
index f13e0ac..923ac23 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/CommonODataReader.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/op/CommonODataReader.java
@@ -24,9 +24,9 @@ import java.util.List;
 import org.apache.olingo.client.api.edm.xml.Schema;
 import org.apache.olingo.commons.api.data.Container;
 import org.apache.olingo.commons.api.domain.ODataError;
-import org.apache.olingo.commons.api.domain.ODataEntity;
-import org.apache.olingo.commons.api.domain.ODataEntitySet;
-import org.apache.olingo.commons.api.domain.ODataProperty;
+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.ODataServiceDocument;
 import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.format.ODataFormat;
@@ -74,7 +74,7 @@ public interface CommonODataReader extends Serializable {
    * @param format de-serialize as AtomFeed or JSONFeed
    * @return de-serialized entity set.
    */
-  ODataEntitySet readEntitySet(InputStream input, ODataPubFormat format);
+  CommonODataEntitySet readEntitySet(InputStream input, ODataPubFormat format);
 
   /**
    * Parses a stream taking care to de-serializes the first OData entity found.
@@ -83,7 +83,7 @@ public interface CommonODataReader extends Serializable {
    * @param format de-serialize as AtomEntry or JSONEntry
    * @return entity de-serialized.
    */
-  ODataEntity readEntity(InputStream input, ODataPubFormat format);
+  CommonODataEntity readEntity(InputStream input, ODataPubFormat format);
 
   /**
    * Parses a stream taking care to de-serialize the first OData entity property found.
@@ -92,7 +92,7 @@ public interface CommonODataReader extends Serializable {
    * @param format de-serialize as XML or JSON
    * @return OData entity property de-serialized.
    */
-  ODataProperty readProperty(InputStream input, ODataFormat format);
+  CommonODataProperty readProperty(InputStream input, ODataFormat format);
 
   /**
    * Parses a stream into an OData error.

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-api/src/main/java/org/apache/olingo/client/api/op/ODataWriter.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/ODataWriter.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/op/ODataWriter.java
index b83b2cd..a7ead37 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/ODataWriter.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/op/ODataWriter.java
@@ -21,9 +21,9 @@ package org.apache.olingo.client.api.op;
 import java.io.InputStream;
 import java.io.Serializable;
 import java.util.Collection;
-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;
 
@@ -43,7 +43,7 @@ public interface ODataWriter extends Serializable {
    * @param format serialization format.
    * @return stream of serialized objects.
    */
-  InputStream writeEntities(Collection<ODataEntity> entities, ODataPubFormat format);
+  InputStream writeEntities(Collection<CommonODataEntity> entities, ODataPubFormat format);
 
   /**
    * Writes a collection of OData entities.
@@ -53,7 +53,7 @@ public interface ODataWriter extends Serializable {
    * @param outputType whether to explicitly output type information.
    * @return stream of serialized objects.
    */
-  InputStream writeEntities(Collection<ODataEntity> entities, ODataPubFormat format, boolean outputType);
+  InputStream writeEntities(Collection<CommonODataEntity> entities, ODataPubFormat format, boolean outputType);
 
   /**
    * Serializes a single OData entity.
@@ -62,7 +62,7 @@ public interface ODataWriter extends Serializable {
    * @param format serialization format.
    * @return stream of serialized object.
    */
-  InputStream writeEntity(ODataEntity entity, ODataPubFormat format);
+  InputStream writeEntity(CommonODataEntity entity, ODataPubFormat format);
 
   /**
    * Serializes a single OData entity.
@@ -72,7 +72,7 @@ public interface ODataWriter extends Serializable {
    * @param outputType whether to explicitly output type information.
    * @return stream of serialized object.
    */
-  InputStream writeEntity(ODataEntity entity, ODataPubFormat format, boolean outputType);
+  InputStream writeEntity(CommonODataEntity entity, ODataPubFormat format, boolean outputType);
 
   /**
    * Writes a single OData entity property.
@@ -81,7 +81,7 @@ public interface ODataWriter extends Serializable {
    * @param format serialization format.
    * @return stream of serialized object.
    */
-  InputStream writeProperty(ODataProperty property, ODataFormat format);
+  InputStream writeProperty(CommonODataProperty property, ODataFormat format);
 
   /**
    * Writes an OData link.

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v3/ODataBinder.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v3/ODataBinder.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v3/ODataBinder.java
index 6ea90ba..52cb625 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v3/ODataBinder.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v3/ODataBinder.java
@@ -18,12 +18,34 @@
  */
 package org.apache.olingo.client.api.op.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.CommonODataBinder;
+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.v3.ODataEntity;
+import org.apache.olingo.commons.api.domain.v3.ODataEntitySet;
+import org.apache.olingo.commons.api.domain.v3.ODataProperty;
 
 public interface ODataBinder extends CommonODataBinder {
 
+  @Override
+  ODataEntitySet getODataEntitySet(Feed resource);
+
+  @Override
+  ODataEntitySet getODataEntitySet(Feed resource, URI defaultBaseURI);
+
+  @Override
+  ODataEntity getODataEntity(Entry resource);
+
+  @Override
+  ODataEntity getODataEntity(Entry resource, URI defaultBaseURI);
+
+  @Override
+  ODataProperty getODataProperty(Property property);
+
   /**
    * Gets <tt>ODataLinkCollection</tt> from the given link collection resource.
    *

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v4/ODataBinder.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v4/ODataBinder.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v4/ODataBinder.java
index 1397c47..f51c798 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v4/ODataBinder.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/op/v4/ODataBinder.java
@@ -18,8 +18,29 @@
  */
 package org.apache.olingo.client.api.op.v4;
 
+import java.net.URI;
 import org.apache.olingo.client.api.op.CommonODataBinder;
+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.v4.ODataEntity;
+import org.apache.olingo.commons.api.domain.v4.ODataEntitySet;
+import org.apache.olingo.commons.api.domain.v4.ODataProperty;
 
 public interface ODataBinder extends CommonODataBinder {
 
+  @Override
+  ODataEntitySet getODataEntitySet(Feed resource);
+
+  @Override
+  ODataEntitySet getODataEntitySet(Feed resource, URI defaultBaseURI);
+
+  @Override
+  ODataEntity getODataEntity(Entry resource);
+
+  @Override
+  ODataEntity getODataEntity(Entry resource, URI defaultBaseURI);
+
+  @Override
+  ODataProperty getODataProperty(Property property);
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-api/src/main/java/org/apache/olingo/client/api/v3/ODataClient.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/v3/ODataClient.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/v3/ODataClient.java
index 5959796..81bf6dc 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/v3/ODataClient.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/v3/ODataClient.java
@@ -29,10 +29,14 @@ import org.apache.olingo.client.api.op.v3.ODataDeserializer;
 import org.apache.olingo.client.api.op.v3.ODataReader;
 import org.apache.olingo.client.api.uri.v3.URIBuilder;
 import org.apache.olingo.client.api.uri.v3.FilterFactory;
+import org.apache.olingo.commons.api.domain.v3.ODataObjectFactory;
 
 public interface ODataClient extends CommonODataClient {
 
   @Override
+  Configuration getConfiguration();
+
+  @Override
   ODataDeserializer getDeserializer();
 
   @Override
@@ -42,15 +46,15 @@ public interface ODataClient extends CommonODataClient {
   ODataBinder getBinder();
 
   @Override
-  Configuration getConfiguration();
-
-  @Override
   URIBuilder getURIBuilder(String serviceRoot);
 
   @Override
   FilterFactory getFilterFactory();
 
   @Override
+  ODataObjectFactory getObjectFactory();
+
+  @Override
   RetrieveRequestFactory getRetrieveRequestFactory();
 
   @Override

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-api/src/main/java/org/apache/olingo/client/api/v4/ODataClient.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/v4/ODataClient.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/v4/ODataClient.java
index afe3c70..51abf99 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/v4/ODataClient.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/v4/ODataClient.java
@@ -29,10 +29,14 @@ import org.apache.olingo.client.api.op.v4.ODataDeserializer;
 import org.apache.olingo.client.api.op.v4.ODataReader;
 import org.apache.olingo.client.api.uri.v4.URIBuilder;
 import org.apache.olingo.client.api.uri.v4.FilterFactory;
+import org.apache.olingo.commons.api.domain.v4.ODataObjectFactory;
 
 public interface ODataClient extends CommonODataClient {
 
   @Override
+  Configuration getConfiguration();
+
+  @Override
   ODataDeserializer getDeserializer();
 
   @Override
@@ -42,15 +46,15 @@ public interface ODataClient extends CommonODataClient {
   ODataBinder getBinder();
 
   @Override
-  Configuration getConfiguration();
-
-  @Override
   URIBuilder getURIBuilder(String serviceRoot);
 
   @Override
   FilterFactory getFilterFactory();
 
   @Override
+  ODataObjectFactory getObjectFactory();
+
+  @Override
   RetrieveRequestFactory getRetrieveRequestFactory();
 
   @Override

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/80e5ed56/lib/client-core/src/main/java/org/apache/olingo/client/core/AbstractODataClient.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/AbstractODataClient.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/AbstractODataClient.java
index 405f95d..57b24df 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/AbstractODataClient.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/AbstractODataClient.java
@@ -19,9 +19,7 @@
 package org.apache.olingo.client.core;
 
 import org.apache.olingo.client.api.CommonODataClient;
-import org.apache.olingo.commons.api.domain.ODataObjectFactory;
 import org.apache.olingo.client.api.op.ODataWriter;
-import org.apache.olingo.commons.core.domain.ODataObjectFactoryImpl;
 import org.apache.olingo.client.core.op.ODataWriterImpl;
 
 public abstract class AbstractODataClient implements CommonODataClient {
@@ -30,16 +28,9 @@ public abstract class AbstractODataClient implements CommonODataClient {
 
   private final ODataWriter writer = new ODataWriterImpl(this);
 
-  private final ODataObjectFactory objectFactory = new ODataObjectFactoryImpl(getServiceVersion());
-
   @Override
   public ODataWriter getWriter() {
     return writer;
   }
 
-  @Override
-  public ODataObjectFactory getObjectFactory() {
-    return objectFactory;
-  }
-
 }

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/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 e5bb42e..ae55269 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
@@ -29,10 +29,10 @@ import org.apache.olingo.client.api.communication.request.cud.ODataLinkUpdateReq
 import org.apache.olingo.client.api.communication.request.cud.ODataPropertyUpdateRequest;
 import org.apache.olingo.client.api.communication.request.cud.ODataValueUpdateRequest;
 import org.apache.olingo.client.api.communication.request.cud.UpdateType;
-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.ODataPrimitiveValue;
-import org.apache.olingo.commons.api.domain.ODataProperty;
+import org.apache.olingo.commons.api.domain.CommonODataProperty;
 import org.apache.olingo.client.api.http.HttpMethod;
 
 public abstract class AbstractCUDRequestFactory implements CommonCUDRequestFactory {
@@ -46,13 +46,13 @@ public abstract class AbstractCUDRequestFactory implements CommonCUDRequestFacto
   }
 
   @Override
-  public ODataEntityCreateRequest getEntityCreateRequest(final URI targetURI, final ODataEntity entity) {
+  public ODataEntityCreateRequest getEntityCreateRequest(final URI targetURI, final CommonODataEntity entity) {
     return new ODataEntityCreateRequestImpl(client, targetURI, entity);
   }
 
   @Override
   public ODataEntityUpdateRequest getEntityUpdateRequest(
-          final URI targetURI, final UpdateType type, final ODataEntity changes) {
+          final URI targetURI, final UpdateType type, final CommonODataEntity changes) {
 
     final ODataEntityUpdateRequest req;
 
@@ -67,7 +67,7 @@ public abstract class AbstractCUDRequestFactory implements CommonCUDRequestFacto
   }
 
   @Override
-  public ODataEntityUpdateRequest getEntityUpdateRequest(final UpdateType type, final ODataEntity entity) {
+  public ODataEntityUpdateRequest getEntityUpdateRequest(final UpdateType type, final CommonODataEntity entity) {
     if (entity.getEditLink() == null) {
       throw new IllegalArgumentException("No edit link found");
     }
@@ -102,7 +102,7 @@ public abstract class AbstractCUDRequestFactory implements CommonCUDRequestFacto
 
   @Override
   public ODataPropertyUpdateRequest getPropertyPrimitiveValueUpdateRequest(
-          final URI targetURI, final ODataProperty property) {
+          final URI targetURI, final CommonODataProperty property) {
 
     if (!property.hasPrimitiveValue()) {
       throw new IllegalArgumentException("A primitive value is required");
@@ -122,7 +122,7 @@ public abstract class AbstractCUDRequestFactory implements CommonCUDRequestFacto
 
   @Override
   public ODataPropertyUpdateRequest getPropertyComplexValueUpdateRequest(
-          final URI targetURI, final UpdateType type, final ODataProperty property) {
+          final URI targetURI, final UpdateType type, final CommonODataProperty property) {
 
     if (!property.hasComplexValue()) {
       throw new IllegalArgumentException("A complex value is required");
@@ -142,7 +142,7 @@ public abstract class AbstractCUDRequestFactory implements CommonCUDRequestFacto
 
   @Override
   public ODataPropertyUpdateRequest getPropertyCollectionValueUpdateRequest(
-          final URI targetURI, final ODataProperty property) {
+          final URI targetURI, final CommonODataProperty property) {
 
     if (!property.hasCollectionValue()) {
       throw new IllegalArgumentException("A collection value is required");

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/cud/ODataEntityCreateRequestImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/ODataEntityCreateRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/ODataEntityCreateRequestImpl.java
index 8b9965f..f8bff7e 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/ODataEntityCreateRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/ODataEntityCreateRequestImpl.java
@@ -28,7 +28,7 @@ import org.apache.olingo.client.api.CommonODataClient;
 import org.apache.olingo.client.api.communication.request.ODataBatchableRequest;
 import org.apache.olingo.client.api.communication.request.cud.ODataEntityCreateRequest;
 import org.apache.olingo.client.api.communication.response.ODataEntityCreateResponse;
-import org.apache.olingo.commons.api.domain.ODataEntity;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.client.core.uri.URIUtils;
@@ -46,7 +46,7 @@ public class ODataEntityCreateRequestImpl extends AbstractODataBasicRequest<ODat
   /**
    * Entity to be created.
    */
-  private final ODataEntity entity;
+  private final CommonODataEntity entity;
 
   /**
    * Constructor.
@@ -55,7 +55,9 @@ public class ODataEntityCreateRequestImpl extends AbstractODataBasicRequest<ODat
    * @param targetURI entity set URI.
    * @param entity entity to be created.
    */
-  ODataEntityCreateRequestImpl(final CommonODataClient odataClient, final URI targetURI, final ODataEntity entity) {
+  ODataEntityCreateRequestImpl(final CommonODataClient odataClient, final URI targetURI,
+          final CommonODataEntity entity) {
+
     super(odataClient, ODataPubFormat.class, HttpMethod.POST, targetURI);
     this.entity = entity;
   }
@@ -88,7 +90,7 @@ public class ODataEntityCreateRequestImpl extends AbstractODataBasicRequest<ODat
    */
   private class ODataEntityCreateResponseImpl extends AbstractODataResponse implements ODataEntityCreateResponse {
 
-    private ODataEntity entity = null;
+    private CommonODataEntity entity = null;
 
     /**
      * Constructor.
@@ -112,12 +114,12 @@ public class ODataEntityCreateRequestImpl extends AbstractODataBasicRequest<ODat
      * {@inheritDoc }
      */
     @Override
-    public ODataEntity getBody() {
+    public CommonODataEntity getBody() {
       if (entity == null) {
         try {
-          final Container<Entry> container = odataClient.getDeserializer().toEntry(getRawResponse(), 
+          final Container<Entry> container = odataClient.getDeserializer().toEntry(getRawResponse(),
                   ODataPubFormat.fromString(getAccept()));
-          
+
           entity = odataClient.getBinder().getODataEntity(extractFromContainer(container));
         } finally {
           this.close();

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/cud/ODataEntityUpdateRequestImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/ODataEntityUpdateRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/ODataEntityUpdateRequestImpl.java
index 693582a..dde98a4 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/ODataEntityUpdateRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/ODataEntityUpdateRequestImpl.java
@@ -28,7 +28,7 @@ import org.apache.olingo.client.api.CommonODataClient;
 import org.apache.olingo.client.api.communication.request.ODataBatchableRequest;
 import org.apache.olingo.client.api.communication.request.cud.ODataEntityUpdateRequest;
 import org.apache.olingo.client.api.communication.response.ODataEntityUpdateResponse;
-import org.apache.olingo.commons.api.domain.ODataEntity;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.client.core.uri.URIUtils;
@@ -46,7 +46,7 @@ public class ODataEntityUpdateRequestImpl extends AbstractODataBasicRequest<ODat
   /**
    * Changes to be applied.
    */
-  private final ODataEntity changes;
+  private final CommonODataEntity changes;
 
   /**
    * Constructor.
@@ -57,7 +57,7 @@ public class ODataEntityUpdateRequestImpl extends AbstractODataBasicRequest<ODat
    * @param changes changes to be applied.
    */
   ODataEntityUpdateRequestImpl(final CommonODataClient odataClient,
-          final HttpMethod method, final URI uri, final ODataEntity changes) {
+          final HttpMethod method, final URI uri, final CommonODataEntity changes) {
 
     super(odataClient, ODataPubFormat.class, method, uri);
     this.changes = changes;
@@ -94,7 +94,7 @@ public class ODataEntityUpdateRequestImpl extends AbstractODataBasicRequest<ODat
     /**
      * Changes.
      */
-    private ODataEntity entity = null;
+    private CommonODataEntity entity = null;
 
     /**
      * Constructor.
@@ -118,7 +118,7 @@ public class ODataEntityUpdateRequestImpl extends AbstractODataBasicRequest<ODat
      * {@inheritDoc ]
      */
     @Override
-    public ODataEntity getBody() {
+    public CommonODataEntity getBody() {
       if (entity == null) {
         try {
           final Container<Entry> container = odataClient.getDeserializer().toEntry(getRawResponse(), 

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/cud/ODataPropertyUpdateRequestImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/ODataPropertyUpdateRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/ODataPropertyUpdateRequestImpl.java
index 5b0f9fb..7345d30 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/ODataPropertyUpdateRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/cud/ODataPropertyUpdateRequestImpl.java
@@ -28,7 +28,7 @@ import org.apache.olingo.client.api.CommonODataClient;
 import org.apache.olingo.client.api.communication.request.ODataBatchableRequest;
 import org.apache.olingo.client.api.communication.request.cud.ODataPropertyUpdateRequest;
 import org.apache.olingo.client.api.communication.response.ODataPropertyUpdateResponse;
-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.client.api.http.HttpMethod;
 import org.apache.olingo.client.core.uri.URIUtils;
@@ -46,7 +46,7 @@ public class ODataPropertyUpdateRequestImpl extends AbstractODataBasicRequest<OD
   /**
    * Value to be created.
    */
-  private final ODataProperty property;
+  private final CommonODataProperty property;
 
   /**
    * Constructor.
@@ -57,7 +57,7 @@ public class ODataPropertyUpdateRequestImpl extends AbstractODataBasicRequest<OD
    * @param property value to be created.
    */
   ODataPropertyUpdateRequestImpl(final CommonODataClient odataClient,
-          final HttpMethod method, final URI targetURI, final ODataProperty property) {
+          final HttpMethod method, final URI targetURI, final CommonODataProperty property) {
 
     super(odataClient, ODataFormat.class, method, targetURI);
     // set request body
@@ -92,7 +92,7 @@ public class ODataPropertyUpdateRequestImpl extends AbstractODataBasicRequest<OD
    */
   private class ODataPropertyUpdateResponseImpl extends AbstractODataResponse implements ODataPropertyUpdateResponse {
 
-    private ODataProperty property = null;
+    private CommonODataProperty property = null;
 
     /**
      * Constructor.
@@ -116,7 +116,7 @@ public class ODataPropertyUpdateRequestImpl extends AbstractODataBasicRequest<OD
      * {@inheritDoc }
      */
     @Override
-    public ODataProperty getBody() {
+    public CommonODataProperty getBody() {
       if (property == null) {
         try {
           final Container<Property> container = odataClient.getDeserializer().toProperty(getRawResponse(),

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/invoke/ODataInvokeRequestImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/ODataInvokeRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/ODataInvokeRequestImpl.java
index 213a886..4e7be37 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/ODataInvokeRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/ODataInvokeRequestImpl.java
@@ -25,6 +25,7 @@ import java.net.URISyntaxException;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import org.apache.commons.io.IOUtils;
+import org.apache.commons.lang3.StringUtils;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.HttpClient;
 import org.apache.http.client.methods.HttpPost;
@@ -35,10 +36,10 @@ import org.apache.olingo.client.api.communication.request.ODataBatchableRequest;
 import org.apache.olingo.client.api.communication.request.invoke.ODataInvokeRequest;
 import org.apache.olingo.client.api.communication.request.invoke.ODataNoContent;
 import org.apache.olingo.client.api.communication.response.ODataInvokeResponse;
-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.ODataInvokeResult;
-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.ODataFormat;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
@@ -98,23 +99,20 @@ public class ODataInvokeRequestImpl<T extends ODataInvokeResult>
    */
   @Override
   public void setFormat(final ODataPubFormat format) {
-    final String _format = (reference.isAssignableFrom(ODataProperty.class) && format == ODataPubFormat.ATOM)
+    final String _format = (reference.isAssignableFrom(CommonODataProperty.class) && format == ODataPubFormat.ATOM)
             ? ODataFormat.XML.toString(odataClient.getServiceVersion())
             : format.toString(odataClient.getServiceVersion());
     setAccept(_format);
     setContentType(_format);
   }
 
-  /**
-   * {@inheritDoc }
-   */
   @Override
   protected InputStream getPayload() {
     if (!this.parameters.isEmpty() && this.method == HttpMethod.POST) {
       // Additional, non-binding parameters MUST be sent as JSON
-      final ODataEntity tmp = odataClient.getObjectFactory().newEntity("");
+      final CommonODataEntity tmp = odataClient.getObjectFactory().newEntity(StringUtils.EMPTY);
       for (Map.Entry<String, ODataValue> param : parameters.entrySet()) {
-        ODataProperty property = null;
+        CommonODataProperty property = null;
 
         if (param.getValue().isPrimitive()) {
           property = odataClient.getObjectFactory().
@@ -128,7 +126,7 @@ public class ODataInvokeRequestImpl<T extends ODataInvokeResult>
         }
 
         if (property != null) {
-          tmp.getProperties().add(property);
+          odataClient.getBinder().add(tmp, property);
         }
       }
 
@@ -211,15 +209,15 @@ public class ODataInvokeRequestImpl<T extends ODataInvokeResult>
         }
 
         try {
-          if (reference.isAssignableFrom(ODataEntitySet.class)) {
+          if (reference.isAssignableFrom(CommonODataEntitySet.class)) {
             invokeResult = (T) odataClient.getReader().readEntitySet(res.getEntity().getContent(),
                     ODataPubFormat.fromString(getContentType()));
           }
-          if (reference.isAssignableFrom(ODataEntity.class)) {
+          if (reference.isAssignableFrom(CommonODataEntity.class)) {
             invokeResult = (T) odataClient.getReader().readEntity(res.getEntity().getContent(),
                     ODataPubFormat.fromString(getContentType()));
           }
-          if (reference.isAssignableFrom(ODataProperty.class)) {
+          if (reference.isAssignableFrom(CommonODataProperty.class)) {
             invokeResult = (T) odataClient.getReader().readProperty(res.getEntity().getContent(),
                     ODataFormat.fromString(getContentType()));
           }

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/invoke/v3/InvokeRequestFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v3/InvokeRequestFactoryImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v3/InvokeRequestFactoryImpl.java
index 2487dd9..87e8c76 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v3/InvokeRequestFactoryImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v3/InvokeRequestFactoryImpl.java
@@ -25,10 +25,10 @@ import org.apache.olingo.client.api.v3.ODataClient;
 import org.apache.olingo.client.api.communication.request.invoke.ODataInvokeRequest;
 import org.apache.olingo.client.api.communication.request.invoke.ODataNoContent;
 import org.apache.olingo.client.api.communication.request.invoke.v3.InvokeRequestFactory;
-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.ODataInvokeResult;
-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.client.api.http.HttpMethod;
 import org.apache.olingo.client.core.communication.request.invoke.AbstractInvokeRequestFactory;
@@ -96,14 +96,14 @@ public class InvokeRequestFactoryImpl extends AbstractInvokeRequestFactory imple
               client, ODataNoContent.class, method, uri);
     } else {
       if (returnType.isCollection() && returnType.getType().getKind() == EdmTypeKind.ENTITY) {
-        result = (ODataInvokeRequest<RES>) new ODataInvokeRequestImpl<ODataEntitySet>(
-                client, ODataEntitySet.class, method, uri);
+        result = (ODataInvokeRequest<RES>) new ODataInvokeRequestImpl<CommonODataEntitySet>(
+                client, CommonODataEntitySet.class, method, uri);
       } else if (!returnType.isCollection() && returnType.getType().getKind() == EdmTypeKind.ENTITY) {
-        result = (ODataInvokeRequest<RES>) new ODataInvokeRequestImpl<ODataEntity>(
-                client, ODataEntity.class, method, uri);
+        result = (ODataInvokeRequest<RES>) new ODataInvokeRequestImpl<CommonODataEntity>(
+                client, CommonODataEntity.class, method, uri);
       } else {
-        result = (ODataInvokeRequest<RES>) new ODataInvokeRequestImpl<ODataProperty>(
-                client, ODataProperty.class, method, uri);
+        result = (ODataInvokeRequest<RES>) new ODataInvokeRequestImpl<CommonODataProperty>(
+                client, CommonODataProperty.class, method, uri);
       }
     }
 

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/AbstractRetrieveRequestFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/AbstractRetrieveRequestFactory.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/AbstractRetrieveRequestFactory.java
index 3eeabed..d8ec0f2 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/AbstractRetrieveRequestFactory.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/AbstractRetrieveRequestFactory.java
@@ -21,12 +21,9 @@ package org.apache.olingo.client.core.communication.request.retrieve;
 import java.net.URI;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.olingo.client.api.CommonODataClient;
-import org.apache.olingo.client.api.communication.request.retrieve.ODataEntityRequest;
 import org.apache.olingo.client.api.communication.request.retrieve.ODataEntitySetIteratorRequest;
-import org.apache.olingo.client.api.communication.request.retrieve.ODataEntitySetRequest;
 import org.apache.olingo.client.api.communication.request.retrieve.ODataMediaRequest;
 import org.apache.olingo.client.api.communication.request.retrieve.EdmMetadataRequest;
-import org.apache.olingo.client.api.communication.request.retrieve.ODataPropertyRequest;
 import org.apache.olingo.client.api.communication.request.retrieve.ODataRawRequest;
 import org.apache.olingo.client.api.communication.request.retrieve.ODataServiceDocumentRequest;
 import org.apache.olingo.client.api.communication.request.retrieve.ODataValueRequest;
@@ -43,26 +40,11 @@ public abstract class AbstractRetrieveRequestFactory implements CommonRetrieveRe
   }
 
   @Override
-  public ODataEntitySetRequest getEntitySetRequest(final URI query) {
-    return new ODataEntitySetRequestImpl(client, query);
-  }
-
-  @Override
   public ODataEntitySetIteratorRequest getEntitySetIteratorRequest(final URI query) {
     return new ODataEntitySetIteratorRequestImpl(client, query);
   }
 
   @Override
-  public ODataEntityRequest getEntityRequest(final URI query) {
-    return new ODataEntityRequestImpl(client, query);
-  }
-
-  @Override
-  public ODataPropertyRequest getPropertyRequest(final URI query) {
-    return new ODataPropertyRequestImpl(client, query);
-  }
-
-  @Override
   public ODataValueRequest getValueRequest(final URI query) {
     return new ODataValueRequestImpl(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/retrieve/ODataEntityRequestImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataEntityRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataEntityRequestImpl.java
index 2c8955e..141b82e 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataEntityRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataEntityRequestImpl.java
@@ -26,14 +26,14 @@ import org.apache.olingo.client.api.communication.request.retrieve.ODataEntityRe
 import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
 import org.apache.olingo.commons.api.data.Container;
 import org.apache.olingo.commons.api.data.Entry;
-import org.apache.olingo.commons.api.domain.ODataEntity;
+import org.apache.olingo.commons.api.domain.CommonODataEntity;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
 
 /**
  * This class implements an OData retrieve query request returning a single entity.
  */
-public class ODataEntityRequestImpl extends AbstractODataRetrieveRequest<ODataEntity, ODataPubFormat>
-        implements ODataEntityRequest {
+public class ODataEntityRequestImpl<T extends CommonODataEntity>
+        extends AbstractODataRetrieveRequest<T, ODataPubFormat> implements ODataEntityRequest<T> {
 
   /**
    * Private constructor.
@@ -41,7 +41,7 @@ public class ODataEntityRequestImpl extends AbstractODataRetrieveRequest<ODataEn
    * @param odataClient client instance getting this request
    * @param query query to be executed.
    */
-  ODataEntityRequestImpl(final CommonODataClient odataClient, final URI query) {
+  public ODataEntityRequestImpl(final CommonODataClient odataClient, final URI query) {
     super(odataClient, ODataPubFormat.class, query);
   }
 
@@ -49,7 +49,7 @@ public class ODataEntityRequestImpl extends AbstractODataRetrieveRequest<ODataEn
    * {@inheritDoc }
    */
   @Override
-  public ODataRetrieveResponse<ODataEntity> execute() {
+  public ODataRetrieveResponse<T> execute() {
     return new ODataEntityResponseImpl(httpClient, doExecute());
   }
 
@@ -58,7 +58,7 @@ public class ODataEntityRequestImpl extends AbstractODataRetrieveRequest<ODataEn
    */
   public class ODataEntityResponseImpl extends ODataRetrieveResponseImpl {
 
-    private ODataEntity entity = null;
+    private T entity = null;
 
     /**
      * Constructor.
@@ -82,13 +82,14 @@ public class ODataEntityRequestImpl extends AbstractODataRetrieveRequest<ODataEn
      * {@inheritDoc }
      */
     @Override
-    public ODataEntity getBody() {
+    @SuppressWarnings("unchecked")
+    public T getBody() {
       if (entity == null) {
         try {
           final Container<Entry> container =
                   odataClient.getDeserializer().toEntry(getRawResponse(), ODataPubFormat.fromString(getContentType()));
 
-          entity = odataClient.getBinder().getODataEntity(extractFromContainer(container));
+          entity = (T) odataClient.getBinder().getODataEntity(extractFromContainer(container));
         } finally {
           this.close();
         }

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/ODataEntitySetRequestImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataEntitySetRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataEntitySetRequestImpl.java
index e6d5783..86fa45c 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataEntitySetRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataEntitySetRequestImpl.java
@@ -26,16 +26,16 @@ import org.apache.olingo.client.api.communication.request.retrieve.ODataEntitySe
 import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
 import org.apache.olingo.commons.api.data.Container;
 import org.apache.olingo.commons.api.data.Feed;
-import org.apache.olingo.commons.api.domain.ODataEntitySet;
+import org.apache.olingo.commons.api.domain.CommonODataEntitySet;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
 
 /**
  * This class implements an OData EntitySet query request.
  */
-public class ODataEntitySetRequestImpl extends AbstractODataRetrieveRequest<ODataEntitySet, ODataPubFormat>
-        implements ODataEntitySetRequest {
+public class ODataEntitySetRequestImpl<T extends CommonODataEntitySet>
+        extends AbstractODataRetrieveRequest<T, ODataPubFormat> implements ODataEntitySetRequest<T> {
 
-  private ODataEntitySet entitySet = null;
+  private T entitySet = null;
 
   /**
    * Private constructor.
@@ -43,7 +43,7 @@ public class ODataEntitySetRequestImpl extends AbstractODataRetrieveRequest<ODat
    * @param odataClient client instance getting this request
    * @param query query to be executed.
    */
-  ODataEntitySetRequestImpl(final CommonODataClient odataClient, final URI query) {
+  public ODataEntitySetRequestImpl(final CommonODataClient odataClient, final URI query) {
     super(odataClient, ODataPubFormat.class, query);
   }
 
@@ -51,7 +51,7 @@ public class ODataEntitySetRequestImpl extends AbstractODataRetrieveRequest<ODat
    * {@inheritDoc }
    */
   @Override
-  public ODataRetrieveResponse<ODataEntitySet> execute() {
+  public ODataRetrieveResponse<T> execute() {
     final HttpResponse res = doExecute();
     return new ODataEntitySetResponseImpl(httpClient, res);
   }
@@ -84,13 +84,13 @@ public class ODataEntitySetRequestImpl extends AbstractODataRetrieveRequest<ODat
      */
     @Override
     @SuppressWarnings("unchecked")
-    public ODataEntitySet getBody() {
+    public T getBody() {
       if (entitySet == null) {
         try {
           final Container<Feed> container =
                   odataClient.getDeserializer().toFeed(getRawResponse(), ODataPubFormat.fromString(getContentType()));
 
-          entitySet = odataClient.getBinder().getODataEntitySet(extractFromContainer(container));
+          entitySet = (T) odataClient.getBinder().getODataEntitySet(extractFromContainer(container));
         } finally {
           this.close();
         }

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/ODataPropertyRequestImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataPropertyRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataPropertyRequestImpl.java
index 4b9aa2b..7878805 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataPropertyRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataPropertyRequestImpl.java
@@ -25,7 +25,7 @@ import org.apache.http.client.HttpClient;
 import org.apache.olingo.client.api.CommonODataClient;
 import org.apache.olingo.client.api.communication.request.retrieve.ODataPropertyRequest;
 import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
-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.client.api.http.HttpClientException;
 import org.apache.olingo.commons.api.data.Container;
@@ -34,8 +34,8 @@ import org.apache.olingo.commons.api.data.Property;
 /**
  * This class implements an OData entity property query request.
  */
-public class ODataPropertyRequestImpl extends AbstractODataRetrieveRequest<ODataProperty, ODataFormat>
-        implements ODataPropertyRequest {
+public class ODataPropertyRequestImpl<T extends CommonODataProperty>
+        extends AbstractODataRetrieveRequest<T, ODataFormat> implements ODataPropertyRequest<T> {
 
   /**
    * Private constructor.
@@ -43,7 +43,7 @@ public class ODataPropertyRequestImpl extends AbstractODataRetrieveRequest<OData
    * @param odataClient client instance getting this request
    * @param query query to be executed.
    */
-  ODataPropertyRequestImpl(final CommonODataClient odataClient, final URI query) {
+  public ODataPropertyRequestImpl(final CommonODataClient odataClient, final URI query) {
     super(odataClient, ODataFormat.class, query);
   }
 
@@ -51,14 +51,14 @@ public class ODataPropertyRequestImpl extends AbstractODataRetrieveRequest<OData
    * {@inheritDoc }
    */
   @Override
-  public ODataRetrieveResponse<ODataProperty> execute() {
+  public ODataRetrieveResponse<T> execute() {
     final HttpResponse res = doExecute();
     return new ODataPropertyResponseImpl(httpClient, res);
   }
 
   protected class ODataPropertyResponseImpl extends ODataRetrieveResponseImpl {
 
-    private ODataProperty property = null;
+    private T property = null;
 
     /**
      * Constructor.
@@ -82,14 +82,15 @@ public class ODataPropertyRequestImpl extends AbstractODataRetrieveRequest<OData
      * {@inheritDoc }
      */
     @Override
-    public ODataProperty getBody() {
+    @SuppressWarnings("unchecked")
+    public T getBody() {
       if (property == null) {
         try {
           final Container<Property> container =
                   odataClient.getDeserializer().toProperty(
-                  res.getEntity().getContent(), ODataFormat.fromString(getContentType()));
+                          res.getEntity().getContent(), ODataFormat.fromString(getContentType()));
 
-          property = odataClient.getBinder().getODataProperty(extractFromContainer(container));
+          property = (T) odataClient.getBinder().getODataProperty(extractFromContainer(container));
         } catch (IOException e) {
           throw new HttpClientException(e);
         } finally {

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/v3/RetrieveRequestFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v3/RetrieveRequestFactoryImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v3/RetrieveRequestFactoryImpl.java
index f6ba5c1..b32dd30 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v3/RetrieveRequestFactoryImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v3/RetrieveRequestFactoryImpl.java
@@ -19,11 +19,20 @@
 package org.apache.olingo.client.core.communication.request.retrieve.v3;
 
 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.v3.ODataClient;
 import org.apache.olingo.client.api.communication.request.retrieve.v3.ODataLinkCollectionRequest;
 import org.apache.olingo.client.api.communication.request.retrieve.v3.RetrieveRequestFactory;
 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.v3.ODataEntity;
+import org.apache.olingo.commons.api.domain.v3.ODataEntitySet;
+import org.apache.olingo.commons.api.domain.v3.ODataProperty;
 
 public class RetrieveRequestFactoryImpl extends AbstractRetrieveRequestFactory
         implements RetrieveRequestFactory {
@@ -44,4 +53,22 @@ public class RetrieveRequestFactoryImpl extends AbstractRetrieveRequestFactory
   public ODataLinkCollectionRequest getLinkCollectionRequest(final URI targetURI, final String linkName) {
     return new ODataLinkCollectionRequestImpl((ODataClient) client, targetURI, linkName);
   }
+
+  @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);
+  }
 }