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/05/22 12:35:55 UTC

[12/19] Invoke request factory re-factoring

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v4/BoundOperationInvokeTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/BoundOperationInvokeTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/BoundOperationInvokeTestITCase.java
index da05c7b..4a13943 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/BoundOperationInvokeTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/BoundOperationInvokeTestITCase.java
@@ -23,6 +23,7 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.Map;
 import org.apache.olingo.client.api.communication.request.invoke.ODataInvokeRequest;
@@ -38,10 +39,6 @@ import org.apache.olingo.commons.api.domain.v4.ODataEntitySet;
 import org.apache.olingo.commons.api.domain.v4.ODataEnumValue;
 import org.apache.olingo.commons.api.domain.v4.ODataProperty;
 import org.apache.olingo.commons.api.domain.v4.Singleton;
-import org.apache.olingo.commons.api.edm.Edm;
-import org.apache.olingo.commons.api.edm.EdmAction;
-import org.apache.olingo.commons.api.edm.EdmEntityContainer;
-import org.apache.olingo.commons.api.edm.EdmFunction;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
@@ -50,20 +47,9 @@ import org.junit.Test;
 
 public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
 
-  private Edm getEdm() {
-    final Edm edm = client.getRetrieveRequestFactory().getMetadataRequest(testStaticServiceRootURL).execute().getBody();
-    assertNotNull(edm);
-
-    return edm;
-  }
-
   private void functions(final ODataPubFormat format) throws EdmPrimitiveTypeException {
-    final Edm edm = getEdm();
-    final EdmEntityContainer container = edm.getSchemas().get(0).getEntityContainer();
-    assertNotNull(container);
-
     // GetEmployeesCount
-    URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).appendSingletonSegment("Company");
+    URIBuilder builder = client.newURIBuilder(testStaticServiceRootURL).appendSingletonSegment("Company");
     final ODataEntityRequest<Singleton> singletonReq =
             client.getRetrieveRequestFactory().getSingletonRequest(builder.build());
     singletonReq.setFormat(format);
@@ -73,19 +59,15 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     ODataOperation boundOp = company.getOperation("Microsoft.Test.OData.Services.ODataWCFService.GetEmployeesCount");
     assertNotNull(boundOp);
 
-    EdmFunction func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()), company.getTypeName(),
-            false, null);
-    assertNotNull(func);
-
     final ODataInvokeRequest<ODataProperty> getEmployeesCountReq =
-            client.getInvokeRequestFactory().getInvokeRequest(boundOp.getTarget(), func);
+            client.getInvokeRequestFactory().getFunctionInvokeRequest(boundOp.getTarget(), ODataProperty.class);
     getEmployeesCountReq.setFormat(format);
     final ODataProperty getEmployeesCountRes = getEmployeesCountReq.execute().getBody();
     assertNotNull(getEmployeesCountRes);
     assertTrue(getEmployeesCountRes.hasPrimitiveValue());
 
     // GetProductDetails
-    builder = client.getURIBuilder(testStaticServiceRootURL).
+    builder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Products").appendKeySegment(5);
     ODataEntityRequest<ODataEntity> entityReq = client.getRetrieveRequestFactory().
             getEntityRequest(builder.build());
@@ -96,12 +78,9 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     boundOp = entity.getOperation("Microsoft.Test.OData.Services.ODataWCFService.GetProductDetails");
     assertNotNull(boundOp);
 
-    func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()), entity.getTypeName(), false, null);
-    assertNotNull(func);
-
     final ODataPrimitiveValue count = client.getObjectFactory().newPrimitiveValueBuilder().buildInt32(1);
     final ODataInvokeRequest<ODataEntitySet> getProductDetailsReq =
-            client.getInvokeRequestFactory().getInvokeRequest(boundOp.getTarget(), func,
+            client.getInvokeRequestFactory().getFunctionInvokeRequest(boundOp.getTarget(), ODataEntitySet.class,
                     Collections.<String, ODataValue>singletonMap("count", count));
     getProductDetailsReq.setFormat(format);
     final ODataEntitySet getProductDetailsRes = getProductDetailsReq.execute().getBody();
@@ -112,7 +91,7 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     final Map<String, Object> keyMap = new LinkedHashMap<String, Object>();
     keyMap.put("ProductID", 6);
     keyMap.put("ProductDetailID", 1);
-    builder = client.getURIBuilder(testStaticServiceRootURL).
+    builder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("ProductDetails").appendKeySegment(keyMap);
     entityReq = client.getRetrieveRequestFactory().getEntityRequest(builder.build());
     entityReq.setFormat(format);
@@ -122,11 +101,8 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     boundOp = entity.getOperation("Microsoft.Test.OData.Services.ODataWCFService.GetRelatedProduct");
     assertNotNull(boundOp);
 
-    func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()), entity.getTypeName(), false, null);
-    assertNotNull(func);
-
     final ODataInvokeRequest<ODataEntity> getRelatedProductReq =
-            client.getInvokeRequestFactory().getInvokeRequest(boundOp.getTarget(), func);
+            client.getInvokeRequestFactory().getFunctionInvokeRequest(boundOp.getTarget(), ODataEntity.class);
     getRelatedProductReq.setFormat(format);
     final ODataEntity getRelatedProductRes = getRelatedProductReq.execute().getBody();
     assertNotNull(getRelatedProductRes);
@@ -135,8 +111,8 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     assertEquals(6, getRelatedProductRes.getProperty("ProductID").getPrimitiveValue().toCastValue(Integer.class), 0);
 
     // GetDefaultPI
-    builder = client.getURIBuilder(testStaticServiceRootURL).
-            appendEntitySetSegment("Accounts").appendKeySegment(101);
+    builder = client.newURIBuilder(testStaticServiceRootURL).
+            appendEntitySetSegment("Accounts").appendKeySegment(102);
     entityReq = client.getRetrieveRequestFactory().getEntityRequest(builder.build());
     entityReq.setFormat(format);
     entity = entityReq.execute().getBody();
@@ -145,28 +121,22 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     boundOp = entity.getOperation("Microsoft.Test.OData.Services.ODataWCFService.GetDefaultPI");
     assertNotNull(boundOp);
 
-    func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()), entity.getTypeName(), false, null);
-    assertNotNull(func);
-
     final ODataInvokeRequest<ODataEntity> getDefaultPIReq =
-            client.getInvokeRequestFactory().getInvokeRequest(boundOp.getTarget(), func);
+            client.getInvokeRequestFactory().getFunctionInvokeRequest(boundOp.getTarget(), ODataEntity.class);
     getDefaultPIReq.setFormat(format);
     final ODataEntity getDefaultPIRes = getDefaultPIReq.execute().getBody();
     assertNotNull(getDefaultPIRes);
     assertEquals("Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument",
             getDefaultPIRes.getTypeName().toString());
-    assertEquals(101901,
+    assertEquals(102901,
             getDefaultPIRes.getProperty("PaymentInstrumentID").getPrimitiveValue().toCastValue(Integer.class), 0);
 
     // GetAccountInfo
     boundOp = entity.getOperation("Microsoft.Test.OData.Services.ODataWCFService.GetAccountInfo");
     assertNotNull(boundOp);
 
-    func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()), entity.getTypeName(), false, null);
-    assertNotNull(func);
-
     final ODataInvokeRequest<ODataProperty> getAccountInfoReq =
-            client.getInvokeRequestFactory().getInvokeRequest(boundOp.getTarget(), func);
+            client.getInvokeRequestFactory().getFunctionInvokeRequest(boundOp.getTarget(), ODataProperty.class);
     getAccountInfoReq.setFormat(format);
     final ODataProperty getAccountInfoRes = getAccountInfoReq.execute().getBody();
     assertNotNull(getAccountInfoRes);
@@ -185,12 +155,9 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     boundOp = entity.getOperation("Microsoft.Test.OData.Services.ODataWCFService.GetActualAmount");
     assertNotNull(boundOp);
 
-    func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()), entity.getTypeName(), false, null);
-    assertNotNull(func);
-
     final ODataPrimitiveValue bonusRate = client.getObjectFactory().newPrimitiveValueBuilder().buildDouble(1.1);
     final ODataInvokeRequest<ODataProperty> getActualAmountReq =
-            client.getInvokeRequestFactory().getInvokeRequest(boundOp.getTarget(), func,
+            client.getInvokeRequestFactory().getFunctionInvokeRequest(boundOp.getTarget(), ODataProperty.class,
                     Collections.<String, ODataValue>singletonMap("bonusRate", bonusRate));
     getActualAmountReq.setFormat(format);
     final ODataProperty getActualAmountRes = getActualAmountReq.execute().getBody();
@@ -208,13 +175,95 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     functions(ODataPubFormat.JSON_FULL_METADATA);
   }
 
-  private void actions(final ODataPubFormat format) throws EdmPrimitiveTypeException {
-    final Edm edm = getEdm();
-    final EdmEntityContainer container = edm.getSchemas().get(0).getEntityContainer();
-    assertNotNull(container);
+  @Test
+  public void edmEnabledFunctions() throws EdmPrimitiveTypeException {
+    // GetEmployeesCount
+    final ODataInvokeRequest<ODataProperty> getEmployeesCountReq =
+            edmClient.getInvokeRequestFactory().getBoundFunctionInvokeRequest(
+                    edmClient.newURIBuilder().appendSingletonSegment("Company").build(),
+                    new FullQualifiedName(("Microsoft.Test.OData.Services.ODataWCFService.GetEmployeesCount")),
+                    new FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.Company"),
+                    false);
+    final ODataProperty getEmployeesCountRes = getEmployeesCountReq.execute().getBody();
+    assertNotNull(getEmployeesCountRes);
+    assertTrue(getEmployeesCountRes.hasPrimitiveValue());
+
+    // GetProductDetails
+    final ODataPrimitiveValue count = edmClient.getObjectFactory().newPrimitiveValueBuilder().buildInt32(1);
+    final ODataInvokeRequest<ODataEntitySet> getProductDetailsReq =
+            edmClient.getInvokeRequestFactory().getBoundFunctionInvokeRequest(
+                    edmClient.newURIBuilder().appendEntitySetSegment("Products").appendKeySegment(5).build(),
+                    new FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.GetProductDetails"),
+                    new FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.Product"),
+                    false,
+                    Collections.<String, ODataValue>singletonMap("count", count));
+    final ODataEntitySet getProductDetailsRes = getProductDetailsReq.execute().getBody();
+    assertNotNull(getProductDetailsRes);
+    assertEquals(1, getProductDetailsRes.getCount());
+
+    // GetRelatedProduct
+    final Map<String, Object> keyMap = new LinkedHashMap<String, Object>();
+    keyMap.put("ProductID", 6);
+    keyMap.put("ProductDetailID", 1);
+    URIBuilder builder = edmClient.newURIBuilder().appendEntitySetSegment("ProductDetails").appendKeySegment(keyMap);
+
+    final ODataInvokeRequest<ODataEntity> getRelatedProductReq =
+            edmClient.getInvokeRequestFactory().getBoundFunctionInvokeRequest(
+                    builder.build(),
+                    new FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.GetRelatedProduct"),
+                    new FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.ProductDetail"),
+                    false);
+    final ODataEntity getRelatedProductRes = getRelatedProductReq.execute().getBody();
+    assertNotNull(getRelatedProductRes);
+    assertEquals("Microsoft.Test.OData.Services.ODataWCFService.Product",
+            getRelatedProductRes.getTypeName().toString());
+    assertEquals(6, getRelatedProductRes.getProperty("ProductID").getPrimitiveValue().toCastValue(Integer.class), 0);
+
+    // GetDefaultPI
+    final ODataInvokeRequest<ODataEntity> getDefaultPIReq =
+            edmClient.getInvokeRequestFactory().getBoundFunctionInvokeRequest(
+                    edmClient.newURIBuilder().appendEntitySetSegment("Accounts").appendKeySegment(102).build(),
+                    new FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.GetDefaultPI"),
+                    new FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.Account"),
+                    false);
+    final ODataEntity getDefaultPIRes = getDefaultPIReq.execute().getBody();
+    assertNotNull(getDefaultPIRes);
+    assertEquals("Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument",
+            getDefaultPIRes.getTypeName().toString());
+    assertEquals(102901,
+            getDefaultPIRes.getProperty("PaymentInstrumentID").getPrimitiveValue().toCastValue(Integer.class), 0);
+
+    // GetAccountInfo
+    final ODataInvokeRequest<ODataProperty> getAccountInfoReq =
+            edmClient.getInvokeRequestFactory().getBoundFunctionInvokeRequest(
+                    edmClient.newURIBuilder().appendEntitySetSegment("Accounts").appendKeySegment(102).build(),
+                    new FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.GetAccountInfo"),
+                    new FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.Account"),
+                    false);
+    final ODataProperty getAccountInfoRes = getAccountInfoReq.execute().getBody();
+    assertNotNull(getAccountInfoRes);
+    assertTrue(getAccountInfoRes.hasComplexValue());
+    assertEquals("Microsoft.Test.OData.Services.ODataWCFService.AccountInfo",
+            getAccountInfoRes.getComplexValue().getTypeName());
 
+    // GetActualAmount
+    final ODataPrimitiveValue bonusRate = edmClient.getObjectFactory().newPrimitiveValueBuilder().buildDouble(1.1);
+    final ODataInvokeRequest<ODataProperty> getActualAmountReq =
+            edmClient.getInvokeRequestFactory().getBoundFunctionInvokeRequest(
+                    edmClient.newURIBuilder().appendEntitySetSegment("Accounts").appendKeySegment(102).
+                    appendNavigationSegment("MyGiftCard").build(),
+                    new FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.GetActualAmount"),
+                    new FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.GiftCard"),
+                    false,
+                    Collections.<String, ODataValue>singletonMap("bonusRate", bonusRate));
+    final ODataProperty getActualAmountRes = getActualAmountReq.execute().getBody();
+    assertNotNull(getActualAmountRes);
+    assertEquals(41.79, getActualAmountRes.getPrimitiveValue().toCastValue(Double.class), 0);
+  }
+
+  private void actions(final ODataPubFormat format) throws EdmPrimitiveTypeException {
     // IncreaseRevenue
-    URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).appendSingletonSegment("Company");
+    URIBuilder builder = client.newURIBuilder(testStaticServiceRootURL).appendSingletonSegment("Company");
     ODataEntityRequest<ODataEntity> entityReq =
             client.getRetrieveRequestFactory().getEntityRequest(builder.build());
     entityReq.setFormat(format);
@@ -224,13 +273,10 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     ODataOperation boundOp = entity.getOperation("Microsoft.Test.OData.Services.ODataWCFService.IncreaseRevenue");
     assertNotNull(boundOp);
 
-    EdmAction act = edm.getBoundAction(new FullQualifiedName(boundOp.getTitle()), entity.getTypeName(), false);
-    assertNotNull(act);
-
     final ODataPrimitiveValue increaseValue =
             client.getObjectFactory().newPrimitiveValueBuilder().buildInt64(12L);
     final ODataInvokeRequest<ODataProperty> increaseRevenueReq =
-            client.getInvokeRequestFactory().getInvokeRequest(boundOp.getTarget(), act,
+            client.getInvokeRequestFactory().getActionInvokeRequest(boundOp.getTarget(), ODataProperty.class,
                     Collections.<String, ODataValue>singletonMap("IncreaseValue", increaseValue));
     increaseRevenueReq.setFormat(format);
     final ODataProperty increaseRevenueRes = increaseRevenueReq.execute().getBody();
@@ -238,7 +284,7 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     assertTrue(increaseRevenueRes.hasPrimitiveValue());
 
     // AddAccessRight
-    builder = client.getURIBuilder(testStaticServiceRootURL).
+    builder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Products").appendKeySegment(5);
     entityReq = client.getRetrieveRequestFactory().getEntityRequest(builder.build());
     entityReq.setFormat(format);
@@ -248,13 +294,10 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     boundOp = entity.getOperation("Microsoft.Test.OData.Services.ODataWCFService.AddAccessRight");
     assertNotNull(boundOp);
 
-    act = edm.getBoundAction(new FullQualifiedName(boundOp.getTitle()), entity.getTypeName(), false);
-    assertNotNull(act);
-
     final ODataEnumValue accessRight = client.getObjectFactory().
             newEnumValue("Microsoft.Test.OData.Services.ODataWCFService.AccessLevel", "Execute");
     final ODataInvokeRequest<ODataProperty> getProductDetailsReq =
-            client.getInvokeRequestFactory().getInvokeRequest(boundOp.getTarget(), act,
+            client.getInvokeRequestFactory().getActionInvokeRequest(boundOp.getTarget(), ODataProperty.class,
                     Collections.<String, ODataValue>singletonMap("accessRight", accessRight));
     getProductDetailsReq.setFormat(format);
     final ODataProperty getProductDetailsRes = getProductDetailsReq.execute().getBody();
@@ -262,7 +305,7 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     assertTrue(getProductDetailsRes.hasEnumValue());
 
     // ResetAddress
-    builder = client.getURIBuilder(testStaticServiceRootURL).
+    builder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Customers").appendKeySegment(2);
     entityReq = client.getRetrieveRequestFactory().getEntityRequest(builder.build());
     entityReq.setFormat(format);
@@ -272,10 +315,6 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     boundOp = entity.getOperation("Microsoft.Test.OData.Services.ODataWCFService.ResetAddress");
     assertNotNull(boundOp);
 
-    act = edm.getBoundAction(new FullQualifiedName(boundOp.getTitle()),
-            edm.getEntityType(entity.getTypeName()).getBaseType().getFullQualifiedName(), false);
-    assertNotNull(act);
-
     final ODataCollectionValue<org.apache.olingo.commons.api.domain.v4.ODataValue> addresses =
             client.getObjectFactory().
             newCollectionValue("Collection(Microsoft.Test.OData.Services.ODataWCFService.Address)");
@@ -293,15 +332,15 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     params.put("addresses", addresses);
     params.put("index", index);
     final ODataInvokeRequest<ODataEntity> resetAddressReq =
-            client.getInvokeRequestFactory().getInvokeRequest(boundOp.getTarget(), act, params);
+            client.getInvokeRequestFactory().getActionInvokeRequest(boundOp.getTarget(), ODataEntity.class, params);
     resetAddressReq.setFormat(format);
     final ODataEntity resetAddressRes = resetAddressReq.execute().getBody();
     assertNotNull(resetAddressRes);
     assertEquals(2, resetAddressRes.getProperty("PersonID").getPrimitiveValue().toCastValue(Integer.class), 0);
 
     // RefreshDefaultPI
-    builder = client.getURIBuilder(testStaticServiceRootURL).
-            appendEntitySetSegment("Accounts").appendKeySegment(101);
+    builder = client.newURIBuilder(testStaticServiceRootURL).
+            appendEntitySetSegment("Accounts").appendKeySegment(102);
     entityReq = client.getRetrieveRequestFactory().getEntityRequest(builder.build());
     entityReq.setFormat(format);
     entity = entityReq.execute().getBody();
@@ -310,20 +349,17 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     boundOp = entity.getOperation("Microsoft.Test.OData.Services.ODataWCFService.RefreshDefaultPI");
     assertNotNull(boundOp);
 
-    act = edm.getBoundAction(new FullQualifiedName(boundOp.getTitle()), entity.getTypeName(), false);
-    assertNotNull(act);
-
     final ODataPrimitiveValue newDate = client.getObjectFactory().newPrimitiveValueBuilder().
             setType(EdmPrimitiveTypeKind.DateTimeOffset).setText("2014-04-09T00:00:00Z").build();
     final ODataInvokeRequest<ODataEntity> getDefaultPIReq =
-            client.getInvokeRequestFactory().getInvokeRequest(boundOp.getTarget(), act,
+            client.getInvokeRequestFactory().getActionInvokeRequest(boundOp.getTarget(), ODataEntity.class,
                     Collections.<String, ODataValue>singletonMap("newDate", newDate));
     getDefaultPIReq.setFormat(format);
     final ODataEntity getDefaultPIRes = getDefaultPIReq.execute().getBody();
     assertNotNull(getDefaultPIRes);
     assertEquals("Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument",
             getDefaultPIRes.getTypeName().toString());
-    assertEquals(101901,
+    assertEquals(102901,
             getDefaultPIRes.getProperty("PaymentInstrumentID").getPrimitiveValue().toCastValue(Integer.class), 0);
   }
 
@@ -337,4 +373,80 @@ public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
     actions(ODataPubFormat.JSON_FULL_METADATA);
   }
 
+  @Test
+  public void edmEnabledActions() throws EdmPrimitiveTypeException {
+    // IncreaseRevenue
+    final ODataPrimitiveValue increaseValue = edmClient.getObjectFactory().newPrimitiveValueBuilder().buildInt64(12L);
+    final ODataInvokeRequest<ODataProperty> increaseRevenueReq =
+            edmClient.getInvokeRequestFactory().getBoundActionInvokeRequest(
+                    edmClient.newURIBuilder().appendSingletonSegment("Company").build(),
+                    new FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.IncreaseRevenue"),
+                    new FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.Company"),
+                    false,
+                    Collections.<String, ODataValue>singletonMap("IncreaseValue", increaseValue));
+    final ODataProperty increaseRevenueRes = increaseRevenueReq.execute().getBody();
+    assertNotNull(increaseRevenueRes);
+    assertTrue(increaseRevenueRes.hasPrimitiveValue());
+
+    // AddAccessRight
+    final ODataEnumValue accessRight = edmClient.getObjectFactory().
+            newEnumValue("Microsoft.Test.OData.Services.ODataWCFService.AccessLevel", "Execute");
+    final ODataInvokeRequest<ODataProperty> getProductDetailsReq =
+            edmClient.getInvokeRequestFactory().getBoundActionInvokeRequest(
+                    edmClient.newURIBuilder().appendEntitySetSegment("Products").appendKeySegment(5).build(),
+                    new FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.AddAccessRight"),
+                    new FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.Product"),
+                    false,
+                    Collections.<String, ODataValue>singletonMap("accessRight", accessRight));
+    final ODataProperty getProductDetailsRes = getProductDetailsReq.execute().getBody();
+    assertNotNull(getProductDetailsRes);
+    assertTrue(getProductDetailsRes.hasEnumValue());
+
+    // ResetAddress
+    final ODataCollectionValue<org.apache.olingo.commons.api.domain.v4.ODataValue> addresses =
+            edmClient.getObjectFactory().
+            newCollectionValue("Collection(Microsoft.Test.OData.Services.ODataWCFService.Address)");
+    final ODataComplexValue<ODataProperty> address = edmClient.getObjectFactory().
+            newLinkedComplexValue("Microsoft.Test.OData.Services.ODataWCFService.Address");
+    address.add(edmClient.getObjectFactory().newPrimitiveProperty("Street",
+            edmClient.getObjectFactory().newPrimitiveValueBuilder().buildString("Piazza La Bomba E Scappa")));
+    address.add(edmClient.getObjectFactory().newPrimitiveProperty("City",
+            edmClient.getObjectFactory().newPrimitiveValueBuilder().buildString("Tollo")));
+    address.add(edmClient.getObjectFactory().newPrimitiveProperty("PostalCode",
+            edmClient.getObjectFactory().newPrimitiveValueBuilder().buildString("66010")));
+    addresses.add(address);
+    final ODataPrimitiveValue index = edmClient.getObjectFactory().newPrimitiveValueBuilder().buildInt32(0);
+    final Map<String, ODataValue> params = new LinkedHashMap<String, ODataValue>(2);
+    params.put("addresses", addresses);
+    params.put("index", index);
+    final Map<String, Object> keys = new HashMap<String, Object>();
+    keys.put("PersonID", 2);
+    final ODataInvokeRequest<ODataEntity> resetAddressReq =
+            edmClient.getInvokeRequestFactory().getBoundActionInvokeRequest(
+                    edmClient.newURIBuilder().appendEntitySetSegment("Customers").appendKeySegment(keys).build(),
+                    new FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.ResetAddress"),
+                    new FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.Person"),
+                    false,
+                    params);
+    final ODataEntity resetAddressRes = resetAddressReq.execute().getBody();
+    assertNotNull(resetAddressRes);
+    assertEquals(2, resetAddressRes.getProperty("PersonID").getPrimitiveValue().toCastValue(Integer.class), 0);
+
+    // RefreshDefaultPI
+    final ODataPrimitiveValue newDate = edmClient.getObjectFactory().newPrimitiveValueBuilder().
+            setType(EdmPrimitiveTypeKind.DateTimeOffset).setText("2014-04-09T00:00:00Z").build();
+    final ODataInvokeRequest<ODataEntity> getDefaultPIReq =
+            edmClient.getInvokeRequestFactory().getBoundActionInvokeRequest(
+                    edmClient.newURIBuilder().appendEntitySetSegment("Accounts").appendKeySegment(102).build(),
+                    new FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.RefreshDefaultPI"),
+                    new FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.Account"),
+                    false,
+                    Collections.<String, ODataValue>singletonMap("newDate", newDate));
+    final ODataEntity getDefaultPIRes = getDefaultPIReq.execute().getBody();
+    assertNotNull(getDefaultPIRes);
+    assertEquals("Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument",
+            getDefaultPIRes.getTypeName().toString());
+    assertEquals(102901,
+            getDefaultPIRes.getProperty("PaymentInstrumentID").getPrimitiveValue().toCastValue(Integer.class), 0);
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v4/DeltaTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/DeltaTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/DeltaTestITCase.java
index 700ed98..77c55a0 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/DeltaTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/DeltaTestITCase.java
@@ -34,7 +34,7 @@ public class DeltaTestITCase extends AbstractTestITCase {
 
   private void parse(final ODataPubFormat format) {
     final ODataEntitySetRequest<ODataEntitySet> req = client.getRetrieveRequestFactory().getEntitySetRequest(
-            client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customers").build());
+            client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customers").build());
     req.setPrefer(client.newPreferences().trackChanges());
     
     final ODataEntitySet customers = req.execute().getBody();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v4/DerivedTypeTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/DerivedTypeTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/DerivedTypeTestITCase.java
index 9063c9b..bb1bcff 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/DerivedTypeTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/DerivedTypeTestITCase.java
@@ -40,7 +40,7 @@ public class DerivedTypeTestITCase extends AbstractTestITCase {
 
   private void read(final ODataPubFormat format) {
     // 1. entity set
-    URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("People").
             appendDerivedEntityTypeSegment("Microsoft.Test.OData.Services.ODataWCFService.Customer");
     ODataEntitySetRequest<ODataEntitySet> req = client.getRetrieveRequestFactory().
@@ -52,7 +52,7 @@ public class DerivedTypeTestITCase extends AbstractTestITCase {
     }
 
     // 2. contained entity set
-    uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Accounts").appendKeySegment(101).
             appendNavigationSegment("MyPaymentInstruments").
             appendDerivedEntityTypeSegment("Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI");
@@ -112,7 +112,7 @@ public class DerivedTypeTestITCase extends AbstractTestITCase {
 
     final ODataEntityCreateRequest<ODataEntity> createReq = client.getCUDRequestFactory().
             getEntityCreateRequest(
-                    client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("People").build(),
+                    client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("People").build(),
                     customer);
     createReq.setFormat(format);
 
@@ -120,7 +120,7 @@ public class DerivedTypeTestITCase extends AbstractTestITCase {
     assertEquals(201, createRes.getStatusCode());
 
     final ODataEntityRequest<ODataEntity> fetchReq = client.getRetrieveRequestFactory().
-            getEntityRequest(client.getURIBuilder(testStaticServiceRootURL).
+            getEntityRequest(client.newURIBuilder(testStaticServiceRootURL).
                     appendEntitySetSegment("People").appendKeySegment(976).build());
     fetchReq.setFormat(format);
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v4/EntityCreateTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/EntityCreateTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/EntityCreateTestITCase.java
index 4c7f4b7..8203513 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/EntityCreateTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/EntityCreateTestITCase.java
@@ -50,7 +50,7 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
   }
 
   private void onContained(final ODataPubFormat format) {
-    final URI uri = getClient().getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Accounts").
+    final URI uri = getClient().newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Accounts").
             appendKeySegment(101).appendNavigationSegment("MyPaymentInstruments").build();
 
     // 1. read contained collection before any operation
@@ -87,7 +87,7 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
 
     // 5. remove the contained entity created above
     final ODataDeleteResponse deleteRes = getClient().getCUDRequestFactory().
-            getDeleteRequest(getClient().getURIBuilder(uri.toASCIIString()).appendKeySegment(id).build()).execute();
+            getDeleteRequest(getClient().newURIBuilder(uri.toASCIIString()).appendKeySegment(id).build()).execute();
     assertEquals(204, deleteRes.getStatusCode());
 
     // 6. verify that the contained collection effectively reduced
@@ -157,7 +157,7 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
     product.addLink(inlineDetails);
 
     final ODataEntityCreateRequest<ODataEntity> req = getClient().getCUDRequestFactory().getEntityCreateRequest(
-            getClient().getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Products").build(), product);
+            getClient().newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Products").build(), product);
     req.setFormat(format);
     final ODataEntityCreateResponse<ODataEntity> res = req.execute();
     assertEquals(201, res.getStatusCode());

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v4/EntityRetrieveTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/EntityRetrieveTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/EntityRetrieveTestITCase.java
index dafe38c..fc3767a 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/EntityRetrieveTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/EntityRetrieveTestITCase.java
@@ -54,7 +54,7 @@ import org.junit.Test;
 public class EntityRetrieveTestITCase extends AbstractTestITCase {
 
   private void withInlineEntity(final ODataClient client, final ODataPubFormat format) {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Customers").appendKeySegment(1).expand("Company");
 
     final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().
@@ -124,7 +124,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
   }
 
   private void withInlineEntitySet(final ODataClient client, final ODataPubFormat format) {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Customers").appendKeySegment(1).expand("Orders");
 
     final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().
@@ -167,7 +167,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
   }
 
   private void rawRequest(final ODataPubFormat format) {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("People").appendKeySegment(5);
 
     final ODataRawRequest req = client.getRetrieveRequestFactory().getRawRequest(uriBuilder.build());
@@ -199,7 +199,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
     multiKey.put("ProductID", "6");
     multiKey.put("ProductDetailID", 1);
 
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("ProductDetails").appendKeySegment(multiKey);
 
     final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
@@ -224,7 +224,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
 
   private void checkForETag(final ODataClient client, final ODataPubFormat format) {
     final URIBuilder uriBuilder =
-            client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Orders").appendKeySegment(8);
+            client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Orders").appendKeySegment(8);
 
     final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
     req.setFormat(format);
@@ -261,7 +261,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
 
   @Test(expected = IllegalArgumentException.class)
   public void issue99() {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Orders");
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Orders");
 
     final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
     req.setFormat(ODataPubFormat.JSON);
@@ -272,7 +272,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
   }
 
   private void reference(final ODataPubFormat format) {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Orders").appendKeySegment(8).appendNavigationSegment("CustomerForOrder").
             appendRefSegment();
 
@@ -287,7 +287,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
     assertTrue(entity.getReference().endsWith("/StaticService/V40/Static.svc/Customers(PersonID=1)"));
 
     final URI referenceURI =
-            client.getURIBuilder(testStaticServiceRootURL).appendEntityIdSegment(entity.getReference()).build();
+            client.newURIBuilder(testStaticServiceRootURL).appendEntityIdSegment(entity.getReference()).build();
 
     req = client.getRetrieveRequestFactory().getEntityRequest(referenceURI);
     req.setFormat(format);
@@ -308,7 +308,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
   }
 
   private void contained(final ODataClient client, final ODataPubFormat format) throws EdmPrimitiveTypeException {
-    final URI uri = client.getURIBuilder(testStaticServiceRootURL).
+    final URI uri = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Accounts").appendKeySegment(101).
             appendNavigationSegment("MyPaymentInstruments").appendKeySegment(101902).build();
     final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uri);
@@ -338,7 +338,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
   }
 
   private void entitySetNavigationLink(final ODataClient client, final ODataPubFormat format) {
-    final URI uri = client.getURIBuilder(testStaticServiceRootURL).
+    final URI uri = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Accounts").appendKeySegment(101).build();
     final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uri);
     req.setFormat(format);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v4/EntitySetTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/EntitySetTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/EntitySetTestITCase.java
index cca2b3b..e2a8bde 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/EntitySetTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/EntitySetTestITCase.java
@@ -45,7 +45,7 @@ import org.junit.Test;
 public class EntitySetTestITCase extends AbstractTestITCase {
 
   private void rawRequest(final ODataPubFormat format) {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("People");
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("People");
 
     final ODataRawRequest req = client.getRetrieveRequestFactory().getRawRequest(uriBuilder.build());
     req.setFormat(format.toString(client.getServiceVersion()));
@@ -69,7 +69,7 @@ public class EntitySetTestITCase extends AbstractTestITCase {
   }
 
   private void readWithInlineCount(final ODataClient client, final ODataPubFormat format) {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("People").count(true);
 
     final ODataRawRequest req = client.getRetrieveRequestFactory().getRawRequest(uriBuilder.build());
@@ -101,7 +101,7 @@ public class EntitySetTestITCase extends AbstractTestITCase {
   }
 
   private void readODataEntitySetIterator(final ODataPubFormat format) {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("People");
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("People");
 
     final ODataEntitySetIteratorRequest<ODataEntitySet, ODataEntity> req =
             client.getRetrieveRequestFactory().getEntitySetIteratorRequest(uriBuilder.build());
@@ -143,7 +143,7 @@ public class EntitySetTestITCase extends AbstractTestITCase {
   }
 
   private void readWithNext(final ODataPubFormat format) {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("People");
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("People");
 
     final ODataEntitySetRequest<ODataEntitySet> req = client.getRetrieveRequestFactory().
             getEntitySetRequest(uriBuilder.build());

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v4/EntityUpdateTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/EntityUpdateTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/EntityUpdateTestITCase.java
index 669c10c..a51dd62 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/EntityUpdateTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/EntityUpdateTestITCase.java
@@ -50,7 +50,7 @@ public class EntityUpdateTestITCase extends AbstractTestITCase {
             getClient().getObjectFactory().newPrimitiveValueBuilder().
             setType(EdmPrimitiveTypeKind.Duration).setText("PT0.0000002S").build()));
 
-    final URI upsertURI = getClient().getURIBuilder(testStaticServiceRootURL).
+    final URI upsertURI = getClient().newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Orders").appendKeySegment(9).build();
     final ODataEntityUpdateRequest<ODataEntity> req = getClient().getCUDRequestFactory().
             getEntityUpdateRequest(upsertURI, updateType, order);
@@ -89,7 +89,7 @@ public class EntityUpdateTestITCase extends AbstractTestITCase {
     changes.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("FriendlyName",
             getClient().getObjectFactory().newPrimitiveValueBuilder().buildString(newName)));
 
-    final URI uri = getClient().getURIBuilder(testStaticServiceRootURL).
+    final URI uri = getClient().newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Accounts").appendKeySegment(101).
             appendNavigationSegment("MyPaymentInstruments").appendKeySegment(101901).build();
     final ODataEntityUpdateRequest<ODataEntity> req = getClient().getCUDRequestFactory().
@@ -118,11 +118,11 @@ public class EntityUpdateTestITCase extends AbstractTestITCase {
     final ODataEntity changes = getClient().getObjectFactory().newEntity(
             new FullQualifiedName("Microsoft.Test.OData.Services.ODataWCFService.Customer"));
     final ODataLink parent = getClient().getObjectFactory().newEntityNavigationLink("Parent",
-            getClient().getURIBuilder(testStaticServiceRootURL).
+            getClient().newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("People").appendKeySegment(1).build());
     changes.getNavigationLinks().add(parent);
 
-    final URI uri = getClient().getURIBuilder(testStaticServiceRootURL).
+    final URI uri = getClient().newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("People").appendKeySegment(5).build();
     final ODataEntityUpdateRequest<ODataEntity> req = getClient().getCUDRequestFactory().
             getEntityUpdateRequest(uri, UpdateType.PATCH, changes);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v4/ErrorResponseTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/ErrorResponseTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/ErrorResponseTestITCase.java
index a9530cc..902e731 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/ErrorResponseTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/ErrorResponseTestITCase.java
@@ -35,7 +35,7 @@ public class ErrorResponseTestITCase extends AbstractTestITCase {
 
   @Test
   public void jsonError() {
-    final URI readURI = getClient().getURIBuilder(testStaticServiceRootURL).
+    final URI readURI = getClient().newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Customers").appendKeySegment(32).
             build();
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v4/FilterFactoryTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/FilterFactoryTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/FilterFactoryTestITCase.java
index a85891e..2bb3851 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/FilterFactoryTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/FilterFactoryTestITCase.java
@@ -47,7 +47,7 @@ public class FilterFactoryTestITCase extends AbstractTestITCase {
             getFilterArgFactory().property("Orders/OrderID"), getFilterArgFactory().property("Customers/Order"));
 
     final URIBuilder uriBuilder =
-            client.getURIBuilder(testStaticServiceRootURL).appendCrossjoinSegment("Customers", "Orders").filter(filter);
+            client.newURIBuilder(testStaticServiceRootURL).appendCrossjoinSegment("Customers", "Orders").filter(filter);
 
     final ODataEntitySetRequest<ODataEntitySet> req =
             client.getRetrieveRequestFactory().getEntitySetRequest(uriBuilder.build());

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v4/KeyAsSegmentTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/KeyAsSegmentTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/KeyAsSegmentTestITCase.java
index 56a6fd2..c6eca38 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/KeyAsSegmentTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/KeyAsSegmentTestITCase.java
@@ -50,7 +50,7 @@ public class KeyAsSegmentTestITCase extends AbstractTestITCase {
   }
 
   private void read(final ODataPubFormat format) {
-    final URIBuilder uriBuilder = client.getURIBuilder(testKeyAsSegmentServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testKeyAsSegmentServiceRootURL).
             appendEntitySetSegment("Accounts").appendKeySegment(101);
 
     final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
@@ -94,7 +94,7 @@ public class KeyAsSegmentTestITCase extends AbstractTestITCase {
             getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("middle"));
     changes.getProperties().add(middleName);
 
-    final URI uri = getClient().getURIBuilder(testKeyAsSegmentServiceRootURL).
+    final URI uri = getClient().newURIBuilder(testKeyAsSegmentServiceRootURL).
             appendEntitySetSegment("People").appendKeySegment(5).build();
     final ODataEntityUpdateRequest<ODataEntity> req = getClient().getCUDRequestFactory().
             getEntityUpdateRequest(uri, UpdateType.PATCH, changes);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v4/MediaEntityTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/MediaEntityTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/MediaEntityTestITCase.java
index ecd8c52..5d0806b 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/MediaEntityTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/MediaEntityTestITCase.java
@@ -57,7 +57,7 @@ import org.junit.Test;
 public class MediaEntityTestITCase extends AbstractTestITCase {
 
   private void read(final ODataClient client, final ODataPubFormat format) throws IOException {
-    final URIBuilder builder = client.getURIBuilder(testDemoServiceRootURL).
+    final URIBuilder builder = client.newURIBuilder(testDemoServiceRootURL).
             appendEntitySetSegment("Advertisements").
             appendKeySegment(UUID.fromString("f89dee73-af9f-4cd4-b330-db93c25ff3c7"));
     final ODataEntityRequest<ODataEntity> entityReq =
@@ -99,7 +99,7 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
     final String random = RandomStringUtils.random(110);
     final InputStream input = IOUtils.toInputStream(random);
 
-    final URI uri = client.getURIBuilder(testDemoServiceRootURL).appendEntitySetSegment("Advertisements").build();
+    final URI uri = client.newURIBuilder(testDemoServiceRootURL).appendEntitySetSegment("Advertisements").build();
     final ODataMediaEntityCreateRequest<ODataEntity> createReq =
             client.getCUDRequestFactory().getMediaEntityCreateRequest(uri, input);
     final MediaEntityCreateStreamManager<ODataEntity> streamManager = createReq.payloadManager();
@@ -125,7 +125,7 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
     assertEquals(204, updateRes.getStatusCode());
 
     final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().
-            getMediaEntityRequest(client.getURIBuilder(createdLocation.toASCIIString()).build());
+            getMediaEntityRequest(client.newURIBuilder(createdLocation.toASCIIString()).build());
     final ODataRetrieveResponse<InputStream> retrieveRes = retrieveReq.execute();
     assertEquals(200, retrieveRes.getStatusCode());
 
@@ -145,7 +145,7 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
   }
 
   private void update(final ODataPubFormat format) throws IOException, EdmPrimitiveTypeException {
-    final URI uri = client.getURIBuilder(testDemoServiceRootURL).
+    final URI uri = client.newURIBuilder(testDemoServiceRootURL).
             appendEntitySetSegment("Advertisements").
             appendKeySegment(UUID.fromString("f89dee73-af9f-4cd4-b330-db93c25ff3c7")).build();
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v4/OpenTypeTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/OpenTypeTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/OpenTypeTestITCase.java
index 08e671d..495b9d0 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/OpenTypeTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/OpenTypeTestITCase.java
@@ -53,7 +53,7 @@ public class OpenTypeTestITCase extends AbstractTestITCase {
   }
 
   private ODataEntity readRow(final ODataPubFormat format, final String uuid) {
-    final URIBuilder builder = getClient().getURIBuilder(testOpenTypeServiceRootURL).
+    final URIBuilder builder = getClient().newURIBuilder(testOpenTypeServiceRootURL).
             appendEntitySetSegment("Row").appendKeySegment(UUID.fromString(uuid));
     return read(format, builder.build());
   }
@@ -146,13 +146,13 @@ public class OpenTypeTestITCase extends AbstractTestITCase {
             getClient().getObjectFactory().newComplexProperty("aContact", contactDetails));
 
     final ODataEntityCreateRequest<ODataEntity> createReq = getClient().getCUDRequestFactory().
-            getEntityCreateRequest(getClient().getURIBuilder(testOpenTypeServiceRootURL).
+            getEntityCreateRequest(getClient().newURIBuilder(testOpenTypeServiceRootURL).
                     appendEntitySetSegment("RowIndex").build(), rowIndex);
     createReq.setFormat(format);
     final ODataEntityCreateResponse<ODataEntity> createRes = createReq.execute();
     assertEquals(201, createRes.getStatusCode());
 
-    final URIBuilder builder = getClient().getURIBuilder(testOpenTypeServiceRootURL).
+    final URIBuilder builder = getClient().newURIBuilder(testOpenTypeServiceRootURL).
             appendEntitySetSegment("RowIndex").appendKeySegment(id);
     rowIndex = read(format, builder.build());
     assertNotNull(rowIndex);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v4/OperationImportInvokeTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/OperationImportInvokeTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/OperationImportInvokeTestITCase.java
index 9c6defb..17b9921 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/OperationImportInvokeTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/OperationImportInvokeTestITCase.java
@@ -35,10 +35,6 @@ 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.ODataEnumValue;
 import org.apache.olingo.commons.api.domain.v4.ODataProperty;
-import org.apache.olingo.commons.api.edm.Edm;
-import org.apache.olingo.commons.api.edm.EdmActionImport;
-import org.apache.olingo.commons.api.edm.EdmEntityContainer;
-import org.apache.olingo.commons.api.edm.EdmFunctionImport;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
 
@@ -46,26 +42,11 @@ import org.junit.Test;
 
 public class OperationImportInvokeTestITCase extends AbstractTestITCase {
 
-  private Edm getEdm() {
-    final Edm edm = getClient().getRetrieveRequestFactory().
-            getMetadataRequest(testStaticServiceRootURL).execute().getBody();
-    assertNotNull(edm);
-
-    return edm;
-  }
-
   private void functionImports(final ODataPubFormat format) throws EdmPrimitiveTypeException {
-    final Edm edm = getEdm();
-    final EdmEntityContainer container = edm.getSchemas().get(0).getEntityContainer();
-    assertNotNull(container);
-
     // GetDefaultColor
-    EdmFunctionImport funcImp = container.getFunctionImport("GetDefaultColor");
-
     final ODataInvokeRequest<ODataProperty> defaultColorReq = getClient().getInvokeRequestFactory().
-            getInvokeRequest(getClient().getURIBuilder(testStaticServiceRootURL).
-                    appendOperationCallSegment(funcImp.getName()).build(),
-                    funcImp.getUnboundFunctions().get(0));
+            getFunctionInvokeRequest(getClient().newURIBuilder(testStaticServiceRootURL).
+                    appendOperationCallSegment("GetDefaultColor").build(), ODataProperty.class);
     defaultColorReq.setFormat(format);
     final ODataProperty defaultColor = defaultColorReq.execute().getBody();
     assertNotNull(defaultColor);
@@ -74,15 +55,11 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
     assertEquals("Microsoft.Test.OData.Services.ODataWCFService.Color", defaultColor.getEnumValue().getTypeName());
 
     // GetPerson2
-    funcImp = container.getFunctionImport("GetPerson2");
-
-    final ODataPrimitiveValue city =
-            getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("London");
+    final ODataPrimitiveValue city = getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("London");
 
     final ODataInvokeRequest<ODataEntity> person2Req = getClient().getInvokeRequestFactory().
-            getInvokeRequest(getClient().getURIBuilder(testStaticServiceRootURL).
-                    appendOperationCallSegment(funcImp.getName()).build(),
-                    funcImp.getUnboundFunctions().get(0),
+            getFunctionInvokeRequest(getClient().newURIBuilder(testStaticServiceRootURL).
+                    appendOperationCallSegment("GetPerson2").build(), ODataEntity.class,
                     Collections.<String, ODataValue>singletonMap("city", city));
     person2Req.setFormat(format);
     final ODataEntity person2 = person2Req.execute().getBody();
@@ -91,8 +68,6 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
     assertEquals(1, person2.getProperty("PersonID").getPrimitiveValue().toCastValue(Integer.class), 0);
 
     // GetPerson
-    funcImp = container.getFunctionImport("GetPerson");
-
     final ODataComplexValue<ODataProperty> address = getClient().getObjectFactory().
             newLinkedComplexValue("Microsoft.Test.OData.Services.ODataWCFService.Address");
     address.add(client.getObjectFactory().newPrimitiveProperty("Street",
@@ -103,9 +78,8 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
             client.getObjectFactory().newPrimitiveValueBuilder().buildString("98052")));
 
     final ODataInvokeRequest<ODataEntity> personReq = getClient().getInvokeRequestFactory().
-            getInvokeRequest(getClient().getURIBuilder(testStaticServiceRootURL).
-                    appendOperationCallSegment(funcImp.getName()).build(),
-                    funcImp.getUnboundFunctions().get(0),
+            getFunctionInvokeRequest(getClient().newURIBuilder(testStaticServiceRootURL).
+                    appendOperationCallSegment("GetPerson").build(), ODataEntity.class,
                     Collections.<String, ODataValue>singletonMap("address", address));
     personReq.setFormat(format);
     final ODataEntity person = personReq.execute().getBody();
@@ -113,27 +87,21 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
     assertEquals(person2, person);
 
     // GetAllProducts
-    funcImp = container.getFunctionImport("GetAllProducts");
-
-    final ODataInvokeRequest<ODataEntitySet> productsReq = getClient().getInvokeRequestFactory().
-            getInvokeRequest(getClient().getURIBuilder(testStaticServiceRootURL).
-                    appendOperationCallSegment(funcImp.getName()).build(),
-                    funcImp.getUnboundFunctions().get(0));
+    final ODataInvokeRequest<ODataEntitySet> productsReq = getClient().getInvokeRequestFactory()
+            .getFunctionInvokeRequest(getClient().newURIBuilder(testStaticServiceRootURL).
+                    appendOperationCallSegment("GetAllProducts").build(), ODataEntitySet.class);
     productsReq.setFormat(format);
     final ODataEntitySet products = productsReq.execute().getBody();
     assertNotNull(products);
     assertEquals(5, products.getCount());
 
     // GetProductsByAccessLevel
-    funcImp = container.getFunctionImport("GetProductsByAccessLevel");
-
     final ODataEnumValue accessLevel = getClient().getObjectFactory().
             newEnumValue("Microsoft.Test.OData.Services.ODataWCFService.AccessLevel", "None");
 
     final ODataInvokeRequest<ODataProperty> prodByALReq = getClient().getInvokeRequestFactory().
-            getInvokeRequest(getClient().getURIBuilder(testStaticServiceRootURL).
-                    appendOperationCallSegment(funcImp.getName()).build(),
-                    funcImp.getUnboundFunctions().get(0),
+            getFunctionInvokeRequest(getClient().newURIBuilder(testStaticServiceRootURL).
+                    appendOperationCallSegment("GetProductsByAccessLevel").build(), ODataProperty.class,
                     Collections.<String, ODataValue>singletonMap("accessLevel", accessLevel));
     prodByALReq.setFormat(format);
     final ODataProperty prodByAL = prodByALReq.execute().getBody();
@@ -215,26 +183,17 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
   }
 
   private void actionImports(final ODataPubFormat format) {
-    final Edm edm = getEdm();
-    final EdmEntityContainer container = edm.getSchemas().get(0).getEntityContainer();
-    assertNotNull(container);
-
     // Discount
-    EdmActionImport actImp = container.getActionImport("Discount");
-
     final ODataPrimitiveValue percentage = getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(22);
     final ODataInvokeRequest<ODataNoContent> discountReq = getClient().getInvokeRequestFactory().
-            getInvokeRequest(getClient().getURIBuilder(testStaticServiceRootURL).
-                    appendOperationCallSegment(actImp.getName()).build(),
-                    actImp.getUnboundAction(),
+            getActionInvokeRequest(getClient().newURIBuilder(testStaticServiceRootURL).
+                    appendOperationCallSegment("Discount").build(), ODataNoContent.class,
                     Collections.<String, ODataValue>singletonMap("percentage", percentage));
     discountReq.setFormat(format);
     final ODataNoContent discount = discountReq.execute().getBody();
     assertNotNull(discount);
 
     // ResetBossAddress
-    actImp = container.getActionImport("ResetBossAddress");
-
     final ODataComplexValue<ODataProperty> address = getClient().getObjectFactory().
             newLinkedComplexValue("Microsoft.Test.OData.Services.ODataWCFService.Address");
     address.add(client.getObjectFactory().newPrimitiveProperty("Street",
@@ -245,9 +204,8 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
             client.getObjectFactory().newPrimitiveValueBuilder().buildString("66010")));
 
     final ODataInvokeRequest<ODataProperty> resetBossAddressReq = getClient().getInvokeRequestFactory().
-            getInvokeRequest(getClient().getURIBuilder(testStaticServiceRootURL).
-                    appendOperationCallSegment(actImp.getName()).build(),
-                    actImp.getUnboundAction(),
+            getActionInvokeRequest(getClient().newURIBuilder(testStaticServiceRootURL).
+                    appendOperationCallSegment("ResetBossAddress").build(), ODataProperty.class,
                     Collections.<String, ODataValue>singletonMap("address", address));
     resetBossAddressReq.setFormat(format);
     final ODataProperty resetBossAddress = resetBossAddressReq.execute().getBody();
@@ -294,21 +252,14 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
   }
 
   private void bossEmails(final ODataPubFormat format) {
-    final Edm edm = getEdm();
-    final EdmEntityContainer container = edm.getSchemas().get(0).getEntityContainer();
-    assertNotNull(container);
-
     // ResetBossEmail
-    final EdmActionImport actImp = container.getActionImport("ResetBossEmail");
-
     final ODataCollectionValue<org.apache.olingo.commons.api.domain.v4.ODataValue> emails =
             getClient().getObjectFactory().newCollectionValue("Collection(Edm.String)");
     emails.add(getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("first@olingo.apache.org"));
     emails.add(getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("second@olingo.apache.org"));
     ODataInvokeRequest<ODataProperty> bossEmailsReq = getClient().getInvokeRequestFactory().
-            getInvokeRequest(getClient().getURIBuilder(testStaticServiceRootURL).
-                    appendOperationCallSegment(actImp.getName()).build(),
-                    actImp.getUnboundAction(),
+            getActionInvokeRequest(getClient().newURIBuilder(testStaticServiceRootURL).
+                    appendOperationCallSegment("ResetBossEmail").build(), ODataProperty.class,
                     Collections.<String, ODataValue>singletonMap("emails", emails));
     bossEmailsReq.setFormat(format);
     final ODataProperty bossEmails = bossEmailsReq.execute().getBody();
@@ -316,16 +267,12 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
     assertTrue(bossEmails.hasCollectionValue());
     assertEquals(2, bossEmails.getCollectionValue().size());
 
-    final EdmFunctionImport funcImp = container.getFunctionImport("GetBossEmails");
-
     final Map<String, ODataValue> params = new LinkedHashMap<String, ODataValue>(2);
     params.put("start", getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(0));
     params.put("count", getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(100));
-    bossEmailsReq = getClient().getInvokeRequestFactory().
-            getInvokeRequest(getClient().getURIBuilder(testStaticServiceRootURL).
-                    appendOperationCallSegment(funcImp.getName()).build(),
-                    funcImp.getUnboundFunctions().get(0),
-                    params);
+    bossEmailsReq = getClient().getInvokeRequestFactory().getFunctionInvokeRequest(
+            getClient().newURIBuilder(testStaticServiceRootURL).
+            appendOperationCallSegment("GetBossEmails").build(), ODataProperty.class, params);
     bossEmailsReq.setFormat(format);
     final ODataProperty bossEmailsViaGET = bossEmailsReq.execute().getBody();
     assertNotNull(bossEmailsViaGET);
@@ -344,5 +291,4 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
   public void jsonBossEmails() throws EdmPrimitiveTypeException {
     bossEmails(ODataPubFormat.JSON_FULL_METADATA);
   }
-
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v4/PropertyTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/PropertyTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/PropertyTestITCase.java
index 4142e72..abd4cd0 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/PropertyTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/PropertyTestITCase.java
@@ -43,7 +43,7 @@ import org.junit.Test;
 public class PropertyTestITCase extends AbstractTestITCase {
 
   private void _enum(final ODataClient client, final ODataFormat format) {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Products").appendKeySegment(5).appendPropertySegment("CoverColors");
     final ODataPropertyRequest<ODataProperty> req = client.getRetrieveRequestFactory().
             getPropertyRequest(uriBuilder.build());
@@ -72,7 +72,7 @@ public class PropertyTestITCase extends AbstractTestITCase {
   }
 
   private void geospatial(final ODataClient client, final ODataFormat format) {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("People").appendKeySegment(5).appendPropertySegment("Home");
     final ODataPropertyRequest<ODataProperty> req = client.getRetrieveRequestFactory().
             getPropertyRequest(uriBuilder.build());
@@ -100,7 +100,7 @@ public class PropertyTestITCase extends AbstractTestITCase {
   }
 
   private void complex(final ODataClient client, final ODataFormat format) {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Customers").appendKeySegment(2).appendPropertySegment("HomeAddress");
     final ODataPropertyRequest<ODataProperty> req = client.getRetrieveRequestFactory().
             getPropertyRequest(uriBuilder.build());
@@ -129,7 +129,7 @@ public class PropertyTestITCase extends AbstractTestITCase {
   }
 
   private void updateComplexProperty(final ODataFormat format, final UpdateType type) throws IOException {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Customers").appendKeySegment(1).appendPropertySegment("HomeAddress");
 
     ODataPropertyRequest<ODataProperty> retrieveReq =
@@ -176,10 +176,10 @@ public class PropertyTestITCase extends AbstractTestITCase {
   public void createAndDelete() {
     // 1. create
     final ODataEntity category = client.getObjectFactory().newEntity(null);
-    category.setReference(client.getURIBuilder(testStaticServiceRootURL).
+    category.setReference(client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Categories").appendKeySegment(1).build().toASCIIString());
 
-    final URIBuilder createBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder createBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Products").appendKeySegment(0).appendNavigationSegment("Categories").
             appendRefSegment();    
     final ODataEntityCreateRequest<ODataEntity> createReq = client.getCUDRequestFactory().
@@ -189,7 +189,7 @@ public class PropertyTestITCase extends AbstractTestITCase {
     assertEquals(204, createRes.getStatusCode());
 
     // 2. delete
-    final URIBuilder deleteBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder deleteBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Products").appendKeySegment(0).appendNavigationSegment("Categories").
             appendKeySegment(1).appendRefSegment();
     final ODataDeleteRequest deleteReq = client.getCUDRequestFactory().

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v4/PropertyValueTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/PropertyValueTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/PropertyValueTestITCase.java
index 01834a4..1d99bb3 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/PropertyValueTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/PropertyValueTestITCase.java
@@ -41,7 +41,7 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
 
   @Test
   public void retrieveIntPropertyValueTest() throws EdmPrimitiveTypeException {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("People").appendKeySegment(5).appendPropertySegment("PersonID");
     final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     req.setFormat(ODataValueFormat.TEXT);
@@ -50,7 +50,7 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
 
   @Test
   public void retrieveBooleanPropertyValueTest() throws EdmPrimitiveTypeException {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("People").appendKeySegment(5).appendPropertySegment("IsRegistered");
     final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     req.setFormat(ODataValueFormat.TEXT);
@@ -59,7 +59,7 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
 
   @Test
   public void retrieveStringPropertyValueTest() throws EdmPrimitiveTypeException {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("People").appendKeySegment(5).appendPropertySegment("FirstName");
     final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     req.setFormat(ODataValueFormat.TEXT);
@@ -68,7 +68,7 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
 
   @Test
   public void retrieveDatePropertyValueTest() {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Orders").appendKeySegment(8).appendPropertySegment("OrderDate");
     final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     req.setFormat(ODataValueFormat.TEXT);
@@ -78,7 +78,7 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
 
   @Test
   public void retrieveDecimalPropertyValueTest() throws EdmPrimitiveTypeException {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("People").appendKeySegment(5).appendPropertySegment("Height");
     final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     req.setFormat(ODataValueFormat.TEXT);
@@ -88,7 +88,7 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
 
   @Test
   public void retrieveBinaryPropertyValueTest() throws IOException {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("People").appendKeySegment(5).appendPropertySegment("PDC");
     final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     req.setFormat(ODataValueFormat.TEXT);
@@ -99,7 +99,7 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
 
   @Test(expected = ODataClientErrorException.class)
   public void retrieveBinaryPropertyValueTestWithAtom() throws IOException {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("People").appendKeySegment(5).appendPropertySegment("PDC");
     final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     req.setAccept(ODataPubFormat.ATOM.toString(ODataServiceVersion.V40));
@@ -108,7 +108,7 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
 
   @Test(expected = ODataClientErrorException.class)
   public void retrieveBinaryPropertyValueTestWithXML() throws IOException {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("People").appendKeySegment(5).appendPropertySegment("PDC");
     final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     req.setAccept(ODataFormat.XML.toString(client.getServiceVersion()));
@@ -117,7 +117,7 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
 
   @Test
   public void retrieveCollectionPropertyValueTest() {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("People").appendKeySegment(5).appendPropertySegment("Numbers");
     final ODataPropertyRequest<ODataProperty> req = client.getRetrieveRequestFactory().
             getPropertyRequest(uriBuilder.build());
@@ -130,7 +130,7 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
 
   @Test
   public void retrieveNullPropertyValueTest() {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("People").appendKeySegment(5).appendPropertySegment("HomeAddress");
     final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     req.setFormat(ODataValueFormat.TEXT);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v4/QueryOptionsTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/QueryOptionsTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/QueryOptionsTestITCase.java
index 20684b5..207cbd0 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/QueryOptionsTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/QueryOptionsTestITCase.java
@@ -47,7 +47,7 @@ public class QueryOptionsTestITCase extends AbstractTestITCase {
    * Test <tt>$expand</tt>.
    */
   public void expand() {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Customers").appendKeySegment(1).expand("Orders");
 
     final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
@@ -58,7 +58,7 @@ public class QueryOptionsTestITCase extends AbstractTestITCase {
 
   @Test
   public void expandWithFilter() {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Customers").appendKeySegment(1).
             expandWithOptions("Orders", Collections.<QueryOption, Object>singletonMap(
                             QueryOption.FILTER, getClient().getFilterFactory().gt("OrderID", 7).build()));
@@ -76,7 +76,7 @@ public class QueryOptionsTestITCase extends AbstractTestITCase {
    */
   @Test
   public void filterOrderby() throws EdmPrimitiveTypeException {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("People").filter("(PersonID lt 3)");
 
     // 1. check that filtered entity set looks as expected
@@ -120,7 +120,7 @@ public class QueryOptionsTestITCase extends AbstractTestITCase {
    */
   @Test
   public void format() {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Customers").appendKeySegment(1).format("json");
 
     final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
@@ -136,7 +136,7 @@ public class QueryOptionsTestITCase extends AbstractTestITCase {
    * Test <tt>$skip</tt>.
    */
   public void skip() {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("People");
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("People");
 
     // 1. check that filtered entity set looks as expected
     final ODataEntitySetRequest<ODataEntitySet> req =
@@ -150,7 +150,7 @@ public class QueryOptionsTestITCase extends AbstractTestITCase {
    * Test <tt>$top</tt>.
    */
   public void top() {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("People");
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("People");
 
     // 1. check that filtered entity set looks as expected
     final ODataEntitySetRequest<ODataEntitySet> req = client.getRetrieveRequestFactory().
@@ -165,7 +165,7 @@ public class QueryOptionsTestITCase extends AbstractTestITCase {
    */
   @Test
   public void skiptoken() throws EdmPrimitiveTypeException {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL);
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL);
     uriBuilder.appendEntitySetSegment("People").skipToken("5");
 
     final ODataEntitySetRequest<ODataEntitySet> req =
@@ -186,7 +186,7 @@ public class QueryOptionsTestITCase extends AbstractTestITCase {
   @Test
   public void count() {
     final URIBuilder uriBuilder =
-            client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customers").count(true);
+            client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customers").count(true);
 
     final ODataEntitySetRequest<ODataEntitySet> req =
             client.getRetrieveRequestFactory().getEntitySetRequest(uriBuilder.build());
@@ -201,7 +201,7 @@ public class QueryOptionsTestITCase extends AbstractTestITCase {
    */
   @Test
   public void select() {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Customers").appendKeySegment(1).select("PersonID,Orders").expand("Orders");
 
     final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
@@ -214,7 +214,7 @@ public class QueryOptionsTestITCase extends AbstractTestITCase {
 
   @Test
   public void issue253() {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("relatedEntitySelect").appendEntitySetSegment("Customers").appendKeySegment(1).
             expandWithSelect("Orders", "OrderID", "OrderDetails");
 
@@ -226,7 +226,7 @@ public class QueryOptionsTestITCase extends AbstractTestITCase {
 
   @Test
   public void search() {
-    final URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder builder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("People").search(client.getSearchFactory().
                     or(client.getSearchFactory().literal("Bob"), client.getSearchFactory().literal("Jill")));
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v4/SingletonTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/SingletonTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/SingletonTestITCase.java
index 953640b..46429c6 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/SingletonTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/SingletonTestITCase.java
@@ -41,7 +41,7 @@ import org.junit.Test;
 public class SingletonTestITCase extends AbstractTestITCase {
 
   private void read(final ODataClient client, final ODataPubFormat format) throws EdmPrimitiveTypeException {
-    final URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).appendSingletonSegment("Company");
+    final URIBuilder builder = client.newURIBuilder(testStaticServiceRootURL).appendSingletonSegment("Company");
     final ODataEntityRequest<Singleton> singleton =
             client.getRetrieveRequestFactory().getSingletonRequest(builder.build());
     singleton.setFormat(format);
@@ -73,7 +73,7 @@ public class SingletonTestITCase extends AbstractTestITCase {
   private void readWithAnnotations(final ODataClient client, final ODataPubFormat format) 
           throws EdmPrimitiveTypeException {
     
-    final URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).appendSingletonSegment("Boss");    
+    final URIBuilder builder = client.newURIBuilder(testStaticServiceRootURL).appendSingletonSegment("Boss");    
     final ODataEntityRequest<Singleton> singleton =
             client.getRetrieveRequestFactory().getSingletonRequest(builder.build());
     singleton.setFormat(format);
@@ -107,7 +107,7 @@ public class SingletonTestITCase extends AbstractTestITCase {
     changes.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("Revenue",
             getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt64(132520L)));
 
-    final URI uri = client.getURIBuilder(testStaticServiceRootURL).appendSingletonSegment("Company").build();
+    final URI uri = client.newURIBuilder(testStaticServiceRootURL).appendSingletonSegment("Company").build();
     final ODataEntityUpdateRequest<Singleton> req = getClient().getCUDRequestFactory().
             getSingletonUpdateRequest(uri, UpdateType.PATCH, changes);
     req.setFormat(format);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonEdmEnabledODataClient.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonEdmEnabledODataClient.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonEdmEnabledODataClient.java
index ab5569e..196c6e9 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonEdmEnabledODataClient.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/CommonEdmEnabledODataClient.java
@@ -50,7 +50,7 @@ public interface CommonEdmEnabledODataClient<UT extends CommonUpdateType> extend
    */
   Edm getCachedEdm();
 
-  CommonURIBuilder<?> getURIBuilder();
+  CommonURIBuilder<?> newURIBuilder();
 
   @Override
   EdmEnabledInvokeRequestFactory getInvokeRequestFactory();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/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 c69f541..1a83849 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
@@ -44,13 +44,13 @@ public interface CommonODataClient<UT extends CommonUpdateType> {
 
   ODataServiceVersion getServiceVersion();
 
-  ODataHeaders getVersionHeaders();
+  ODataHeaders newVersionHeaders();
 
   CommonConfiguration getConfiguration();
 
   ODataPreferences newPreferences();
 
-  CommonURIBuilder<?> getURIBuilder(String serviceRoot);
+  CommonURIBuilder<?> newURIBuilder(String serviceRoot);
 
   CommonFilterFactory getFilterFactory();
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/header/ODataHeaders.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/header/ODataHeaders.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/header/ODataHeaders.java
index 51de80d..bc00459 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/header/ODataHeaders.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/header/ODataHeaders.java
@@ -56,4 +56,35 @@ public interface ODataHeaders {
    * @return header names.
    */
   Collection<String> getHeaderNames();
+
+  /**
+   * Add the specified (custom) header (header name is case-insensitive).
+   *
+   * @param name header key.
+   * @param value header value.
+   * @return the current updated header instance.
+   */
+  ODataHeaders setHeader(String name, String value);
+
+  /**
+   * Add the specified header.
+   *
+   * @param name header key.
+   * @param value header value.
+   * @return the current updated header instance.
+   */
+  ODataHeaders setHeader(HeaderName name, String value);
+
+  /**
+   * Removes the header identified by the given name.
+   * <br/>
+   * Please note that header name is case-insensitive.
+   *
+   * @param name name of the header to be retrieved.
+   * @return header name (if found).
+   */
+  String removeHeader(HeaderName name);
+
+  String removeHeader(String name);
+
 }