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/05/21 13:41:07 UTC

[1/4] Invoke request factory re-factoring

Repository: olingo-odata4
Updated Branches:
  refs/heads/master 377ddb959 -> 35e89699e


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/invoke/EdmEnabledInvokeRequestFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/invoke/EdmEnabledInvokeRequestFactory.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/invoke/EdmEnabledInvokeRequestFactory.java
index d8d2538..8429b51 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/invoke/EdmEnabledInvokeRequestFactory.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/invoke/EdmEnabledInvokeRequestFactory.java
@@ -18,9 +18,11 @@
  */
 package org.apache.olingo.client.api.communication.request.invoke;
 
+import java.net.URI;
 import java.util.Map;
 import org.apache.olingo.commons.api.domain.ODataInvokeResult;
 import org.apache.olingo.commons.api.domain.ODataValue;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
 
 public interface EdmEnabledInvokeRequestFactory extends InvokeRequestFactory {
 
@@ -48,7 +50,7 @@ public interface EdmEnabledInvokeRequestFactory extends InvokeRequestFactory {
   /**
    * Gets an invoke request instance for the action import with the given name.
    *
-   * @param <RES> OData domain object result, derived from return type defined in the function import
+   * @param <RES> OData domain object result, derived from return type defined in the action import
    * @param actionImportName operation to be invoked
    * @return new {@link ODataInvokeRequest} instance.
    */
@@ -58,11 +60,70 @@ public interface EdmEnabledInvokeRequestFactory extends InvokeRequestFactory {
   /**
    * Gets an invoke request instance for the action import with the given name.
    *
-   * @param <RES> OData domain object result, derived from return type defined in the function import
+   * @param <RES> OData domain object result, derived from return type defined in the action import
    * @param actionImportName operation to be invoked
    * @param parameters parameters to pass to operation import invocation
    * @return new {@link ODataInvokeRequest} instance.
    */
   <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getActionImportInvokeRequest(
           String actionImportName, Map<String, ODataValue> parameters);
+
+  /**
+   * Gets an invoke request instance for the function bound to given URI (no parameters).
+   *
+   * @param <RES> OData domain object result
+   * @param bindingParameterURI binding parameter URI
+   * @param functionName operation to be invoked
+   * @param bindingParameterTypeName binding parameter type full qualified name
+   * @param isBindingParameterCollection whether binding parameter is collection
+   * @return new {@link ODataInvokeRequest} instance.
+   */
+  <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getBoundFunctionInvokeRequest(
+          URI bindingParameterURI, FullQualifiedName functionName, FullQualifiedName bindingParameterTypeName,
+          Boolean isBindingParameterCollection);
+
+  /**
+   * Gets an invoke request instance for the function bound to given URI (with parameters).
+   *
+   * @param <RES> OData domain object result
+   * @param bindingParameterURI binding parameter URI
+   * @param functionName operation to be invoked
+   * @param bindingParameterTypeName binding parameter type full qualified name
+   * @param isBindingParameterCollection whether binding parameter is collection
+   * @param parameters parameters to pass to function invocation
+   * @return new {@link ODataInvokeRequest} instance.
+   */
+  <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getBoundFunctionInvokeRequest(
+          URI bindingParameterURI, FullQualifiedName functionName, FullQualifiedName bindingParameterTypeName,
+          Boolean isBindingParameterCollection, Map<String, ODataValue> parameters);
+
+  /**
+   * Gets an invoke request instance for the action bound to given URI (no parameters).
+   *
+   * @param <RES> OData domain object result
+   * @param bindingParameterURI binding parameter URI
+   * @param actionName operation to be invoked
+   * @param bindingParameterTypeName binding parameter type full qualified name
+   * @param isBindingParameterCollection whether binding parameter is collection
+   * @return new {@link ODataInvokeRequest} instance.
+   */
+  <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getBoundActionInvokeRequest(
+          URI bindingParameterURI, FullQualifiedName actionName, FullQualifiedName bindingParameterTypeName,
+          Boolean isBindingParameterCollection);
+
+  /**
+   * Gets an invoke request instance for the action bound to given URI (with parameters).
+   *
+   * @param <RES> OData domain object result
+   * @param bindingParameterURI binding parameter URI
+   * @param actionName operation to be invoked
+   * @param bindingParameterTypeName binding parameter type full qualified name
+   * @param isBindingParameterCollection whether binding parameter is collection
+   * @param parameters parameters to pass to function invocation
+   * @return new {@link ODataInvokeRequest} instance.
+   */
+  <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getBoundActionInvokeRequest(
+          URI bindingParameterURI, FullQualifiedName actionName, FullQualifiedName bindingParameterTypeName,
+          Boolean isBindingParameterCollection, Map<String, ODataValue> parameters);
+
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/invoke/InvokeRequestFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/invoke/InvokeRequestFactory.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/invoke/InvokeRequestFactory.java
index 1eeaf1c..e869ed6 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/invoke/InvokeRequestFactory.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/invoke/InvokeRequestFactory.java
@@ -21,9 +21,9 @@ package org.apache.olingo.client.api.communication.request.invoke;
 import java.io.Serializable;
 import java.net.URI;
 import java.util.Map;
+import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.commons.api.domain.ODataInvokeResult;
 import org.apache.olingo.commons.api.domain.ODataValue;
-import org.apache.olingo.commons.api.edm.EdmOperation;
 
 /**
  * OData request factory class.
@@ -31,24 +31,62 @@ import org.apache.olingo.commons.api.edm.EdmOperation;
 public interface InvokeRequestFactory extends Serializable {
 
   /**
-   * Gets an invoke request instance.
+   * Gets an invoke request instance for the operation bound to given URI.
+   * <br/>
+   * This method is mainly meant for internal usage, but defined for generic calls from proxy; normally, one of other
+   * methods should be used instead.
    *
-   * @param <RES> OData domain object result, derived from return type defined in the function import
-   * @param uri URI that identifies the function import
-   * @param operation operation to be invoked
+   * @param <RES> OData domain object result
+   * @param method HTTP invocation method
+   * @param uri invocation URI
+   * @param resultRef reference Class for result
+   * @param parameters parameters to pass to function invocation
    * @return new {@link ODataInvokeRequest} instance.
    */
-  <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getInvokeRequest(URI uri, EdmOperation operation);
+  <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getInvokeRequest(
+          HttpMethod method, URI uri, Class<RES> resultRef, Map<String, ODataValue> parameters);
 
   /**
-   * Gets an invoke request instance.
+   * Gets an invoke request instance for the function bound to given URI (no parameters).
    *
-   * @param <RES> OData domain object result, derived from return type defined in the function import
-   * @param uri URI that identifies the function import
-   * @param operation operation to be invoked
-   * @param parameters parameters to pass to operation invocation
+   * @param <RES> OData domain object result
+   * @param uri invocation URI
+   * @param resultRef reference Class for result
    * @return new {@link ODataInvokeRequest} instance.
    */
-  <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getInvokeRequest(
-          URI uri, EdmOperation operation, Map<String, ODataValue> parameters);
+  <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getFunctionInvokeRequest(URI uri, Class<RES> resultRef);
+
+  /**
+   * Gets an invoke request instance for the function bound to given URI (with parameters).
+   *
+   * @param <RES> OData domain object result
+   * @param uri invocation URI
+   * @param resultRef reference Class for result
+   * @param parameters parameters to pass to function invocation
+   * @return new {@link ODataInvokeRequest} instance.
+   */
+  <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getFunctionInvokeRequest(
+          URI uri, Class<RES> resultRef, Map<String, ODataValue> parameters);
+
+  /**
+   * Gets an invoke request instance for the action bound to given URI (no parameters).
+   *
+   * @param <RES> OData domain object result
+   * @param uri invocation URI
+   * @param resultRef reference Class for result
+   * @return new {@link ODataInvokeRequest} instance.
+   */
+  <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getActionInvokeRequest(URI uri, Class<RES> resultRef);
+
+  /**
+   * Gets an invoke request instance for the action bound to given URI (with parameters).
+   *
+   * @param <RES> OData domain object result
+   * @param uri invocation URI
+   * @param resultRef reference Class for result
+   * @param parameters parameters to pass to action invocation
+   * @return new {@link ODataInvokeRequest} instance.
+   */
+  <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getActionInvokeRequest(
+          URI uri, Class<RES> resultRef, Map<String, ODataValue> parameters);
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/lib/client-api/src/main/java/org/apache/olingo/client/api/v3/EdmEnabledODataClient.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/v3/EdmEnabledODataClient.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/v3/EdmEnabledODataClient.java
index 6f525aa..764be15 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/v3/EdmEnabledODataClient.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/v3/EdmEnabledODataClient.java
@@ -26,7 +26,7 @@ import org.apache.olingo.client.api.uri.v3.URIBuilder;
 public interface EdmEnabledODataClient extends CommonEdmEnabledODataClient<UpdateType>, ODataClient {
 
   @Override
-  URIBuilder getURIBuilder();
+  URIBuilder 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/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 bca42cc..7606313 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
@@ -45,7 +45,7 @@ public interface ODataClient extends CommonODataClient<UpdateType> {
   ODataBinder getBinder();
 
   @Override
-  URIBuilder getURIBuilder(String serviceRoot);
+  URIBuilder newURIBuilder(String serviceRoot);
 
   @Override
   FilterFactory getFilterFactory();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/lib/client-api/src/main/java/org/apache/olingo/client/api/v4/EdmEnabledODataClient.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/v4/EdmEnabledODataClient.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/v4/EdmEnabledODataClient.java
index 3f6a49c..2e9e8c2 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/v4/EdmEnabledODataClient.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/v4/EdmEnabledODataClient.java
@@ -26,7 +26,7 @@ import org.apache.olingo.client.api.uri.v4.URIBuilder;
 public interface EdmEnabledODataClient extends CommonEdmEnabledODataClient<UpdateType>, ODataClient {
 
   @Override
-  URIBuilder getURIBuilder();
+  URIBuilder 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/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 0aefdc7..eff7ce7 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
@@ -47,7 +47,7 @@ public interface ODataClient extends CommonODataClient<UpdateType> {
   ODataBinder getBinder();
 
   @Override
-  URIBuilder getURIBuilder(String serviceRoot);
+  URIBuilder newURIBuilder(String serviceRoot);
 
   @Override
   FilterFactory getFilterFactory();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/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 fd9eae5..203f624 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
@@ -29,11 +29,10 @@ public abstract class AbstractODataClient<UT extends CommonUpdateType> implement
   private static final long serialVersionUID = 7269096702397630265L;
 
   private final ODataWriter writer = new ODataWriterImpl(this);
-  
+
   @Override
   public ODataPreferences newPreferences() {
     return new ODataPreferences(getServiceVersion());
-
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/header/ODataHeadersImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/header/ODataHeadersImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/header/ODataHeadersImpl.java
index ace190e..25f9981 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/header/ODataHeadersImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/header/ODataHeadersImpl.java
@@ -24,12 +24,6 @@ import java.util.TreeMap;
 import org.apache.olingo.client.api.communication.header.HeaderName;
 import org.apache.olingo.client.api.communication.header.ODataHeaders;
 
-/**
- * ODataHeaders wraps OData request/response headers.
- *
- * @see org.apache.olingo.client.core.communication.request.ODataRequest
- * @see org.apache.olingo.client.core.communication.response.ODataResponse
- */
 public class ODataHeadersImpl implements ODataHeaders {
 
   /**
@@ -37,73 +31,38 @@ public class ODataHeadersImpl implements ODataHeaders {
    */
   private final Map<String, String> headers = new TreeMap<String, String>(String.CASE_INSENSITIVE_ORDER);
 
-  /**
-   * Add the specified (custom) header (header name is case-insensitive).
-   *
-   * @param name header key.
-   * @param value header value.
-   * @return the current updated header instance.
-   */
+  @Override
   public ODataHeaders setHeader(final String name, final String value) {
     headers.put(name, value);
     return this;
   }
 
-  /**
-   * Add the specified header.
-   *
-   * @param name header key.
-   * @param value header value.
-   * @return the current updated header instance.
-   */
+  @Override
   public ODataHeaders setHeader(final HeaderName name, final String value) {
     headers.put(name.toString(), value);
     return this;
   }
 
-  /**
-   * {@inheritDoc }
-   */
   @Override
   public String getHeader(final HeaderName name) {
     return headers.get(name.toString());
   }
 
-  /**
-   * {@inheritDoc }
-   */
   @Override
   public String getHeader(final String name) {
     return headers.get(name);
   }
 
-  /**
-   * 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).
-   */
+  @Override
   public String removeHeader(final HeaderName name) {
     return headers.remove(name.toString());
   }
 
-  /**
-   * 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).
-   */
+  @Override
   public String removeHeader(final String name) {
     return headers.remove(name);
   }
 
-  /**
-   * {@inheritDoc }
-   */
   @Override
   public Collection<String> getHeaderNames() {
     return headers.keySet();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/AbstractODataRequest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/AbstractODataRequest.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/AbstractODataRequest.java
index c8185d4..6b2bcf7 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/AbstractODataRequest.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/AbstractODataRequest.java
@@ -41,7 +41,6 @@ import org.apache.olingo.client.api.communication.response.ODataResponse;
 import org.apache.olingo.commons.api.format.Format;
 import org.apache.olingo.client.api.http.HttpClientException;
 import org.apache.olingo.client.api.http.HttpMethod;
-import org.apache.olingo.client.core.communication.header.ODataHeadersImpl;
 import org.apache.olingo.commons.api.format.ODataMediaFormat;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
 import org.apache.olingo.commons.api.format.ODataValueFormat;
@@ -74,7 +73,7 @@ public abstract class AbstractODataRequest<T extends Format> extends AbstractReq
   /**
    * OData request header.
    */
-  protected final ODataHeadersImpl odataHeaders;
+  protected final ODataHeaders odataHeaders;
 
   /**
    * Target URI.
@@ -108,7 +107,7 @@ public abstract class AbstractODataRequest<T extends Format> extends AbstractReq
     this.method = method;
 
     // initialize default headers
-    this.odataHeaders = (ODataHeadersImpl) odataClient.getVersionHeaders();
+    this.odataHeaders = odataClient.newVersionHeaders();
 
     // target uri
     this.uri = uri;

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/batch/v3/BatchRequestFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/batch/v3/BatchRequestFactoryImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/batch/v3/BatchRequestFactoryImpl.java
index d796532..d68a83d 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/batch/v3/BatchRequestFactoryImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/batch/v3/BatchRequestFactoryImpl.java
@@ -35,6 +35,6 @@ public class BatchRequestFactoryImpl extends AbstractBatchRequestFactory
   @Override
   public ODataBatchRequest getBatchRequest(final String serviceRoot) {
     return new ODataBatchRequestImpl(
-            (ODataClient) client, client.getURIBuilder(serviceRoot).appendBatchSegment().build());
+            (ODataClient) client, client.newURIBuilder(serviceRoot).appendBatchSegment().build());
   }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/batch/v4/BatchRequestFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/batch/v4/BatchRequestFactoryImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/batch/v4/BatchRequestFactoryImpl.java
index bb44812..159db1d 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/batch/v4/BatchRequestFactoryImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/batch/v4/BatchRequestFactoryImpl.java
@@ -35,6 +35,6 @@ public class BatchRequestFactoryImpl extends AbstractBatchRequestFactory
   @Override
   public ODataBatchRequest getBatchRequest(final String serviceRoot) {
     return new ODataBatchRequestImpl(
-            (ODataClient) client, client.getURIBuilder(serviceRoot).appendBatchSegment().build());
+            (ODataClient) client, client.newURIBuilder(serviceRoot).appendBatchSegment().build());
   }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractEdmEnabledInvokeRequestFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractEdmEnabledInvokeRequestFactory.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractEdmEnabledInvokeRequestFactory.java
new file mode 100644
index 0000000..a9ed3f4
--- /dev/null
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractEdmEnabledInvokeRequestFactory.java
@@ -0,0 +1,172 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.olingo.client.core.communication.request.invoke;
+
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.Map;
+import org.apache.olingo.client.api.CommonEdmEnabledODataClient;
+import org.apache.olingo.client.api.communication.request.invoke.EdmEnabledInvokeRequestFactory;
+import org.apache.olingo.client.api.communication.request.invoke.ODataInvokeRequest;
+import org.apache.olingo.client.api.http.HttpMethod;
+import org.apache.olingo.commons.api.domain.ODataInvokeResult;
+import org.apache.olingo.commons.api.domain.ODataValue;
+import org.apache.olingo.commons.api.edm.EdmAction;
+import org.apache.olingo.commons.api.edm.EdmActionImport;
+import org.apache.olingo.commons.api.edm.EdmEntityContainer;
+import org.apache.olingo.commons.api.edm.EdmFunction;
+import org.apache.olingo.commons.api.edm.EdmFunctionImport;
+import org.apache.olingo.commons.api.edm.EdmSchema;
+import org.apache.olingo.commons.api.edm.FullQualifiedName;
+
+public abstract class AbstractEdmEnabledInvokeRequestFactory extends AbstractInvokeRequestFactory
+        implements EdmEnabledInvokeRequestFactory {
+
+  private static final long serialVersionUID = -3637346544674184337L;
+
+  private final CommonEdmEnabledODataClient<?> edmClient;
+
+  public AbstractEdmEnabledInvokeRequestFactory(final CommonEdmEnabledODataClient<?> edmClient) {
+    this.edmClient = edmClient;
+  }
+
+  @Override
+  public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getFunctionImportInvokeRequest(
+          final String functionImportName) {
+
+    return getFunctionImportInvokeRequest(functionImportName, null);
+  }
+
+  @Override
+  @SuppressWarnings("unchecked")
+  public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getFunctionImportInvokeRequest(
+          final String functionImportName, final Map<String, ODataValue> parameters) {
+
+    EdmFunctionImport efi = null;
+    for (EdmSchema schema : edmClient.getCachedEdm().getSchemas()) {
+      final EdmEntityContainer container = schema.getEntityContainer();
+      if (container != null) {
+        efi = container.getFunctionImport(functionImportName);
+      }
+    }
+    if (efi == null) {
+      throw new IllegalArgumentException("Could not find FunctionImport for name " + functionImportName);
+    }
+
+    final EdmFunction function = edmClient.getCachedEdm().
+            getUnboundFunction(efi.getFunctionFqn(),
+                    parameters == null ? null : new ArrayList<String>(parameters.keySet()));
+    if (function == null) {
+      throw new IllegalArgumentException("Could not find Function " + efi.getFunctionFqn());
+    }
+
+    return (ODataInvokeRequest<RES>) getInvokeRequest(HttpMethod.GET,
+            edmClient.newURIBuilder().appendOperationCallSegment(functionImportName).build(),
+            getResultReference(function.getReturnType()),
+            parameters);
+  }
+
+  @Override
+  public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getActionImportInvokeRequest(
+          final String actionImportName) {
+
+    return getActionImportInvokeRequest(actionImportName, null);
+  }
+
+  @Override
+  @SuppressWarnings("unchecked")
+  public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getActionImportInvokeRequest(
+          final String actionImportName, final Map<String, ODataValue> parameters) {
+
+    EdmActionImport eai = null;
+    for (EdmSchema schema : edmClient.getCachedEdm().getSchemas()) {
+      final EdmEntityContainer container = schema.getEntityContainer();
+      if (container != null) {
+        eai = container.getActionImport(actionImportName);
+      }
+    }
+    if (eai == null) {
+      throw new IllegalArgumentException("Could not find ActionImport for name " + actionImportName);
+    }
+
+    return (ODataInvokeRequest<RES>) getInvokeRequest(HttpMethod.POST,
+            edmClient.newURIBuilder().appendOperationCallSegment(actionImportName).build(),
+            getResultReference(eai.getUnboundAction().getReturnType()),
+            parameters);
+  }
+
+  @Override
+  public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getBoundFunctionInvokeRequest(
+          final URI bindingParameterURI, final FullQualifiedName functionName,
+          final FullQualifiedName bindingParameterTypeName, final Boolean isBindingParameterCollection) {
+
+    return getBoundFunctionInvokeRequest(
+            bindingParameterURI, functionName, bindingParameterTypeName, isBindingParameterCollection, null);
+  }
+
+  @Override
+  @SuppressWarnings("unchecked")
+  public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getBoundFunctionInvokeRequest(
+          final URI bindingParameterURI, final FullQualifiedName functionName,
+          final FullQualifiedName bindingParameterTypeName, final Boolean isBindingParameterCollection,
+          final Map<String, ODataValue> parameters) {
+
+    final EdmFunction function = edmClient.getCachedEdm().getBoundFunction(
+            functionName, bindingParameterTypeName, isBindingParameterCollection,
+            parameters == null ? null : new ArrayList<String>(parameters.keySet()));
+    if (function == null) {
+      throw new IllegalArgumentException("Could not find Function for name " + functionName);
+    }
+
+    return (ODataInvokeRequest<RES>) getInvokeRequest(HttpMethod.GET,
+            edmClient.newURIBuilder(bindingParameterURI.toASCIIString()).
+            appendOperationCallSegment(function.getFullQualifiedName().toString()).build(),
+            getResultReference(function.getReturnType()),
+            parameters);
+  }
+
+  @Override
+  public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getBoundActionInvokeRequest(
+          final URI bindingParameterURI, final FullQualifiedName actionName,
+          final FullQualifiedName bindingParameterTypeName, final Boolean isBindingParameterCollection) {
+
+    return getBoundActionInvokeRequest(
+            bindingParameterURI, actionName, bindingParameterTypeName, isBindingParameterCollection, null);
+  }
+
+  @Override
+  @SuppressWarnings("unchecked")
+  public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getBoundActionInvokeRequest(
+          final URI bindingParameterURI, final FullQualifiedName actionName,
+          final FullQualifiedName bindingParameterTypeName, final Boolean isBindingParameterCollection,
+          final Map<String, ODataValue> parameters) {
+
+    final EdmAction action = edmClient.getCachedEdm().getBoundAction(
+            actionName, bindingParameterTypeName, isBindingParameterCollection);
+    if (action == null) {
+      throw new IllegalArgumentException("Could not find Action for name " + actionName);
+    }
+
+    return (ODataInvokeRequest<RES>) getInvokeRequest(HttpMethod.POST,
+            edmClient.newURIBuilder(bindingParameterURI.toASCIIString()).
+            appendOperationCallSegment(action.getFullQualifiedName().toString()).build(),
+            getResultReference(action.getReturnType()),
+            parameters);
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractInvokeRequestFactory.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractInvokeRequestFactory.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractInvokeRequestFactory.java
index 08fc6f2..536088e 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractInvokeRequestFactory.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/AbstractInvokeRequestFactory.java
@@ -19,20 +19,67 @@
 package org.apache.olingo.client.core.communication.request.invoke;
 
 import java.net.URI;
+import java.util.Map;
 import org.apache.olingo.client.api.communication.request.invoke.InvokeRequestFactory;
 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.http.HttpMethod;
+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.ODataInvokeResult;
-import org.apache.olingo.commons.api.edm.EdmOperation;
+import org.apache.olingo.commons.api.domain.ODataValue;
+import org.apache.olingo.commons.api.edm.EdmReturnType;
+import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
 
 public abstract class AbstractInvokeRequestFactory implements InvokeRequestFactory {
 
   private static final long serialVersionUID = -906760270085197249L;
 
   @Override
-  public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getInvokeRequest(
-          final URI uri, final EdmOperation operation) {
+  public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getFunctionInvokeRequest(
+          final URI uri, final Class<RES> resultRef) {
 
-    return getInvokeRequest(uri, operation, null);
+    return getFunctionInvokeRequest(uri, resultRef, null);
   }
 
+  @Override
+  public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getFunctionInvokeRequest(
+          final URI uri, final Class<RES> resultRef, final Map<String, ODataValue> parameters) {
+
+    return getInvokeRequest(HttpMethod.GET, uri, resultRef, parameters);
+  }
+
+  @Override
+  public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getActionInvokeRequest(
+          final URI uri, final Class<RES> resultRef) {
+
+    return getActionInvokeRequest(uri, resultRef, null);
+  }
+
+  @Override
+  public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getActionInvokeRequest(
+          final URI uri, final Class<RES> resultRef, final Map<String, ODataValue> parameters) {
+
+    return getInvokeRequest(HttpMethod.POST, uri, resultRef, parameters);
+  }
+
+  @SuppressWarnings("unchecked")
+  protected <RES extends ODataInvokeResult> Class<RES> getResultReference(final EdmReturnType returnType) {
+    Class<RES> result;
+
+    if (returnType == null) {
+      result = (Class<RES>) ODataNoContent.class;
+    } else {
+      if (returnType.isCollection() && returnType.getType().getKind() == EdmTypeKind.ENTITY) {
+        result = (Class<RES>) CommonODataEntitySet.class;
+      } else if (!returnType.isCollection() && returnType.getType().getKind() == EdmTypeKind.ENTITY) {
+        result = (Class<RES>) CommonODataEntity.class;
+      } else {
+        result = (Class<RES>) CommonODataProperty.class;
+      }
+    }
+
+    return result;
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v3/EdmEnabledInvokeRequestFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v3/EdmEnabledInvokeRequestFactoryImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v3/EdmEnabledInvokeRequestFactoryImpl.java
index de22c30..b9eeeb1 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v3/EdmEnabledInvokeRequestFactoryImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v3/EdmEnabledInvokeRequestFactoryImpl.java
@@ -18,21 +18,16 @@
  */
 package org.apache.olingo.client.core.communication.request.invoke.v3;
 
-import java.util.ArrayList;
+import java.net.URI;
 import java.util.Map;
-import org.apache.olingo.client.api.communication.request.invoke.EdmEnabledInvokeRequestFactory;
 import org.apache.olingo.client.api.communication.request.invoke.ODataInvokeRequest;
+import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.client.api.v3.EdmEnabledODataClient;
+import org.apache.olingo.client.core.communication.request.invoke.AbstractEdmEnabledInvokeRequestFactory;
 import org.apache.olingo.commons.api.domain.ODataInvokeResult;
 import org.apache.olingo.commons.api.domain.ODataValue;
-import org.apache.olingo.commons.api.edm.EdmActionImport;
-import org.apache.olingo.commons.api.edm.EdmEntityContainer;
-import org.apache.olingo.commons.api.edm.EdmFunction;
-import org.apache.olingo.commons.api.edm.EdmFunctionImport;
-import org.apache.olingo.commons.api.edm.EdmSchema;
 
-public class EdmEnabledInvokeRequestFactoryImpl
-        extends InvokeRequestFactoryImpl implements EdmEnabledInvokeRequestFactory {
+public class EdmEnabledInvokeRequestFactoryImpl extends AbstractEdmEnabledInvokeRequestFactory {
 
   private static final long serialVersionUID = 5854571629835831697L;
 
@@ -44,66 +39,15 @@ public class EdmEnabledInvokeRequestFactoryImpl
   }
 
   @Override
-  public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getFunctionImportInvokeRequest(
-          final String functionImportName) {
+  public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getInvokeRequest(
+          final HttpMethod method, final URI uri, final Class<RES> resultRef,
+          final Map<String, ODataValue> parameters) {
 
-    return getFunctionImportInvokeRequest(functionImportName, null);
-  }
-
-  @Override
-  public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getFunctionImportInvokeRequest(
-          final String functionImportName, final Map<String, ODataValue> parameters) {
-
-    EdmFunctionImport efi = null;
-    for (EdmSchema schema : edmClient.getCachedEdm().getSchemas()) {
-      final EdmEntityContainer container = schema.getEntityContainer();
-      if (container != null) {
-        efi = container.getFunctionImport(functionImportName);
-      }
-    }
-    if (efi == null) {
-      throw new IllegalArgumentException("Could not find FunctionImport for name " + functionImportName);
+    final ODataInvokeRequest<RES> request = new ODataInvokeRequestImpl<RES>(edmClient, resultRef, method, uri);
+    if (parameters != null) {
+      request.setParameters(parameters);
     }
 
-    final EdmFunction function = edmClient.getCachedEdm().
-            getUnboundFunction(efi.getFunctionFqn(),
-                    parameters == null ? null : new ArrayList<String>(parameters.keySet()));
-    if (function == null) {
-      throw new IllegalArgumentException("Could not find Function " + efi.getFunctionFqn());
-    }
-
-    return getInvokeRequest(
-            edmClient.getURIBuilder().appendOperationCallSegment(functionImportName).build(),
-            function,
-            parameters);
+    return request;
   }
-
-  @Override
-  public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getActionImportInvokeRequest(
-          final String actionImportName) {
-
-    return getActionImportInvokeRequest(actionImportName, null);
-  }
-
-  @Override
-  public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getActionImportInvokeRequest(
-          final String actionImportName, final Map<String, ODataValue> parameters) {
-
-    EdmActionImport eai = null;
-    for (EdmSchema schema : edmClient.getCachedEdm().getSchemas()) {
-      final EdmEntityContainer container = schema.getEntityContainer();
-      if (container != null) {
-        eai = container.getActionImport(actionImportName);
-      }
-    }
-    if (eai == null) {
-      throw new IllegalArgumentException("Could not find ActionImport for name " + actionImportName);
-    }
-
-    return getInvokeRequest(
-            edmClient.getURIBuilder().appendOperationCallSegment(actionImportName).build(),
-            eai.getUnboundAction(),
-            parameters);
-  }
-
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/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 0d71a4a..e6ff223 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
@@ -22,55 +22,27 @@ import java.net.URI;
 import java.util.Map;
 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.commons.api.domain.ODataInvokeResult;
 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;
-import org.apache.olingo.commons.api.domain.v3.ODataEntity;
-import org.apache.olingo.commons.api.domain.v3.ODataEntitySet;
-import org.apache.olingo.commons.api.domain.v3.ODataProperty;
-import org.apache.olingo.commons.api.edm.EdmAction;
-import org.apache.olingo.commons.api.edm.EdmOperation;
-import org.apache.olingo.commons.api.edm.EdmReturnType;
-import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
 
 public class InvokeRequestFactoryImpl extends AbstractInvokeRequestFactory {
 
   private static final long serialVersionUID = -659256862901915496L;
 
   private final ODataClient client;
-  
+
   public InvokeRequestFactoryImpl(final ODataClient client) {
     this.client = client;
   }
 
   @Override
-  @SuppressWarnings("unchecked")
   public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getInvokeRequest(
-          final URI uri, final EdmOperation operation, final Map<String, ODataValue> parameters) {
-
-    final HttpMethod method = operation instanceof EdmAction
-            ? HttpMethod.POST
-            : HttpMethod.GET;
-    final EdmReturnType returnType = operation.getReturnType();
+          final HttpMethod method, final URI uri, final Class<RES> resultRef,
+          final Map<String, ODataValue> parameters) {
 
-    ODataInvokeRequest<RES> request;
-    if (returnType == null) {
-      request = (ODataInvokeRequest<RES>) new ODataInvokeRequestImpl<ODataNoContent>(
-              client, ODataNoContent.class, method, uri);
-    } else {
-      if (returnType.isCollection() && returnType.getType().getKind() == EdmTypeKind.ENTITY) {
-        request = (ODataInvokeRequest<RES>) new ODataInvokeRequestImpl<ODataEntitySet>(
-                client, ODataEntitySet.class, method, uri);
-      } else if (!returnType.isCollection() && returnType.getType().getKind() == EdmTypeKind.ENTITY) {
-        request = (ODataInvokeRequest<RES>) new ODataInvokeRequestImpl<ODataEntity>(
-                client, ODataEntity.class, method, uri);
-      } else {
-        request = (ODataInvokeRequest<RES>) new ODataInvokeRequestImpl<ODataProperty>(
-                client, ODataProperty.class, method, uri);
-      }
-    }
+    final ODataInvokeRequest<RES> request = new ODataInvokeRequestImpl<RES>(client, resultRef, method, uri);
     if (parameters != null) {
       request.setParameters(parameters);
     }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/EdmEnabledInvokeRequestFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/EdmEnabledInvokeRequestFactoryImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/EdmEnabledInvokeRequestFactoryImpl.java
index 4df6c3f..2579108 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/EdmEnabledInvokeRequestFactoryImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/EdmEnabledInvokeRequestFactoryImpl.java
@@ -18,21 +18,16 @@
  */
 package org.apache.olingo.client.core.communication.request.invoke.v4;
 
-import java.util.ArrayList;
+import java.net.URI;
 import java.util.Map;
-import org.apache.olingo.client.api.communication.request.invoke.EdmEnabledInvokeRequestFactory;
 import org.apache.olingo.client.api.communication.request.invoke.ODataInvokeRequest;
+import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.client.api.v4.EdmEnabledODataClient;
+import org.apache.olingo.client.core.communication.request.invoke.AbstractEdmEnabledInvokeRequestFactory;
 import org.apache.olingo.commons.api.domain.ODataInvokeResult;
 import org.apache.olingo.commons.api.domain.ODataValue;
-import org.apache.olingo.commons.api.edm.EdmActionImport;
-import org.apache.olingo.commons.api.edm.EdmEntityContainer;
-import org.apache.olingo.commons.api.edm.EdmFunction;
-import org.apache.olingo.commons.api.edm.EdmFunctionImport;
-import org.apache.olingo.commons.api.edm.EdmSchema;
 
-public class EdmEnabledInvokeRequestFactoryImpl
-        extends InvokeRequestFactoryImpl implements EdmEnabledInvokeRequestFactory {
+public class EdmEnabledInvokeRequestFactoryImpl extends AbstractEdmEnabledInvokeRequestFactory {
 
   private static final long serialVersionUID = 5854571629835831697L;
 
@@ -44,66 +39,15 @@ public class EdmEnabledInvokeRequestFactoryImpl
   }
 
   @Override
-  public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getFunctionImportInvokeRequest(
-          final String functionImportName) {
+  public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getInvokeRequest(
+          final HttpMethod method, final URI uri, final Class<RES> resultRef,
+          final Map<String, ODataValue> parameters) {
 
-    return getFunctionImportInvokeRequest(functionImportName, null);
-  }
-
-  @Override
-  public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getFunctionImportInvokeRequest(
-          final String functionImportName, final Map<String, ODataValue> parameters) {
-
-    EdmFunctionImport efi = null;
-    for (EdmSchema schema : edmClient.getCachedEdm().getSchemas()) {
-      final EdmEntityContainer container = schema.getEntityContainer();
-      if (container != null) {
-        efi = container.getFunctionImport(functionImportName);
-      }
-    }
-    if (efi == null) {
-      throw new IllegalArgumentException("Could not find FunctionImport for name " + functionImportName);
+    final ODataInvokeRequest<RES> request = new ODataInvokeRequestImpl<RES>(edmClient, resultRef, method, uri);
+    if (parameters != null) {
+      request.setParameters(parameters);
     }
 
-    final EdmFunction function = edmClient.getCachedEdm().
-            getUnboundFunction(efi.getFunctionFqn(),
-                    parameters == null ? null : new ArrayList<String>(parameters.keySet()));
-    if (function == null) {
-      throw new IllegalArgumentException("Could not find Function " + efi.getFunctionFqn());
-    }
-
-    return getInvokeRequest(
-            edmClient.getURIBuilder().appendOperationCallSegment(functionImportName).build(),
-            function,
-            parameters);
+    return request;
   }
-
-  @Override
-  public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getActionImportInvokeRequest(
-          final String actionImportName) {
-
-    return getActionImportInvokeRequest(actionImportName, null);
-  }
-
-  @Override
-  public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getActionImportInvokeRequest(
-          final String actionImportName, final Map<String, ODataValue> parameters) {
-
-    EdmActionImport eai = null;
-    for (EdmSchema schema : edmClient.getCachedEdm().getSchemas()) {
-      final EdmEntityContainer container = schema.getEntityContainer();
-      if (container != null) {
-        eai = container.getActionImport(actionImportName);
-      }
-    }
-    if (eai == null) {
-      throw new IllegalArgumentException("Could not find ActionImport for name " + actionImportName);
-    }
-
-    return getInvokeRequest(
-            edmClient.getURIBuilder().appendOperationCallSegment(actionImportName).build(),
-            eai.getUnboundAction(),
-            parameters);
-  }
-
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/InvokeRequestFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/InvokeRequestFactoryImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/InvokeRequestFactoryImpl.java
index ded9992..15035b5 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/InvokeRequestFactoryImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/InvokeRequestFactoryImpl.java
@@ -22,18 +22,10 @@ import java.net.URI;
 import java.util.Map;
 import org.apache.olingo.client.api.v4.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.http.HttpMethod;
+import org.apache.olingo.client.core.communication.request.invoke.AbstractInvokeRequestFactory;
 import org.apache.olingo.commons.api.domain.ODataInvokeResult;
 import org.apache.olingo.commons.api.domain.ODataValue;
-import org.apache.olingo.client.core.communication.request.invoke.AbstractInvokeRequestFactory;
-import org.apache.olingo.commons.api.domain.v4.ODataEntity;
-import org.apache.olingo.commons.api.domain.v4.ODataEntitySet;
-import org.apache.olingo.commons.api.domain.v4.ODataProperty;
-import org.apache.olingo.commons.api.edm.EdmAction;
-import org.apache.olingo.commons.api.edm.EdmOperation;
-import org.apache.olingo.commons.api.edm.EdmReturnType;
-import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
 
 public class InvokeRequestFactoryImpl extends AbstractInvokeRequestFactory {
 
@@ -45,32 +37,12 @@ public class InvokeRequestFactoryImpl extends AbstractInvokeRequestFactory {
     this.client = client;
   }
 
-  @SuppressWarnings("unchecked")
   @Override
   public <RES extends ODataInvokeResult> ODataInvokeRequest<RES> getInvokeRequest(
-          final URI uri, final EdmOperation operation, final Map<String, ODataValue> parameters) {
+          final HttpMethod method, final URI uri, final Class<RES> resultRef,
+          final Map<String, ODataValue> parameters) {
 
-    final HttpMethod method = operation instanceof EdmAction
-            ? HttpMethod.POST
-            : HttpMethod.GET;
-    final EdmReturnType returnType = operation.getReturnType();
-
-    ODataInvokeRequest<RES> request;
-    if (returnType == null) {
-      request = (ODataInvokeRequest<RES>) new ODataInvokeRequestImpl<ODataNoContent>(
-              client, ODataNoContent.class, method, uri);
-    } else {
-      if (returnType.isCollection() && returnType.getType().getKind() == EdmTypeKind.ENTITY) {
-        request = (ODataInvokeRequest<RES>) new ODataInvokeRequestImpl<ODataEntitySet>(
-                client, ODataEntitySet.class, method, uri);
-      } else if (!returnType.isCollection() && returnType.getType().getKind() == EdmTypeKind.ENTITY) {
-        request = (ODataInvokeRequest<RES>) new ODataInvokeRequestImpl<ODataEntity>(
-                client, ODataEntity.class, method, uri);
-      } else {
-        request = (ODataInvokeRequest<RES>) new ODataInvokeRequestImpl<ODataProperty>(
-                client, ODataProperty.class, method, uri);
-      }
-    }
+    final ODataInvokeRequest<RES> request = new ODataInvokeRequestImpl<RES>(client, resultRef, method, uri);
     if (parameters != null) {
       request.setParameters(parameters);
     }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/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 abf2a8c..8ac4dc1 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
@@ -67,14 +67,14 @@ public abstract class AbstractRetrieveRequestFactory implements CommonRetrieveRe
   @Override
   public EdmMetadataRequest getMetadataRequest(final String serviceRoot) {
     return new EdmMetadataRequestImpl(client, serviceRoot,
-            client.getURIBuilder(serviceRoot).appendMetadataSegment().build());
+            client.newURIBuilder(serviceRoot).appendMetadataSegment().build());
   }
 
   @Override
   public ODataServiceDocumentRequest getServiceDocumentRequest(final String serviceRoot) {
     return new ODataServiceDocumentRequestImpl(client,
             StringUtils.isNotBlank(serviceRoot) && serviceRoot.endsWith("/")
-            ? client.getURIBuilder(serviceRoot).build()
-            : client.getURIBuilder(serviceRoot + "/").build());
+            ? client.newURIBuilder(serviceRoot).build()
+            : client.newURIBuilder(serviceRoot + "/").build());
   }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v3/ODataLinkCollectionRequestImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v3/ODataLinkCollectionRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v3/ODataLinkCollectionRequestImpl.java
index b11088e..e64a764 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v3/ODataLinkCollectionRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v3/ODataLinkCollectionRequestImpl.java
@@ -45,7 +45,7 @@ public class ODataLinkCollectionRequestImpl extends AbstractODataRetrieveRequest
    */
   ODataLinkCollectionRequestImpl(final ODataClient odataClient, final URI targetURI, final String linkName) {
     super(odataClient, ODataFormat.class,
-            odataClient.getURIBuilder(targetURI.toASCIIString()).appendLinksSegment(linkName).build());
+            odataClient.newURIBuilder(targetURI.toASCIIString()).appendLinksSegment(linkName).build());
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/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 0e8db34..359ddb8 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
@@ -49,7 +49,7 @@ public class RetrieveRequestFactoryImpl extends AbstractRetrieveRequestFactory
   @Override
   public XMLMetadataRequest getXMLMetadataRequest(final String serviceRoot) {
     return new XMLMetadataRequestImpl(((ODataClient) client),
-            client.getURIBuilder(serviceRoot).appendMetadataSegment().build());
+            client.newURIBuilder(serviceRoot).appendMetadataSegment().build());
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/RetrieveRequestFactoryImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/RetrieveRequestFactoryImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/RetrieveRequestFactoryImpl.java
index 804d2de..5006e1a 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/RetrieveRequestFactoryImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/RetrieveRequestFactoryImpl.java
@@ -50,7 +50,7 @@ public class RetrieveRequestFactoryImpl extends AbstractRetrieveRequestFactory
   @Override
   public XMLMetadataRequest getXMLMetadataRequest(final String serviceRoot) {
     return new XMLMetadataRequestImpl(((ODataClient) client),
-            client.getURIBuilder(serviceRoot).appendMetadataSegment().build());
+            client.newURIBuilder(serviceRoot).appendMetadataSegment().build());
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/XMLMetadataRequestImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/XMLMetadataRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/XMLMetadataRequestImpl.java
index 0a1d48e..865b95c 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/XMLMetadataRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/v4/XMLMetadataRequestImpl.java
@@ -61,7 +61,7 @@ public class XMLMetadataRequestImpl extends AbstractMetadataRequestImpl<Map<Stri
     // process external references
     for (Reference reference : rootMetadata.getReferences()) {
       final SingleXMLMetadatRequestImpl includeReq = new SingleXMLMetadatRequestImpl(
-              (ODataClient) odataClient, odataClient.getURIBuilder(reference.getUri().toASCIIString()).build());
+              (ODataClient) odataClient, odataClient.newURIBuilder(reference.getUri().toASCIIString()).build());
       final XMLMetadata includeMetadata = includeReq.execute().getBody();
 
       // edmx:Include

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIUtils.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIUtils.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIUtils.java
index 4ecced4..c97e6fd 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIUtils.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/uri/URIUtils.java
@@ -50,7 +50,6 @@ import org.apache.olingo.client.api.uri.SegmentType;
 import org.apache.olingo.client.core.http.BasicAuthHttpClientFactory;
 import org.apache.olingo.client.core.http.ProxyWrapperHttpClientFactory;
 import org.apache.olingo.commons.api.Constants;
-import org.apache.olingo.commons.api.edm.EdmEntityContainer;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
 import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
@@ -148,25 +147,6 @@ public final class URIUtils {
     return uri.normalize();
   }
 
-  /**
-   * Gets operation import URI segment.
-   *
-   * @param entityContainer entity container.
-   * @param operationImportName action / function import name.
-   * @return URI segment.
-   */
-  public static String operationImportURISegment(
-          final EdmEntityContainer entityContainer, final String operationImportName) {
-
-    final StringBuilder result = new StringBuilder();
-    if (!entityContainer.isDefault()) {
-      result.append(entityContainer.getName()).append('.');
-    }
-    result.append(operationImportName);
-
-    return result.toString();
-  }
-
   private static String prefix(final ODataServiceVersion version, final EdmPrimitiveTypeKind typeKind) {
     String result = StringUtils.EMPTY;
     if (version.compareTo(ODataServiceVersion.V40) < 0) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/EdmEnabledODataClientImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/EdmEnabledODataClientImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/EdmEnabledODataClientImpl.java
index 60f753d..a2e92d0 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/EdmEnabledODataClientImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/EdmEnabledODataClientImpl.java
@@ -65,7 +65,7 @@ public class EdmEnabledODataClientImpl extends ODataClientImpl implements EdmEna
   }
 
   @Override
-  public URIBuilder getURIBuilder() {
+  public URIBuilder newURIBuilder() {
     return new URIBuilderImpl(getServiceVersion(), configuration, serviceRoot);
   }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java
index 323f30b..8d696ec 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/v3/ODataClientImpl.java
@@ -81,7 +81,7 @@ public class ODataClientImpl extends AbstractODataClient<UpdateType> implements
   }
 
   @Override
-  public ODataHeaders getVersionHeaders() {
+  public ODataHeaders newVersionHeaders() {
     final ODataHeadersImpl odataHeaders = new ODataHeadersImpl();
     odataHeaders.setHeader(HeaderName.minDataServiceVersion, ODataServiceVersion.V30.toString());
     odataHeaders.setHeader(HeaderName.maxDataServiceVersion, ODataServiceVersion.V30.toString());
@@ -95,7 +95,7 @@ public class ODataClientImpl extends AbstractODataClient<UpdateType> implements
   }
 
   @Override
-  public URIBuilder getURIBuilder(final String serviceRoot) {
+  public URIBuilder newURIBuilder(final String serviceRoot) {
     return new URIBuilderImpl(getServiceVersion(), configuration, serviceRoot);
   }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/EdmEnabledODataClientImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/EdmEnabledODataClientImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/EdmEnabledODataClientImpl.java
index a9eb352..1cd6059 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/EdmEnabledODataClientImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/EdmEnabledODataClientImpl.java
@@ -72,7 +72,7 @@ public class EdmEnabledODataClientImpl extends ODataClientImpl implements EdmEna
   }
 
   @Override
-  public URIBuilder getURIBuilder() {
+  public URIBuilder newURIBuilder() {
     return new URIBuilderImpl(getServiceVersion(), configuration, serviceRoot);
   }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java
index b36d061..4b4efd4 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/v4/ODataClientImpl.java
@@ -88,7 +88,7 @@ public class ODataClientImpl extends AbstractODataClient<UpdateType> implements
   }
 
   @Override
-  public ODataHeaders getVersionHeaders() {
+  public ODataHeaders newVersionHeaders() {
     final ODataHeadersImpl odataHeaders = new ODataHeadersImpl();
     odataHeaders.setHeader(HeaderName.odataMaxVersion, ODataServiceVersion.V40.toString());
     odataHeaders.setHeader(HeaderName.odataVersion, ODataServiceVersion.V40.toString());
@@ -101,7 +101,7 @@ public class ODataClientImpl extends AbstractODataClient<UpdateType> implements
   }
 
   @Override
-  public URIBuilder getURIBuilder(final String serviceRoot) {
+  public URIBuilder newURIBuilder(final String serviceRoot) {
     return new URIBuilderImpl(getServiceVersion(), getConfiguration(), serviceRoot);
   }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v3/URIBuilderTest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v3/URIBuilderTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v3/URIBuilderTest.java
index a0bb04c..11227f3 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v3/URIBuilderTest.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v3/URIBuilderTest.java
@@ -42,14 +42,14 @@ public class URIBuilderTest extends AbstractTest {
 
   @Test
   public void metadata() throws URISyntaxException {
-    final URI uri = getClient().getURIBuilder(SERVICE_ROOT).appendMetadataSegment().build();
+    final URI uri = getClient().newURIBuilder(SERVICE_ROOT).appendMetadataSegment().build();
 
     assertEquals(new org.apache.http.client.utils.URIBuilder(SERVICE_ROOT + "/$metadata").build(), uri);
   }
 
   @Test
   public void entity() throws URISyntaxException {
-    final URI uri = getClient().getURIBuilder(SERVICE_ROOT).appendEntitySetSegment("AnEntitySet").
+    final URI uri = getClient().newURIBuilder(SERVICE_ROOT).appendEntitySetSegment("AnEntitySet").
             appendKeySegment(11).build();
 
     assertEquals(new org.apache.http.client.utils.URIBuilder(SERVICE_ROOT + "/AnEntitySet(11)").build(), uri);
@@ -57,21 +57,21 @@ public class URIBuilderTest extends AbstractTest {
     final Map<String, Object> multiKey = new HashMap<String, Object>();
     multiKey.put("OrderId", -10);
     multiKey.put("ProductId", -10);
-    URIBuilder uriBuilder = getClient().getURIBuilder(SERVICE_ROOT).
+    URIBuilder uriBuilder = getClient().newURIBuilder(SERVICE_ROOT).
             appendEntitySetSegment("OrderLine").appendKeySegment(multiKey).
             appendPropertySegment("Quantity").appendValueSegment();
 
     assertEquals(new org.apache.http.client.utils.URIBuilder(
             SERVICE_ROOT + "/OrderLine(OrderId=-10,ProductId=-10)/Quantity/$value").build(), uriBuilder.build());
 
-    uriBuilder = getClient().getURIBuilder(SERVICE_ROOT).
+    uriBuilder = getClient().newURIBuilder(SERVICE_ROOT).
             appendEntitySetSegment("Customer").appendKeySegment(-10).
             select("CustomerId", "Name", "Orders").expand("Orders");
     assertEquals(new org.apache.http.client.utils.URIBuilder(SERVICE_ROOT + "/Customer(-10)").
             addParameter("$select", "CustomerId,Name,Orders").addParameter("$expand", "Orders").build(),
             uriBuilder.build());
 
-    uriBuilder = getClient().getURIBuilder(SERVICE_ROOT).
+    uriBuilder = getClient().newURIBuilder(SERVICE_ROOT).
             appendEntitySetSegment("Customer").appendKeySegment(-10).appendLinksSegment("Orders");
     assertEquals(new org.apache.http.client.utils.URIBuilder(SERVICE_ROOT + "/Customer(-10)/$links/Orders").build(),
             uriBuilder.build());
@@ -79,11 +79,11 @@ public class URIBuilderTest extends AbstractTest {
 
   @Test
   public void count() throws URISyntaxException {
-    URI uri = getClient().getURIBuilder(SERVICE_ROOT).appendEntitySetSegment("Products").count().build();
+    URI uri = getClient().newURIBuilder(SERVICE_ROOT).appendEntitySetSegment("Products").count().build();
 
     assertEquals(new org.apache.http.client.utils.URIBuilder(SERVICE_ROOT + "/Products/$count").build(), uri);
 
-    uri = getClient().getURIBuilder(SERVICE_ROOT).appendEntitySetSegment("Products").
+    uri = getClient().newURIBuilder(SERVICE_ROOT).appendEntitySetSegment("Products").
             inlineCount(URIBuilder.InlineCount.allpages).build();
 
     assertEquals(new org.apache.http.client.utils.URIBuilder(SERVICE_ROOT + "/Products").
@@ -92,7 +92,7 @@ public class URIBuilderTest extends AbstractTest {
 
   @Test
   public void filter() throws URISyntaxException {
-    final URIBuilder uriBuilder = getClient().getURIBuilder(SERVICE_ROOT).appendEntitySetSegment("AnEntitySet").
+    final URIBuilder uriBuilder = getClient().newURIBuilder(SERVICE_ROOT).appendEntitySetSegment("AnEntitySet").
             filter(getClient().getFilterFactory().lt("VIN", 16));
 
     assertEquals(new org.apache.http.client.utils.URIBuilder(SERVICE_ROOT + "/AnEntitySet").
@@ -103,7 +103,7 @@ public class URIBuilderTest extends AbstractTest {
   @Test
   public void filterWithParameter() throws URISyntaxException {
     // http://host/service.svc/Employees?$filter=Region eq @p1&@p1='WA'
-    final URIBuilder uriBuilder = getClient().getURIBuilder(SERVICE_ROOT).appendEntitySetSegment("Employees").
+    final URIBuilder uriBuilder = getClient().newURIBuilder(SERVICE_ROOT).appendEntitySetSegment("Employees").
             filter(getClient().getFilterFactory().eq("Region", new ParameterAlias("p1"))).
             addParameterAlias("p1", "'WA'");
 
@@ -114,7 +114,7 @@ public class URIBuilderTest extends AbstractTest {
 
   @Test
   public void boundAction() throws URISyntaxException {
-    final URIBuilder uriBuilder = getClient().getURIBuilder(SERVICE_ROOT).
+    final URIBuilder uriBuilder = getClient().newURIBuilder(SERVICE_ROOT).
             appendEntitySetSegment("Products").appendOperationCallSegment("MostExpensive");
 
     assertEquals(new org.apache.http.client.utils.URIBuilder(
@@ -123,7 +123,7 @@ public class URIBuilderTest extends AbstractTest {
 
   @Test
   public void derived() throws URISyntaxException {
-    final URIBuilder uriBuilder = getClient().getURIBuilder(SERVICE_ROOT).
+    final URIBuilder uriBuilder = getClient().newURIBuilder(SERVICE_ROOT).
             appendEntitySetSegment("Customers").appendNavigationSegment("Model").
             appendDerivedEntityTypeSegment("Namespace.VipCustomer").appendKeySegment(1);
 
@@ -133,7 +133,7 @@ public class URIBuilderTest extends AbstractTest {
 
   @Test
   public void expandMoreThenOnce() throws URISyntaxException {
-    URI uri = getClient().getURIBuilder(SERVICE_ROOT).appendEntitySetSegment("Products").appendKeySegment(5).
+    URI uri = getClient().newURIBuilder(SERVICE_ROOT).appendEntitySetSegment("Products").appendKeySegment(5).
             expand("Orders", "Customers").expand("Info").build();
 
     assertEquals(new org.apache.http.client.utils.URIBuilder(SERVICE_ROOT + "/Products(5)").
@@ -142,7 +142,7 @@ public class URIBuilderTest extends AbstractTest {
 
   @Test
   public void selectMoreThenOnce() throws URISyntaxException {
-    URI uri = getClient().getURIBuilder(SERVICE_ROOT).appendEntitySetSegment("Customers").appendKeySegment(5).
+    URI uri = getClient().newURIBuilder(SERVICE_ROOT).appendEntitySetSegment("Customers").appendKeySegment(5).
             select("Name", "Surname").expand("Info").select("Gender").build();
 
     assertEquals(new org.apache.http.client.utils.URIBuilder(SERVICE_ROOT + "/Customers(5)").

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v4/URIBuilderTest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v4/URIBuilderTest.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v4/URIBuilderTest.java
index 777236d..9b8ea75 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v4/URIBuilderTest.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/uri/v4/URIBuilderTest.java
@@ -41,7 +41,7 @@ public class URIBuilderTest extends AbstractTest {
 
   @Test
   public void expandWithOptions() throws URISyntaxException {
-    final URI uri = getClient().getURIBuilder(SERVICE_ROOT).appendEntitySetSegment("Products").appendKeySegment(5).
+    final URI uri = getClient().newURIBuilder(SERVICE_ROOT).appendEntitySetSegment("Products").appendKeySegment(5).
             expandWithOptions("ProductDetails", new LinkedHashMap<QueryOption, Object>() {
               private static final long serialVersionUID = 3109256773218160485L;
 
@@ -57,7 +57,7 @@ public class URIBuilderTest extends AbstractTest {
 
   @Test
   public void expandWithLevels() throws URISyntaxException {
-    final URI uri = getClient().getURIBuilder(SERVICE_ROOT).appendEntitySetSegment("Products").appendKeySegment(1).
+    final URI uri = getClient().newURIBuilder(SERVICE_ROOT).appendEntitySetSegment("Products").appendKeySegment(1).
             expandWithOptions("Customer", Collections.<QueryOption, Object>singletonMap(QueryOption.LEVELS, 4)).
             build();
 
@@ -67,11 +67,11 @@ public class URIBuilderTest extends AbstractTest {
 
   @Test
   public void count() throws URISyntaxException {
-    URI uri = getClient().getURIBuilder(SERVICE_ROOT).appendEntitySetSegment("Products").count().build();
+    URI uri = getClient().newURIBuilder(SERVICE_ROOT).appendEntitySetSegment("Products").count().build();
 
     assertEquals(new org.apache.http.client.utils.URIBuilder(SERVICE_ROOT + "/Products/$count").build(), uri);
 
-    uri = getClient().getURIBuilder(SERVICE_ROOT).appendEntitySetSegment("Products").count(true).build();
+    uri = getClient().newURIBuilder(SERVICE_ROOT).appendEntitySetSegment("Products").count(true).build();
 
     assertEquals(new org.apache.http.client.utils.URIBuilder(SERVICE_ROOT + "/Products").
             addParameter("$count", "true").build(), uri);
@@ -79,7 +79,7 @@ public class URIBuilderTest extends AbstractTest {
 
   @Test
   public void singleton() throws URISyntaxException {
-    final URIBuilder uriBuilder = getClient().getURIBuilder(SERVICE_ROOT).
+    final URIBuilder uriBuilder = getClient().newURIBuilder(SERVICE_ROOT).
             appendSingletonSegment("BestProductEverCreated");
 
     assertEquals(new org.apache.http.client.utils.URIBuilder(
@@ -88,7 +88,7 @@ public class URIBuilderTest extends AbstractTest {
 
   @Test
   public void entityId() throws URISyntaxException {
-    final URIBuilder uriBuilder = getClient().getURIBuilder(SERVICE_ROOT).
+    final URIBuilder uriBuilder = getClient().newURIBuilder(SERVICE_ROOT).
             appendEntityIdSegment("Products(0)");
 
     assertEquals(new org.apache.http.client.utils.URIBuilder(
@@ -97,7 +97,7 @@ public class URIBuilderTest extends AbstractTest {
 
   @Test
   public void boundAction() throws URISyntaxException {
-    final URIBuilder uriBuilder = getClient().getURIBuilder(SERVICE_ROOT).
+    final URIBuilder uriBuilder = getClient().newURIBuilder(SERVICE_ROOT).
             appendEntitySetSegment("Categories").appendKeySegment(1).
             appendNavigationSegment("Products").appendNavigationSegment("Model").
             appendOperationCallSegment("AllOrders");
@@ -108,14 +108,14 @@ public class URIBuilderTest extends AbstractTest {
 
   @Test
   public void ref() throws URISyntaxException {
-    URIBuilder uriBuilder = getClient().getURIBuilder(SERVICE_ROOT).
+    URIBuilder uriBuilder = getClient().newURIBuilder(SERVICE_ROOT).
             appendEntitySetSegment("Categories").appendKeySegment(1).
             appendNavigationSegment("Products").appendRefSegment();
 
     assertEquals(new org.apache.http.client.utils.URIBuilder(
             SERVICE_ROOT + "/Categories(1)/Products/$ref").build(), uriBuilder.build());
 
-    uriBuilder = getClient().getURIBuilder(SERVICE_ROOT).
+    uriBuilder = getClient().newURIBuilder(SERVICE_ROOT).
             appendEntitySetSegment("Categories").appendKeySegment(1).
             appendNavigationSegment("Products").appendRefSegment().id("../../Products(0)");
 
@@ -126,7 +126,7 @@ public class URIBuilderTest extends AbstractTest {
 
   @Test
   public void derived() throws URISyntaxException {
-    final URIBuilder uriBuilder = getClient().getURIBuilder(SERVICE_ROOT).
+    final URIBuilder uriBuilder = getClient().newURIBuilder(SERVICE_ROOT).
             appendEntitySetSegment("Customers").appendDerivedEntityTypeSegment("Model.VipCustomer").appendKeySegment(1);
 
     assertEquals(new org.apache.http.client.utils.URIBuilder(
@@ -135,7 +135,7 @@ public class URIBuilderTest extends AbstractTest {
 
   @Test
   public void crossjoin() throws URISyntaxException {
-    final URIBuilder uriBuilder = getClient().getURIBuilder(SERVICE_ROOT).
+    final URIBuilder uriBuilder = getClient().newURIBuilder(SERVICE_ROOT).
             appendCrossjoinSegment("Products", "Sales");
 
     assertEquals(new org.apache.http.client.utils.URIBuilder(
@@ -144,7 +144,7 @@ public class URIBuilderTest extends AbstractTest {
 
   @Test
   public void all() throws URISyntaxException {
-    final URIBuilder uriBuilder = getClient().getURIBuilder(SERVICE_ROOT).appendAllSegment();
+    final URIBuilder uriBuilder = getClient().newURIBuilder(SERVICE_ROOT).appendAllSegment();
 
     assertEquals(new org.apache.http.client.utils.URIBuilder(
             SERVICE_ROOT + "/$all").build(), uriBuilder.build());
@@ -152,7 +152,7 @@ public class URIBuilderTest extends AbstractTest {
 
   @Test
   public void search() throws URISyntaxException {
-    final URIBuilder uriBuilder = getClient().getURIBuilder(SERVICE_ROOT).
+    final URIBuilder uriBuilder = getClient().newURIBuilder(SERVICE_ROOT).
             appendEntitySetSegment("Products").search("blue OR green");
 
     assertEquals(new org.apache.http.client.utils.URIBuilder(


[2/4] Invoke request factory re-factoring

Posted by il...@apache.org.
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);
+
 }


[4/4] git commit: Invoke request factory re-factoring

Posted by il...@apache.org.
Invoke request factory re-factoring


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

Branch: refs/heads/master
Commit: 35e89699ea25b8d878fc312a837f7bc61ee0a67a
Parents: 377ddb9
Author: Francesco Chicchiriccò <--global>
Authored: Wed May 21 13:40:50 2014 +0200
Committer: Francesco Chicchiriccò <--global>
Committed: Wed May 21 13:40:50 2014 +0200

----------------------------------------------------------------------
 .../commons/AbstractInvocationHandler.java      |  30 ++-
 .../AbstractStructuredInvocationHandler.java    |   4 +-
 .../commons/EntitySetInvocationHandler.java     |  11 +-
 .../olingo/ext/proxy/commons/FilterImpl.java    |   2 +-
 .../commons/OperationInvocationHandler.java     |   5 +-
 .../olingo/ext/proxy/commons/SearchImpl.java    |   2 +-
 .../java/org/apache/olingo/fit/V4Services.java  |  31 ++-
 .../resources/V40/Accounts/102/entity.full.json |  34 +++
 .../main/resources/V40/Accounts/102/entity.xml  |  55 ++++
 .../V40/Accounts/102/links/MyGiftCard.full.json |  15 ++
 .../V40/Accounts/102/links/MyGiftCard.xml       |  41 +++
 .../MyPaymentInstruments(102901).full.json      |  16 ++
 .../102/links/MyPaymentInstruments(102901).xml  |  40 +++
 .../MyPaymentInstruments(102902).full.json      |  16 ++
 .../102/links/MyPaymentInstruments(102902).xml  |  40 +++
 .../102/links/MyPaymentInstruments.full.json    |  62 +++++
 .../Accounts/102/links/MyPaymentInstruments.xml |  95 +++++++
 .../olingo/fit/v3/AbstractTestITCase.java       |   4 +-
 .../fit/v3/ActionOverloadingTestITCase.java     | 155 ++++-------
 .../apache/olingo/fit/v3/AsyncTestITCase.java   |   8 +-
 .../apache/olingo/fit/v3/BatchTestITCase.java   |  26 +-
 .../apache/olingo/fit/v3/CountTestITCase.java   |   4 +-
 .../olingo/fit/v3/EntityCreateTestITCase.java   |  16 +-
 .../olingo/fit/v3/EntityRetrieveTestITCase.java |  14 +-
 .../olingo/fit/v3/EntitySetTestITCase.java      |   8 +-
 .../olingo/fit/v3/EntityUpdateTestITCase.java   |  26 +-
 .../apache/olingo/fit/v3/ErrorTestITCase.java   |  20 +-
 .../olingo/fit/v3/FilterFactoryTestITCase.java  |   2 +-
 .../apache/olingo/fit/v3/FilterTestITCase.java  |   2 +-
 .../apache/olingo/fit/v3/InvokeTestITCase.java  | 120 ++-------
 .../olingo/fit/v3/KeyAsSegmentTestITCase.java   |   6 +-
 .../apache/olingo/fit/v3/LinkTestITCase.java    |   8 +-
 .../olingo/fit/v3/MediaEntityTestITCase.java    |  12 +-
 .../olingo/fit/v3/OpenTypeTestITCase.java       |   6 +-
 .../olingo/fit/v3/PrimitiveKeysTestITCase.java  |   2 +-
 .../fit/v3/PropertyRetrieveTestITCase.java      |   8 +-
 .../olingo/fit/v3/PropertyTestITCase.java       |  16 +-
 .../olingo/fit/v3/PropertyValueTestITCase.java  |  20 +-
 .../olingo/fit/v3/QueryOptionsTestITCase.java   |  12 +-
 .../olingo/fit/v4/AbstractTestITCase.java       |   4 +-
 .../apache/olingo/fit/v4/AsyncTestITCase.java   |   6 +-
 .../apache/olingo/fit/v4/BatchTestITCase.java   |  30 +--
 .../fit/v4/BoundOperationInvokeTestITCase.java  | 258 +++++++++++++------
 .../apache/olingo/fit/v4/DeltaTestITCase.java   |   2 +-
 .../olingo/fit/v4/DerivedTypeTestITCase.java    |   8 +-
 .../olingo/fit/v4/EntityCreateTestITCase.java   |   6 +-
 .../olingo/fit/v4/EntityRetrieveTestITCase.java |  20 +-
 .../olingo/fit/v4/EntitySetTestITCase.java      |   8 +-
 .../olingo/fit/v4/EntityUpdateTestITCase.java   |   8 +-
 .../olingo/fit/v4/ErrorResponseTestITCase.java  |   2 +-
 .../olingo/fit/v4/FilterFactoryTestITCase.java  |   2 +-
 .../olingo/fit/v4/KeyAsSegmentTestITCase.java   |   4 +-
 .../olingo/fit/v4/MediaEntityTestITCase.java    |   8 +-
 .../olingo/fit/v4/OpenTypeTestITCase.java       |   6 +-
 .../fit/v4/OperationImportInvokeTestITCase.java |  96 ++-----
 .../olingo/fit/v4/PropertyTestITCase.java       |  14 +-
 .../olingo/fit/v4/PropertyValueTestITCase.java  |  20 +-
 .../olingo/fit/v4/QueryOptionsTestITCase.java   |  22 +-
 .../olingo/fit/v4/SingletonTestITCase.java      |   6 +-
 .../client/api/CommonEdmEnabledODataClient.java |   2 +-
 .../olingo/client/api/CommonODataClient.java    |   4 +-
 .../api/communication/header/ODataHeaders.java  |  31 +++
 .../invoke/EdmEnabledInvokeRequestFactory.java  |  65 ++++-
 .../request/invoke/InvokeRequestFactory.java    |  64 ++++-
 .../client/api/v3/EdmEnabledODataClient.java    |   2 +-
 .../olingo/client/api/v3/ODataClient.java       |   2 +-
 .../client/api/v4/EdmEnabledODataClient.java    |   2 +-
 .../olingo/client/api/v4/ODataClient.java       |   2 +-
 .../olingo/client/core/AbstractODataClient.java |   3 +-
 .../communication/header/ODataHeadersImpl.java  |  49 +---
 .../request/AbstractODataRequest.java           |   5 +-
 .../batch/v3/BatchRequestFactoryImpl.java       |   2 +-
 .../batch/v4/BatchRequestFactoryImpl.java       |   2 +-
 .../AbstractEdmEnabledInvokeRequestFactory.java | 172 +++++++++++++
 .../invoke/AbstractInvokeRequestFactory.java    |  55 +++-
 .../v3/EdmEnabledInvokeRequestFactoryImpl.java  |  78 +-----
 .../invoke/v3/InvokeRequestFactoryImpl.java     |  36 +--
 .../v4/EdmEnabledInvokeRequestFactoryImpl.java  |  78 +-----
 .../invoke/v4/InvokeRequestFactoryImpl.java     |  36 +--
 .../AbstractRetrieveRequestFactory.java         |   6 +-
 .../v3/ODataLinkCollectionRequestImpl.java      |   2 +-
 .../retrieve/v3/RetrieveRequestFactoryImpl.java |   2 +-
 .../retrieve/v4/RetrieveRequestFactoryImpl.java |   2 +-
 .../retrieve/v4/XMLMetadataRequestImpl.java     |   2 +-
 .../apache/olingo/client/core/uri/URIUtils.java |  20 --
 .../core/v3/EdmEnabledODataClientImpl.java      |   2 +-
 .../olingo/client/core/v3/ODataClientImpl.java  |   4 +-
 .../core/v4/EdmEnabledODataClientImpl.java      |   2 +-
 .../olingo/client/core/v4/ODataClientImpl.java  |   4 +-
 .../client/core/uri/v3/URIBuilderTest.java      |  26 +-
 .../client/core/uri/v4/URIBuilderTest.java      |  26 +-
 91 files changed, 1399 insertions(+), 913 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractInvocationHandler.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractInvocationHandler.java
index 2ce424a..09b443b 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractInvocationHandler.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractInvocationHandler.java
@@ -35,12 +35,17 @@ import org.apache.commons.lang3.builder.HashCodeBuilder;
 import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 import org.apache.olingo.client.api.CommonEdmEnabledODataClient;
+import org.apache.olingo.client.api.communication.request.invoke.ODataNoContent;
+import org.apache.olingo.client.api.http.HttpMethod;
 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.ODataInvokeResult;
 import org.apache.olingo.commons.api.domain.ODataValue;
+import org.apache.olingo.commons.api.edm.EdmFunction;
 import org.apache.olingo.commons.api.edm.EdmOperation;
+import org.apache.olingo.commons.api.edm.EdmReturnType;
+import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
 import org.apache.olingo.commons.core.edm.EdmTypeInfo;
 import org.apache.olingo.ext.proxy.EntityContainerFactory;
 import org.apache.olingo.ext.proxy.api.OperationType;
@@ -156,6 +161,25 @@ abstract class AbstractInvocationHandler implements InvocationHandler {
             handler);
   }
 
+  @SuppressWarnings("unchecked")
+  private <RES extends ODataInvokeResult> Class<RES> getResultReference(final EdmReturnType returnType) {
+    Class<RES> result;
+
+    if (returnType == null) {
+      result = (Class<RES>) ODataNoContent.class;
+    } else {
+      if (returnType.isCollection() && returnType.getType().getKind() == EdmTypeKind.ENTITY) {
+        result = (Class<RES>) CommonODataEntitySet.class;
+      } else if (!returnType.isCollection() && returnType.getType().getKind() == EdmTypeKind.ENTITY) {
+        result = (Class<RES>) CommonODataEntity.class;
+      } else {
+        result = (Class<RES>) CommonODataProperty.class;
+      }
+    }
+
+    return result;
+  }
+
   protected Object invokeOperation(
           final Operation annotation,
           final Method method,
@@ -193,7 +217,11 @@ abstract class AbstractInvocationHandler implements InvocationHandler {
 
     // 3. invoke
     final ODataInvokeResult result = client.getInvokeRequestFactory().getInvokeRequest(
-            target, edmOperation, parameterValues).execute().getBody();
+            edmOperation instanceof EdmFunction ? HttpMethod.GET : HttpMethod.POST,
+            target,
+            getResultReference(edmOperation.getReturnType()),
+            parameterValues).
+            execute().getBody();
 
     // 4. process invoke result
     if (StringUtils.isBlank(annotation.returnType())) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractStructuredInvocationHandler.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractStructuredInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractStructuredInvocationHandler.java
index 6f44c64..45befde 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractStructuredInvocationHandler.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/AbstractStructuredInvocationHandler.java
@@ -222,7 +222,7 @@ public abstract class AbstractStructuredInvocationHandler extends AbstractInvoca
               null,
               ((ODataInlineEntity) link).getEntity(),
               property.targetContainer(),
-              client.getURIBuilder(serviceRoot).appendEntitySetSegment(property.targetEntitySet()).build(),
+              client.newURIBuilder(serviceRoot).appendEntitySetSegment(property.targetEntitySet()).build(),
               type,
               false);
     } else if (link instanceof ODataInlineEntitySet) {
@@ -259,7 +259,7 @@ public abstract class AbstractStructuredInvocationHandler extends AbstractInvoca
                 uri,
                 res.getBody(),
                 property.targetContainer(),
-                client.getURIBuilder(serviceRoot).appendEntitySetSegment(property.targetEntitySet()).build(),
+                client.newURIBuilder(serviceRoot).appendEntitySetSegment(property.targetEntitySet()).build(),
                 type,
                 res.getETag(),
                 true);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetInvocationHandler.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetInvocationHandler.java
index 4f4e45a..7aa8c22 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetInvocationHandler.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/EntitySetInvocationHandler.java
@@ -90,8 +90,7 @@ class EntitySetInvocationHandler<
   static EntitySetInvocationHandler getInstance(
           final Class<?> ref, final EntityContainerInvocationHandler containerHandler, final String entitySetName) {
 
-    final CommonURIBuilder<?> uriBuilder = containerHandler.getClient().
-            getURIBuilder(containerHandler.getFactory().getServiceRoot());
+    final CommonURIBuilder<?> uriBuilder = containerHandler.getClient().newURIBuilder();
 
     final StringBuilder entitySetSegment = new StringBuilder();
     if (!containerHandler.isDefaultEntityContainer()) {
@@ -184,7 +183,7 @@ class EntitySetInvocationHandler<
   @Override
   public Long count() {
     final ODataValueRequest req = client.getRetrieveRequestFactory().
-            getValueRequest(client.getURIBuilder(this.uri.toASCIIString()).count().build());
+            getValueRequest(client.newURIBuilder(this.uri.toASCIIString()).count().build());
     req.setFormat(ODataValueFormat.TEXT);
     return Long.valueOf(req.execute().getBody().asPrimitive().toString());
   }
@@ -247,7 +246,7 @@ class EntitySetInvocationHandler<
       // not yet attached: search against the service
       try {
         LOG.debug("Search for '{}({})' into the service", typeRef.getSimpleName(), key);
-        final CommonURIBuilder<?> uriBuilder = client.getURIBuilder(this.uri.toASCIIString());
+        final CommonURIBuilder<?> uriBuilder = client.newURIBuilder(this.uri.toASCIIString());
 
         if (key.getClass().getAnnotation(CompoundKey.class) == null) {
           LOG.debug("Append key segment '{}'", key);
@@ -376,7 +375,7 @@ class EntitySetInvocationHandler<
     final Class<S> ref = (Class<S>) ClassUtils.extractTypeArg(collTypeRef);
     final Class<S> oref = (Class<S>) ClassUtils.extractTypeArg(this.collTypeRef);
 
-    final CommonURIBuilder<?> uriBuilder = client.getURIBuilder(this.uri.toASCIIString());
+    final CommonURIBuilder<?> uriBuilder = client.newURIBuilder(this.uri.toASCIIString());
 
     final URI entitySetURI;
     if (oref.equals(ref)) {
@@ -463,6 +462,6 @@ class EntitySetInvocationHandler<
 
   @Override
   public EntitySetIterator<T, KEY, EC> iterator() {
-    return new EntitySetIterator<T, KEY, EC>(client.getURIBuilder(this.uri.toASCIIString()).build(), this);
+    return new EntitySetIterator<T, KEY, EC>(client.newURIBuilder(this.uri.toASCIIString()).build(), this);
   }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/FilterImpl.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/FilterImpl.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/FilterImpl.java
index 4299dde..42ce646 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/FilterImpl.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/FilterImpl.java
@@ -150,7 +150,7 @@ public class FilterImpl<T extends Serializable, EC extends AbstractEntityCollect
 
   @Override
   public EC getResult() {
-    final CommonURIBuilder<?> uriBuilder = client.getURIBuilder(this.baseURI.toASCIIString()).
+    final CommonURIBuilder<?> uriBuilder = client.newURIBuilder(this.baseURI.toASCIIString()).
             appendDerivedEntityTypeSegment(new FullQualifiedName(
                             ClassUtils.getNamespace(typeRef), ClassUtils.getEntityTypeName(typeRef)).toString());
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/OperationInvocationHandler.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/OperationInvocationHandler.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/OperationInvocationHandler.java
index 69e1f9b..d2f5bfc 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/OperationInvocationHandler.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/OperationInvocationHandler.java
@@ -28,7 +28,6 @@ import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import org.apache.olingo.client.api.uri.CommonURIBuilder;
-import org.apache.olingo.client.core.uri.URIUtils;
 import org.apache.olingo.commons.api.domain.CommonODataEntity;
 import org.apache.olingo.commons.api.domain.ODataOperation;
 import org.apache.olingo.commons.api.edm.EdmEntityContainer;
@@ -154,8 +153,8 @@ class OperationInvocationHandler extends AbstractInvocationHandler implements Op
       edmOperation = container.getActionImport(operation.name()).getUnboundAction();
     }
 
-    final CommonURIBuilder<?> uriBuilder = getClient().getURIBuilder(this.serviceRoot).
-            appendOperationCallSegment(URIUtils.operationImportURISegment(container, edmOperation.getName()));
+    final CommonURIBuilder<?> uriBuilder = getClient().newURIBuilder(this.serviceRoot).
+            appendOperationCallSegment(edmOperation.getName());
 
     return new AbstractMap.SimpleEntry<URI, EdmOperation>(uriBuilder.build(), edmOperation);
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/SearchImpl.java
----------------------------------------------------------------------
diff --git a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/SearchImpl.java b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/SearchImpl.java
index 73a0585..fb65c6e 100644
--- a/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/SearchImpl.java
+++ b/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/SearchImpl.java
@@ -75,7 +75,7 @@ public class SearchImpl<T extends Serializable, EC extends AbstractEntityCollect
 
   @Override
   public EC getResult() {
-    final URIBuilder uriBuilder = client.getURIBuilder(this.baseURI.toASCIIString()).
+    final URIBuilder uriBuilder = client.newURIBuilder(this.baseURI.toASCIIString()).
             appendDerivedEntityTypeSegment(new FullQualifiedName(
                     ClassUtils.getNamespace(typeRef), ClassUtils.getEntityTypeName(typeRef)).toString());
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/main/java/org/apache/olingo/fit/V4Services.java
----------------------------------------------------------------------
diff --git a/fit/src/main/java/org/apache/olingo/fit/V4Services.java b/fit/src/main/java/org/apache/olingo/fit/V4Services.java
index 52108a8..db88da0 100644
--- a/fit/src/main/java/org/apache/olingo/fit/V4Services.java
+++ b/fit/src/main/java/org/apache/olingo/fit/V4Services.java
@@ -457,7 +457,7 @@ public class V4Services extends AbstractServices {
   }
 
   @GET
-  @Path("/Company/Microsoft.Test.OData.Services.ODataWCFService.GetEmployeesCount")
+  @Path("/Company/Microsoft.Test.OData.Services.ODataWCFService.GetEmployeesCount{paren:[\\(\\)]*}")
   public Response functionGetEmployeesCount(
           @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept,
           @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) String format) {
@@ -488,7 +488,7 @@ public class V4Services extends AbstractServices {
   }
 
   @POST
-  @Path("/Company/Microsoft.Test.OData.Services.ODataWCFService.IncreaseRevenue")
+  @Path("/Company/Microsoft.Test.OData.Services.ODataWCFService.IncreaseRevenue{paren:[\\(\\)]*}")
   public Response actionIncreaseRevenue(
           @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept,
           @HeaderParam("Content-Type") @DefaultValue(StringUtils.EMPTY) String contentType,
@@ -562,7 +562,7 @@ public class V4Services extends AbstractServices {
   }
 
   @POST
-  @Path("/Products({entityId})/Microsoft.Test.OData.Services.ODataWCFService.AddAccessRight")
+  @Path("/Products({entityId})/Microsoft.Test.OData.Services.ODataWCFService.AddAccessRight{paren:[\\(\\)]*}")
   public Response actionAddAccessRight(
           @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept,
           @HeaderParam("Content-Type") @DefaultValue(StringUtils.EMPTY) String contentType,
@@ -583,11 +583,16 @@ public class V4Services extends AbstractServices {
       assert 1 == entry.getProperties().size();
       assert entry.getProperty("accessRight") != null;
 
-      entry.getProperty("accessRight").setType("Microsoft.Test.OData.Services.ODataWCFService.AccessLevel");
+      final Property property = entry.getProperty("accessRight");
+      property.setType("Microsoft.Test.OData.Services.ODataWCFService.AccessLevel");
+
+      final ResWrap<AtomPropertyImpl> result = new ResWrap<AtomPropertyImpl>(
+              URI.create(Constants.get(version, ConstantKey.ODATA_METADATA_PREFIX) + property.getType()),
+              null, (AtomPropertyImpl) property);
 
       return xml.createResponse(
               null,
-              xml.writeProperty(acceptType, entry.getProperty("accessRight")),
+              xml.writeProperty(acceptType, result),
               null,
               acceptType);
     } catch (Exception e) {
@@ -596,7 +601,7 @@ public class V4Services extends AbstractServices {
   }
 
   @POST
-  @Path("/Customers(PersonID={personId})/Microsoft.Test.OData.Services.ODataWCFService.ResetAddress")
+  @Path("/Customers(PersonID={personId})/Microsoft.Test.OData.Services.ODataWCFService.ResetAddress{paren:[\\(\\)]*}")
   public Response actionResetAddress(
           @Context UriInfo uriInfo,
           @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept,
@@ -622,7 +627,7 @@ public class V4Services extends AbstractServices {
 
   @GET
   @Path("/ProductDetails(ProductID={productId},ProductDetailID={productDetailId})"
-          + "/Microsoft.Test.OData.Services.ODataWCFService.GetRelatedProduct")
+          + "/Microsoft.Test.OData.Services.ODataWCFService.GetRelatedProduct{paren:[\\(\\)]*}")
   public Response functionGetRelatedProduct(
           @Context UriInfo uriInfo,
           @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept,
@@ -634,11 +639,12 @@ public class V4Services extends AbstractServices {
   }
 
   @POST
-  @Path("/Accounts(101)/Microsoft.Test.OData.Services.ODataWCFService.RefreshDefaultPI")
+  @Path("/Accounts({entityId})/Microsoft.Test.OData.Services.ODataWCFService.RefreshDefaultPI{paren:[\\(\\)]*}")
   public Response actionRefreshDefaultPI(
           @Context UriInfo uriInfo,
           @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept,
           @HeaderParam("Content-Type") @DefaultValue(StringUtils.EMPTY) String contentType,
+          @PathParam("entityId") String entityId,
           @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) String format,
           final String param) {
 
@@ -649,23 +655,24 @@ public class V4Services extends AbstractServices {
       assert 1 == entry.getProperties().size();
       assert entry.getProperty("newDate") != null;
 
-      return functionGetDefaultPI(accept, format);
+      return functionGetDefaultPI(accept, entityId, format);
     } catch (Exception e) {
       return xml.createFaultResponse(accept, e);
     }
   }
 
   @GET
-  @Path("/Accounts(101)/Microsoft.Test.OData.Services.ODataWCFService.GetDefaultPI")
+  @Path("/Accounts({entityId})/Microsoft.Test.OData.Services.ODataWCFService.GetDefaultPI{paren:[\\(\\)]*}")
   public Response functionGetDefaultPI(
           @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept,
+          @PathParam("entityId") String entityId,
           @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) String format) {
 
-    return getContainedEntity(accept, "101", "MyPaymentInstruments", "101901", format);
+    return getContainedEntity(accept, entityId, "MyPaymentInstruments", entityId+ "901", format);
   }
 
   @GET
-  @Path("/Accounts({entityId})/Microsoft.Test.OData.Services.ODataWCFService.GetAccountInfo")
+  @Path("/Accounts({entityId})/Microsoft.Test.OData.Services.ODataWCFService.GetAccountInfo{paren:[\\(\\)]*}")
   public Response functionGetAccountInfo(
           @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) String accept,
           @PathParam("entityId") String entityId,

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/main/resources/V40/Accounts/102/entity.full.json
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/Accounts/102/entity.full.json b/fit/src/main/resources/V40/Accounts/102/entity.full.json
new file mode 100644
index 0000000..1682135
--- /dev/null
+++ b/fit/src/main/resources/V40/Accounts/102/entity.full.json
@@ -0,0 +1,34 @@
+{
+  "@odata.context": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/$metadata#Accounts/$entity",
+  "@odata.type": "#Microsoft.Test.OData.Services.ODataWCFService.Account",
+  "@odata.id": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)",
+  "@odata.editLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)",
+  "AccountID": 102,
+  "Country": "US",
+  "AccountInfo": {
+    "@odata.type": "#Microsoft.Test.OData.Services.ODataWCFService.AccountInfo",
+    "FirstName": "Alex",
+    "LastName": "Green",
+    "MiddleName": "Hood"
+  },
+  "MyGiftCard@odata.associationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyGiftCard/$ref",
+  "MyGiftCard@odata.navigationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyGiftCard",
+  "MyPaymentInstruments@odata.associationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments/$ref",
+  "MyPaymentInstruments@odata.navigationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments",
+  "ActiveSubscriptions@odata.associationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/ActiveSubscriptions/$ref",
+  "ActiveSubscriptions@odata.navigationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/ActiveSubscriptions",
+  "AvailableSubscriptionTemplatess@odata.associationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/AvailableSubscriptionTemplatess/$ref",
+  "AvailableSubscriptionTemplatess@odata.navigationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/AvailableSubscriptionTemplatess",
+  "#Microsoft.Test.OData.Services.ODataWCFService.RefreshDefaultPI": {
+    "title": "Microsoft.Test.OData.Services.ODataWCFService.RefreshDefaultPI",
+    "target": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/Microsoft.Test.OData.Services.ODataWCFService.RefreshDefaultPI"
+  },
+  "#Microsoft.Test.OData.Services.ODataWCFService.GetDefaultPI": {
+    "title": "Microsoft.Test.OData.Services.ODataWCFService.GetDefaultPI",
+    "target": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/Microsoft.Test.OData.Services.ODataWCFService.GetDefaultPI"
+  },
+  "#Microsoft.Test.OData.Services.ODataWCFService.GetAccountInfo": {
+    "title": "Microsoft.Test.OData.Services.ODataWCFService.GetAccountInfo",
+    "target": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/Microsoft.Test.OData.Services.ODataWCFService.GetAccountInfo"
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/main/resources/V40/Accounts/102/entity.xml
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/Accounts/102/entity.xml b/fit/src/main/resources/V40/Accounts/102/entity.xml
new file mode 100644
index 0000000..0b9cc63
--- /dev/null
+++ b/fit/src/main/resources/V40/Accounts/102/entity.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+<entry xml:base="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/" xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://docs.oasis-open.org/odata/ns/data" xmlns:m="http://docs.oasis-open.org/odata/ns/metadata" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml" m:context="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/$metadata#Accounts/$entity">
+  <id>http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)</id>
+  <category term="#Microsoft.Test.OData.Services.ODataWCFService.Account" scheme="http://docs.oasis-open.org/odata/ns/scheme"/>
+  <link rel="edit" href="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)"/>
+  <link rel="http://docs.oasis-open.org/odata/ns/related/MyGiftCard" type="application/atom+xml;type=entry" title="MyGiftCard" href="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyGiftCard"/>
+  <link rel="http://docs.oasis-open.org/odata/ns/related/MyPaymentInstruments" type="application/atom+xml;type=feed" title="MyPaymentInstruments" href="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments"/>
+  <link rel="http://docs.oasis-open.org/odata/ns/related/ActiveSubscriptions" type="application/atom+xml;type=feed" title="ActiveSubscriptions" href="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/ActiveSubscriptions"/>
+  <link rel="http://docs.oasis-open.org/odata/ns/related/AvailableSubscriptionTemplatess" type="application/atom+xml;type=feed" title="AvailableSubscriptionTemplatess" href="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/AvailableSubscriptionTemplatess"/>
+  <title/>
+  <updated>2014-04-14T12:45:00Z</updated>
+  <author>
+    <name/>
+  </author>
+  <m:action metadata="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/$metadata#Microsoft.Test.OData.Services.ODataWCFService.RefreshDefaultPI" 
+            title="Microsoft.Test.OData.Services.ODataWCFService.RefreshDefaultPI" 
+            target="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/Microsoft.Test.OData.Services.ODataWCFService.RefreshDefaultPI"/>
+  <m:action metadata="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/$metadata#Microsoft.Test.OData.Services.ODataWCFService.GetDefaultPI" 
+            title="Microsoft.Test.OData.Services.ODataWCFService.GetDefaultPI" 
+            target="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/Microsoft.Test.OData.Services.ODataWCFService.GetDefaultPI"/>
+  <m:action metadata="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/$metadata#Microsoft.Test.OData.Services.ODataWCFService.GetAccountInfo" 
+            title="Microsoft.Test.OData.Services.ODataWCFService.GetAccountInfo" 
+            target="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/Microsoft.Test.OData.Services.ODataWCFService.GetAccountInfo"/>
+  <content type="application/xml">
+    <m:properties>
+      <d:AccountID m:type="Int32">102</d:AccountID>
+      <d:Country>US</d:Country>
+      <d:AccountInfo m:type="#Microsoft.Test.OData.Services.ODataWCFService.AccountInfo">
+        <d:FirstName>Alex</d:FirstName>
+        <d:LastName>Green</d:LastName>
+        <d:MiddleName>Hood</d:MiddleName>
+      </d:AccountInfo>
+    </m:properties>
+  </content>
+</entry>

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/main/resources/V40/Accounts/102/links/MyGiftCard.full.json
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/Accounts/102/links/MyGiftCard.full.json b/fit/src/main/resources/V40/Accounts/102/links/MyGiftCard.full.json
new file mode 100644
index 0000000..cf9d18a
--- /dev/null
+++ b/fit/src/main/resources/V40/Accounts/102/links/MyGiftCard.full.json
@@ -0,0 +1,15 @@
+{
+  "@odata.context": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/$metadata#Accounts(102)/MyGiftCard/$entity",
+  "@odata.type": "#Microsoft.Test.OData.Services.ODataWCFService.GiftCard",
+  "@odata.id": "Accounts(102)/MyGiftCard",
+  "@odata.editLink": "Accounts(102)/MyGiftCard",
+  "GiftCardID": 301,
+  "GiftCardNO": "AAA123A",
+  "Amount": 19.9,
+  "ExperationDate@odata.type": "#DateTimeOffset",
+  "ExperationDate": "2013-12-30T00:00:00Z",
+  "#Microsoft.Test.OData.Services.ODataWCFService.GetActualAmount": {
+    "title": "Microsoft.Test.OData.Services.ODataWCFService.GetActualAmount",
+    "target": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyGiftCard/Microsoft.Test.OData.Services.ODataWCFService.GetActualAmount"
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/main/resources/V40/Accounts/102/links/MyGiftCard.xml
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/Accounts/102/links/MyGiftCard.xml b/fit/src/main/resources/V40/Accounts/102/links/MyGiftCard.xml
new file mode 100644
index 0000000..b1927b3
--- /dev/null
+++ b/fit/src/main/resources/V40/Accounts/102/links/MyGiftCard.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+<entry xml:base="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/" xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://docs.oasis-open.org/odata/ns/data" xmlns:m="http://docs.oasis-open.org/odata/ns/metadata" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml" m:context="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/$metadata#Accounts(102)/MyGiftCard/$entity">
+  <category term="#Microsoft.Test.OData.Services.ODataWCFService.GiftCard" scheme="http://docs.oasis-open.org/odata/ns/scheme" />
+  <id />
+  <title />
+  <updated>2014-04-23T13:48:48Z</updated>
+  <author>
+    <name />
+  </author>
+  <m:action metadata="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/$metadata#Microsoft.Test.OData.Services.ODataWCFService.GetActualAmount" 
+            title="Microsoft.Test.OData.Services.ODataWCFService.GetActualAmount" 
+            target="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyGiftCard/Microsoft.Test.OData.Services.ODataWCFService.GetActualAmount"/>
+  <content type="application/xml">
+    <m:properties>
+      <d:GiftCardID m:type="Int32">301</d:GiftCardID>
+      <d:GiftCardNO>AAA123A</d:GiftCardNO>
+      <d:Amount m:type="Double">19.9</d:Amount>
+      <d:ExperationDate m:type="DateTimeOffset">2013-12-30T00:00:00Z</d:ExperationDate>
+    </m:properties>
+  </content>
+</entry>

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/main/resources/V40/Accounts/102/links/MyPaymentInstruments(102901).full.json
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/Accounts/102/links/MyPaymentInstruments(102901).full.json b/fit/src/main/resources/V40/Accounts/102/links/MyPaymentInstruments(102901).full.json
new file mode 100644
index 0000000..70c96de
--- /dev/null
+++ b/fit/src/main/resources/V40/Accounts/102/links/MyPaymentInstruments(102901).full.json
@@ -0,0 +1,16 @@
+{
+  "@odata.context": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/$metadata#Accounts(102)/MyPaymentInstruments/$entity",
+  "@odata.type": "#Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument",
+  "@odata.id": "Accounts(102)/MyPaymentInstruments(102901)",
+  "@odata.editLink": "Accounts(102)/MyPaymentInstruments(102901)",
+  "PaymentInstrumentID": 102901,
+  "FriendlyName": "102 first PI",
+  "CreatedDate@odata.type": "#DateTimeOffset",
+  "CreatedDate": "2014-04-09T00:00:00Z",
+  "TheStoredPI@odata.associationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102901)/TheStoredPI/$ref",
+  "TheStoredPI@odata.navigationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102901)/TheStoredPI",
+  "BillingStatements@odata.associationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102901)/BillingStatements/$ref",
+  "BillingStatements@odata.navigationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102901)/BillingStatements",
+  "BackupStoredPI@odata.associationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102901)/BackupStoredPI/$ref",
+  "BackupStoredPI@odata.navigationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102901)/BackupStoredPI"
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/main/resources/V40/Accounts/102/links/MyPaymentInstruments(102901).xml
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/Accounts/102/links/MyPaymentInstruments(102901).xml b/fit/src/main/resources/V40/Accounts/102/links/MyPaymentInstruments(102901).xml
new file mode 100644
index 0000000..e519217
--- /dev/null
+++ b/fit/src/main/resources/V40/Accounts/102/links/MyPaymentInstruments(102901).xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+<entry xml:base="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/" xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://docs.oasis-open.org/odata/ns/data" xmlns:m="http://docs.oasis-open.org/odata/ns/metadata" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml" m:context="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/$metadata#Accounts(102)/MyPaymentInstruments/$entity">
+  <category term="#Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument" scheme="http://docs.oasis-open.org/odata/ns/scheme"/>
+  <link rel="http://docs.oasis-open.org/odata/ns/related/TheStoredPI" type="application/atom+xml;type=entry" title="TheStoredPI" href="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102901)/TheStoredPI"/>
+  <link rel="http://docs.oasis-open.org/odata/ns/related/BillingStatements" type="application/atom+xml;type=feed" title="BillingStatements" href="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102901)/BillingStatements"/>
+  <link rel="http://docs.oasis-open.org/odata/ns/related/BackupStoredPI" type="application/atom+xml;type=entry" title="BackupStoredPI" href="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102901)/BackupStoredPI"/>
+  <id/>
+  <title/>
+  <updated>2014-04-14T12:47:37Z</updated>
+  <author>
+    <name/>
+  </author>
+  <content type="application/xml">
+    <m:properties>
+      <d:PaymentInstrumentID m:type="Int32">102901</d:PaymentInstrumentID>
+      <d:FriendlyName>102 first PI</d:FriendlyName>
+      <d:CreatedDate m:type="DateTimeOffset">2014-04-09T00:00:00Z</d:CreatedDate>
+    </m:properties>
+  </content>
+</entry>

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/main/resources/V40/Accounts/102/links/MyPaymentInstruments(102902).full.json
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/Accounts/102/links/MyPaymentInstruments(102902).full.json b/fit/src/main/resources/V40/Accounts/102/links/MyPaymentInstruments(102902).full.json
new file mode 100644
index 0000000..d6082db
--- /dev/null
+++ b/fit/src/main/resources/V40/Accounts/102/links/MyPaymentInstruments(102902).full.json
@@ -0,0 +1,16 @@
+{
+  "@odata.context": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/$metadata#Accounts(102)/MyPaymentInstruments/$entity",
+  "@odata.type": "#Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument",
+  "@odata.id": "Accounts(102)/MyPaymentInstruments(102902)",
+  "@odata.editLink": "Accounts(102)/MyPaymentInstruments(102902)",
+  "PaymentInstrumentID": 102902,
+  "FriendlyName": "102 first PI",
+  "CreatedDate@odata.type": "#DateTimeOffset",
+  "CreatedDate": "2014-04-09T00:00:00Z",
+  "TheStoredPI@odata.associationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102902)/TheStoredPI/$ref",
+  "TheStoredPI@odata.navigationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102902)/TheStoredPI",
+  "BillingStatements@odata.associationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102902)/BillingStatements/$ref",
+  "BillingStatements@odata.navigationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102902)/BillingStatements",
+  "BackupStoredPI@odata.associationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102902)/BackupStoredPI/$ref",
+  "BackupStoredPI@odata.navigationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102902)/BackupStoredPI"
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/main/resources/V40/Accounts/102/links/MyPaymentInstruments(102902).xml
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/Accounts/102/links/MyPaymentInstruments(102902).xml b/fit/src/main/resources/V40/Accounts/102/links/MyPaymentInstruments(102902).xml
new file mode 100644
index 0000000..7a056c4
--- /dev/null
+++ b/fit/src/main/resources/V40/Accounts/102/links/MyPaymentInstruments(102902).xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+<entry xml:base="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/" xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://docs.oasis-open.org/odata/ns/data" xmlns:m="http://docs.oasis-open.org/odata/ns/metadata" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml" m:context="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/$metadata#Accounts(102)/MyPaymentInstruments/$entity">
+  <category term="#Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument" scheme="http://docs.oasis-open.org/odata/ns/scheme"/>
+  <link rel="http://docs.oasis-open.org/odata/ns/related/TheStoredPI" type="application/atom+xml;type=entry" title="TheStoredPI" href="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102902)/TheStoredPI"/>
+  <link rel="http://docs.oasis-open.org/odata/ns/related/BillingStatements" type="application/atom+xml;type=feed" title="BillingStatements" href="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102902)/BillingStatements"/>
+  <link rel="http://docs.oasis-open.org/odata/ns/related/BackupStoredPI" type="application/atom+xml;type=entry" title="BackupStoredPI" href="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102902)/BackupStoredPI"/>
+  <id/>
+  <title/>
+  <updated>2014-04-14T12:47:37Z</updated>
+  <author>
+    <name/>
+  </author>
+  <content type="application/xml">
+    <m:properties>
+      <d:PaymentInstrumentID m:type="Int32">102902</d:PaymentInstrumentID>
+      <d:FriendlyName>102 first PI</d:FriendlyName>
+      <d:CreatedDate m:type="DateTimeOffset">2014-04-09T00:00:00Z</d:CreatedDate>
+    </m:properties>
+  </content>
+</entry>

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/main/resources/V40/Accounts/102/links/MyPaymentInstruments.full.json
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/Accounts/102/links/MyPaymentInstruments.full.json b/fit/src/main/resources/V40/Accounts/102/links/MyPaymentInstruments.full.json
new file mode 100644
index 0000000..d056b5e
--- /dev/null
+++ b/fit/src/main/resources/V40/Accounts/102/links/MyPaymentInstruments.full.json
@@ -0,0 +1,62 @@
+{
+  "@odata.context": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/$metadata#Accounts(102)/MyPaymentInstruments",
+  "value": [{
+      "@odata.type": "#Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument",
+      "@odata.id": "Accounts(102)/MyPaymentInstruments(102901)",
+      "@odata.editLink": "Accounts(102)/MyPaymentInstruments(102901)",
+      "PaymentInstrumentID": 102901,
+      "FriendlyName": "102 first PI",
+      "CreatedDate@odata.type": "#DateTimeOffset",
+      "CreatedDate": "2014-04-09T00:00:00Z",
+      "TheStoredPI@odata.associationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102901)/TheStoredPI/$ref",
+      "TheStoredPI@odata.navigationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102901)/TheStoredPI",
+      "BillingStatements@odata.associationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102901)/BillingStatements/$ref",
+      "BillingStatements@odata.navigationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102901)/BillingStatements",
+      "BackupStoredPI@odata.associationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102901)/BackupStoredPI/$ref",
+      "BackupStoredPI@odata.navigationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102901)/BackupStoredPI"
+    }, {
+      "@odata.type": "#Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI",
+      "@odata.id": "Accounts(102)/MyPaymentInstruments(102902)",
+      "@odata.editLink": "Accounts(102)/MyPaymentInstruments(102902)/Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI",
+      "PaymentInstrumentID": 102902,
+      "FriendlyName": "102 frist credit PI",
+      "CreatedDate@odata.type": "#DateTimeOffset",
+      "CreatedDate": "2012-11-01T00:00:00Z",
+      "CardNumber": "6000000000000000",
+      "CVV": "234",
+      "HolderName": "Alex",
+      "Balance": 100.0,
+      "ExperationDate@odata.type": "#DateTimeOffset",
+      "ExperationDate": "2022-11-01T00:00:00Z",
+      "TheStoredPI@odata.associationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102902)/Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI/TheStoredPI/$ref",
+      "TheStoredPI@odata.navigationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102902)/Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI/TheStoredPI",
+      "BillingStatements@odata.associationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102902)/Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI/BillingStatements/$ref",
+      "BillingStatements@odata.navigationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102902)/Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI/BillingStatements",
+      "BackupStoredPI@odata.associationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102902)/Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI/BackupStoredPI/$ref",
+      "BackupStoredPI@odata.navigationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102902)/Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI/BackupStoredPI",
+      "CreditRecords@odata.associationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102902)/Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI/CreditRecords/$ref",
+      "CreditRecords@odata.navigationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102902)/Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI/CreditRecords"
+    }, {
+      "@odata.type": "#Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI",
+      "@odata.id": "Accounts(102)/MyPaymentInstruments(102903)",
+      "@odata.editLink": "Accounts(102)/MyPaymentInstruments(102903)/Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI",
+      "PaymentInstrumentID": 102903,
+      "FriendlyName": "102 second credit PI",
+      "CreatedDate@odata.type": "#DateTimeOffset",
+      "CreatedDate": "2012-11-01T00:00:00Z",
+      "CardNumber": "8000000000000000",
+      "CVV": "012",
+      "HolderName": "James",
+      "Balance": 300.0,
+      "ExperationDate@odata.type": "#DateTimeOffset",
+      "ExperationDate": "2022-10-02T00:00:00Z",
+      "TheStoredPI@odata.associationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102903)/Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI/TheStoredPI/$ref",
+      "TheStoredPI@odata.navigationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102903)/Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI/TheStoredPI",
+      "BillingStatements@odata.associationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102903)/Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI/BillingStatements/$ref",
+      "BillingStatements@odata.navigationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102903)/Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI/BillingStatements",
+      "BackupStoredPI@odata.associationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102903)/Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI/BackupStoredPI/$ref",
+      "BackupStoredPI@odata.navigationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102903)/Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI/BackupStoredPI",
+      "CreditRecords@odata.associationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102903)/Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI/CreditRecords/$ref",
+      "CreditRecords@odata.navigationLink": "http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102903)/Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI/CreditRecords"
+    }]
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/main/resources/V40/Accounts/102/links/MyPaymentInstruments.xml
----------------------------------------------------------------------
diff --git a/fit/src/main/resources/V40/Accounts/102/links/MyPaymentInstruments.xml b/fit/src/main/resources/V40/Accounts/102/links/MyPaymentInstruments.xml
new file mode 100644
index 0000000..5defbc3
--- /dev/null
+++ b/fit/src/main/resources/V40/Accounts/102/links/MyPaymentInstruments.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+
+-->
+<feed xml:base="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/" xmlns="http://www.w3.org/2005/Atom" xmlns:d="http://docs.oasis-open.org/odata/ns/data" xmlns:m="http://docs.oasis-open.org/odata/ns/metadata" xmlns:georss="http://www.georss.org/georss" xmlns:gml="http://www.opengis.net/gml" m:context="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/$metadata#Accounts(102)/MyPaymentInstruments">
+  <id>http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/MyPaymentInstruments</id>
+  <title/>
+  <updated>2014-04-14T12:45:33Z</updated>
+  <entry>
+    <category term="#Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument" scheme="http://docs.oasis-open.org/odata/ns/scheme"/>
+    <link rel="http://docs.oasis-open.org/odata/ns/related/TheStoredPI" type="application/atom+xml;type=entry" title="TheStoredPI" href="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102901)/TheStoredPI"/>
+    <link rel="http://docs.oasis-open.org/odata/ns/related/BillingStatements" type="application/atom+xml;type=feed" title="BillingStatements" href="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102901)/BillingStatements"/>
+    <link rel="http://docs.oasis-open.org/odata/ns/related/BackupStoredPI" type="application/atom+xml;type=entry" title="BackupStoredPI" href="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102901)/BackupStoredPI"/>
+    <id/>
+    <title/>
+    <updated>2014-04-14T12:45:33Z</updated>
+    <author>
+      <name/>
+    </author>
+    <content type="application/xml">
+      <m:properties>
+        <d:PaymentInstrumentID m:type="Int32">102901</d:PaymentInstrumentID>
+        <d:FriendlyName>102 first PI</d:FriendlyName>
+        <d:CreatedDate m:type="DateTimeOffset">2014-04-09T00:00:00Z</d:CreatedDate>
+      </m:properties>
+    </content>
+  </entry>
+  <entry>
+    <category term="#Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI" scheme="http://docs.oasis-open.org/odata/ns/scheme"/>
+    <link rel="http://docs.oasis-open.org/odata/ns/related/TheStoredPI" type="application/atom+xml;type=entry" title="TheStoredPI" href="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102902)/Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI/TheStoredPI"/>
+    <link rel="http://docs.oasis-open.org/odata/ns/related/BillingStatements" type="application/atom+xml;type=feed" title="BillingStatements" href="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102902)/Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI/BillingStatements"/>
+    <link rel="http://docs.oasis-open.org/odata/ns/related/BackupStoredPI" type="application/atom+xml;type=entry" title="BackupStoredPI" href="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102902)/Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI/BackupStoredPI"/>
+    <link rel="http://docs.oasis-open.org/odata/ns/related/CreditRecords" type="application/atom+xml;type=feed" title="CreditRecords" href="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102902)/Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI/CreditRecords"/>
+    <id/>
+    <title/>
+    <updated>2014-04-14T12:45:33Z</updated>
+    <author>
+      <name/>
+    </author>
+    <content type="application/xml">
+      <m:properties>
+        <d:PaymentInstrumentID m:type="Int32">102902</d:PaymentInstrumentID>
+        <d:FriendlyName>102 frist credit PI</d:FriendlyName>
+        <d:CreatedDate m:type="DateTimeOffset">2012-11-01T00:00:00Z</d:CreatedDate>
+        <d:CardNumber>6000000000000000</d:CardNumber>
+        <d:CVV>234</d:CVV>
+        <d:HolderName>Alex</d:HolderName>
+        <d:Balance m:type="Double">100</d:Balance>
+        <d:ExperationDate m:type="DateTimeOffset">2022-11-01T00:00:00Z</d:ExperationDate>
+      </m:properties>
+    </content>
+  </entry>
+  <entry>
+    <category term="#Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI" scheme="http://docs.oasis-open.org/odata/ns/scheme"/>
+    <link rel="http://docs.oasis-open.org/odata/ns/related/TheStoredPI" type="application/atom+xml;type=entry" title="TheStoredPI" href="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102903)/Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI/TheStoredPI"/>
+    <link rel="http://docs.oasis-open.org/odata/ns/related/BillingStatements" type="application/atom+xml;type=feed" title="BillingStatements" href="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102903)/Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI/BillingStatements"/>
+    <link rel="http://docs.oasis-open.org/odata/ns/related/BackupStoredPI" type="application/atom+xml;type=entry" title="BackupStoredPI" href="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102903)/Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI/BackupStoredPI"/>
+    <link rel="http://docs.oasis-open.org/odata/ns/related/CreditRecords" type="application/atom+xml;type=feed" title="CreditRecords" href="http://localhost:${cargo.servlet.port}/stub/StaticService/V40/Static.svc/Accounts(102)/MyPaymentInstruments(102903)/Microsoft.Test.OData.Services.ODataWCFService.CreditCardPI/CreditRecords"/>
+    <id/>
+    <title/>
+    <updated>2014-04-14T12:45:33Z</updated>
+    <author>
+      <name/>
+    </author>
+    <content type="application/xml">
+      <m:properties>
+        <d:PaymentInstrumentID m:type="Int32">102903</d:PaymentInstrumentID>
+        <d:FriendlyName>102 second credit PI</d:FriendlyName>
+        <d:CreatedDate m:type="DateTimeOffset">2012-11-01T00:00:00Z</d:CreatedDate>
+        <d:CardNumber>8000000000000000</d:CardNumber>
+        <d:CVV>012</d:CVV>
+        <d:HolderName>James</d:HolderName>
+        <d:Balance m:type="Double">300</d:Balance>
+        <d:ExperationDate m:type="DateTimeOffset">2022-10-02T00:00:00Z</d:ExperationDate>
+      </m:properties>
+    </content>
+  </entry>
+</feed>

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v3/AbstractTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v3/AbstractTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v3/AbstractTestITCase.java
index fc2bbae..d9bf300 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v3/AbstractTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v3/AbstractTestITCase.java
@@ -329,7 +329,7 @@ public abstract class AbstractTestITCase extends AbstractBaseTestITCase {
           final ODataEntity original,
           final String entitySetName) {
 
-    final URIBuilder uriBuilder = getClient().getURIBuilder(serviceRootURL).
+    final URIBuilder uriBuilder = getClient().newURIBuilder(serviceRootURL).
             appendEntitySetSegment(entitySetName);
 
     debugODataEntity(original, "About to create");
@@ -356,7 +356,7 @@ public abstract class AbstractTestITCase extends AbstractBaseTestITCase {
           final int actualObjectId,
           final Collection<String> expands) {
 
-    final URIBuilder uriBuilder = getClient().getURIBuilder(serviceRootURL).
+    final URIBuilder uriBuilder = getClient().newURIBuilder(serviceRootURL).
             appendEntitySetSegment("Customer").appendKeySegment(actualObjectId);
 
     // search expanded

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v3/ActionOverloadingTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v3/ActionOverloadingTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v3/ActionOverloadingTestITCase.java
index de6d62d..d9e617b 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v3/ActionOverloadingTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v3/ActionOverloadingTestITCase.java
@@ -19,7 +19,6 @@
 package org.apache.olingo.fit.v3;
 
 import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertEquals;
 
 import java.util.LinkedHashMap;
@@ -27,120 +26,69 @@ import java.util.Map;
 import org.apache.olingo.client.api.communication.request.invoke.ODataNoContent;
 import org.apache.olingo.client.api.communication.response.ODataInvokeResponse;
 import org.apache.olingo.client.api.uri.v3.URIBuilder;
-import org.apache.olingo.client.core.uri.URIUtils;
 import org.apache.olingo.commons.api.domain.ODataValue;
 import org.apache.olingo.commons.api.domain.v3.ODataEntity;
 import org.apache.olingo.commons.api.domain.v3.ODataEntitySet;
 import org.apache.olingo.commons.api.domain.v3.ODataProperty;
-import org.apache.olingo.commons.api.edm.Edm;
-import org.apache.olingo.commons.api.edm.EdmAction;
-import org.apache.olingo.commons.api.edm.EdmActionImport;
-import org.apache.olingo.commons.api.edm.EdmEntityContainer;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
-import org.apache.olingo.commons.api.edm.EdmSchema;
-import org.apache.olingo.commons.api.edm.FullQualifiedName;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmInt32;
 import org.junit.Test;
 
 public class ActionOverloadingTestITCase extends AbstractTestITCase {
 
   @Test
   public void retrieveProduct() throws EdmPrimitiveTypeException {
-    final Edm edm = getClient().getRetrieveRequestFactory().
-            getMetadataRequest(testActionOverloadingServiceRootURL).execute().getBody();
-    assertNotNull(edm);
-
-    final EdmEntityContainer container = edm.getSchemas().get(0).getEntityContainer();
-    assertNotNull(container);
-
-    int execs = 0;
-    for (EdmActionImport actImp : container.getActionImports()) {
-      if ("RetrieveProduct".equals(actImp.getName())) {
-        // 1. unbound
-        final EdmAction unbound = actImp.getUnboundAction();
-        assertNotNull(unbound);
-        assertEquals(EdmInt32.getInstance(), unbound.getReturnType().getType());
-
-        final URIBuilder unboundBuilder = getClient().getURIBuilder(testActionOverloadingServiceRootURL).
-                appendOperationCallSegment(URIUtils.operationImportURISegment(container, actImp.getName()));
-        final ODataInvokeResponse<ODataProperty> unboundRes = getClient().getInvokeRequestFactory().
-                <ODataProperty>getInvokeRequest(unboundBuilder.build(), unbound).execute();
-        assertNotNull(unboundRes);
-        assertEquals(200, unboundRes.getStatusCode());
-        assertEquals(Integer.valueOf(-10), unboundRes.getBody().getPrimitiveValue().toCastValue(Integer.class));
-        execs++;
-
-        // 2. bound to Product
-        final EdmAction productBound = edm.getBoundAction(
-                new FullQualifiedName(container.getNamespace(), actImp.getName()),
-                new FullQualifiedName(container.getNamespace(), "Product"), false);
-        assertNotNull(productBound);
-        assertEquals(EdmInt32.getInstance(), productBound.getReturnType().getType());
-
-        final ODataEntity product = getClient().getRetrieveRequestFactory().getEntityRequest(
-                getClient().getURIBuilder(testActionOverloadingServiceRootURL).
-                appendEntitySetSegment("Product").appendKeySegment(-10).build()).
-                execute().getBody();
-        assertNotNull(product);
-
-        final ODataInvokeResponse<ODataProperty> productBoundRes = getClient().getInvokeRequestFactory().
-                <ODataProperty>getInvokeRequest(product.getOperation(actImp.getName()).getTarget(), unbound).
-                execute();
-        assertNotNull(productBoundRes);
-        assertEquals(200, productBoundRes.getStatusCode());
-        assertEquals(Integer.valueOf(-10), productBoundRes.getBody().getPrimitiveValue().toCastValue(Integer.class));
-        execs++;
-
-        // 3. bound to OrderLine
-        final EdmAction orderLineBound = edm.getBoundAction(
-                new FullQualifiedName(container.getNamespace(), actImp.getName()),
-                new FullQualifiedName(container.getNamespace(), "OrderLine"), false);
-        assertNotNull(orderLineBound);
-        assertEquals(EdmInt32.getInstance(), orderLineBound.getReturnType().getType());
-
-        final Map<String, Object> key = new LinkedHashMap<String, Object>(2);
-        key.put("OrderId", -10);
-        key.put("ProductId", -10);
-        final ODataEntity orderLine = getClient().getRetrieveRequestFactory().getEntityRequest(
-                getClient().getURIBuilder(testActionOverloadingServiceRootURL).
-                appendEntitySetSegment("OrderLine").appendKeySegment(key).build()).
-                execute().getBody();
-        assertNotNull(orderLine);
-
-        final ODataInvokeResponse<ODataProperty> orderLineBoundRes = getClient().getInvokeRequestFactory().
-                <ODataProperty>getInvokeRequest(orderLine.getOperation(actImp.getName()).getTarget(), unbound).
-                execute();
-        assertNotNull(orderLineBoundRes);
-        assertEquals(200, orderLineBoundRes.getStatusCode());
-        assertEquals(Integer.valueOf(-10), orderLineBoundRes.getBody().getPrimitiveValue().toCastValue(Integer.class));
-        execs++;
-      }
-    }
-    assertEquals(3, execs);
+    final String actionImportName = "RetrieveProduct";
+
+    // 1. unbound
+    final URIBuilder builder = getClient().newURIBuilder(testActionOverloadingServiceRootURL).
+            appendOperationCallSegment(actionImportName);
+    final ODataInvokeResponse<ODataProperty> unboundRes = getClient().getInvokeRequestFactory().
+            getActionInvokeRequest(builder.build(), ODataProperty.class).execute();
+    assertNotNull(unboundRes);
+    assertEquals(200, unboundRes.getStatusCode());
+    assertEquals(Integer.valueOf(-10), unboundRes.getBody().getPrimitiveValue().toCastValue(Integer.class));
+
+    // 2. bound to Product
+    final ODataEntity product = getClient().getRetrieveRequestFactory().getEntityRequest(
+            getClient().newURIBuilder(testActionOverloadingServiceRootURL).
+            appendEntitySetSegment("Product").appendKeySegment(-10).build()).
+            execute().getBody();
+    assertNotNull(product);
+
+    final ODataInvokeResponse<ODataProperty> productBoundRes = getClient().getInvokeRequestFactory().
+            getActionInvokeRequest(product.getOperation(actionImportName).getTarget(), ODataProperty.class).
+            execute();
+    assertNotNull(productBoundRes);
+    assertEquals(200, productBoundRes.getStatusCode());
+    assertEquals(Integer.valueOf(-10), productBoundRes.getBody().getPrimitiveValue().toCastValue(Integer.class));
+
+    // 3. bound to OrderLine
+    final Map<String, Object> key = new LinkedHashMap<String, Object>(2);
+    key.put("OrderId", -10);
+    key.put("ProductId", -10);
+    final ODataEntity orderLine = getClient().getRetrieveRequestFactory().getEntityRequest(
+            getClient().newURIBuilder(testActionOverloadingServiceRootURL).
+            appendEntitySetSegment("OrderLine").appendKeySegment(key).build()).
+            execute().getBody();
+    assertNotNull(orderLine);
+
+    final ODataInvokeResponse<ODataProperty> orderLineBoundRes = getClient().getInvokeRequestFactory().
+            getActionInvokeRequest(orderLine.getOperation(actionImportName).getTarget(), ODataProperty.class).
+            execute();
+    assertNotNull(orderLineBoundRes);
+    assertEquals(200, orderLineBoundRes.getStatusCode());
+    assertEquals(Integer.valueOf(-10), orderLineBoundRes.getBody().getPrimitiveValue().toCastValue(Integer.class));
   }
 
   @Test
   public void increaseSalaries() {
-    final Edm edm = getClient().getRetrieveRequestFactory().
-            getMetadataRequest(testActionOverloadingServiceRootURL).execute().getBody();
-    assertNotNull(edm);
-
-    final EdmSchema schema = edm.getSchemas().get(0);
-    assertNotNull(schema);
-
-    EdmAction actImp = edm.getBoundAction(
-            new FullQualifiedName(schema.getNamespace(), "IncreaseSalaries"),
-            new FullQualifiedName(schema.getNamespace(), "Employee"),
-            true);
+    final String actionImportName = "IncreaseSalaries";
 
     final Map<String, ODataValue> parameters = new LinkedHashMap<String, ODataValue>(1);
     parameters.put("n", getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(5));
 
     // 1. bound to employees
-    assertNotNull(actImp);
-    assertNull(actImp.getReturnType());
-
-    final URIBuilder employeeBuilder = getClient().getURIBuilder(testActionOverloadingServiceRootURL).
+    final URIBuilder employeeBuilder = getClient().newURIBuilder(testActionOverloadingServiceRootURL).
             appendEntitySetSegment("Person").
             appendDerivedEntityTypeSegment("Microsoft.Test.OData.Services.AstoriaDefaultService.Employee");
     final ODataEntitySet employees = getClient().getRetrieveRequestFactory().getEntitySetRequest(
@@ -148,20 +96,13 @@ public class ActionOverloadingTestITCase extends AbstractTestITCase {
     assertNotNull(employees);
 
     final ODataInvokeResponse<ODataNoContent> employeeRes = getClient().getInvokeRequestFactory().
-            <ODataNoContent>getInvokeRequest(employeeBuilder.appendOperationCallSegment(actImp.getName()).build(),
-            actImp, parameters).execute();
+            getActionInvokeRequest(employeeBuilder.appendOperationCallSegment(actionImportName).build(),
+                    ODataNoContent.class, parameters).execute();
     assertNotNull(employeeRes);
     assertEquals(204, employeeRes.getStatusCode());
 
     // 2. bound to special employees
-    actImp = edm.getBoundAction(
-            new FullQualifiedName(schema.getNamespace(), "IncreaseSalaries"),
-            new FullQualifiedName(schema.getNamespace(), "SpecialEmployee"),
-            true);
-    assertNotNull(actImp);
-    assertNull(actImp.getReturnType());
-
-    final URIBuilder specEmpBuilder = getClient().getURIBuilder(testActionOverloadingServiceRootURL).
+    final URIBuilder specEmpBuilder = getClient().newURIBuilder(testActionOverloadingServiceRootURL).
             appendEntitySetSegment("Person").
             appendDerivedEntityTypeSegment("Microsoft.Test.OData.Services.AstoriaDefaultService.SpecialEmployee");
     final ODataEntitySet specEmps = getClient().getRetrieveRequestFactory().getEntitySetRequest(
@@ -169,8 +110,8 @@ public class ActionOverloadingTestITCase extends AbstractTestITCase {
     assertNotNull(specEmps);
 
     final ODataInvokeResponse<ODataNoContent> specEmpsRes = getClient().getInvokeRequestFactory().
-            <ODataNoContent>getInvokeRequest(specEmpBuilder.appendOperationCallSegment(actImp.getName()).build(),
-            actImp, parameters).execute();
+            getActionInvokeRequest(specEmpBuilder.appendOperationCallSegment(actionImportName).build(),
+                    ODataNoContent.class, parameters).execute();
     assertNotNull(specEmpsRes);
     assertEquals(204, specEmpsRes.getStatusCode());
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v3/AsyncTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v3/AsyncTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v3/AsyncTestITCase.java
index e9ac0e3..d28bea2 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v3/AsyncTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v3/AsyncTestITCase.java
@@ -44,7 +44,7 @@ public class AsyncTestITCase extends AbstractTestITCase {
 
   @Test
   public void retrieveEntitySet() throws InterruptedException, ExecutionException {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Product");
     final Future<ODataRetrieveResponse<ODataEntitySet>> futureRes =
             client.getRetrieveRequestFactory().getEntitySetRequest(uriBuilder.build()).asyncExecute();
@@ -62,7 +62,7 @@ public class AsyncTestITCase extends AbstractTestITCase {
 
   @Test
   public void updateEntity() throws InterruptedException, ExecutionException {
-    final URI uri = client.getURIBuilder(testStaticServiceRootURL).
+    final URI uri = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Product").appendKeySegment(-10).build();
 
     final ODataRetrieveResponse<ODataEntity> entityRes = client.getRetrieveRequestFactory().
@@ -93,7 +93,7 @@ public class AsyncTestITCase extends AbstractTestITCase {
 
   @Test
   public void createMediaEntity() throws Exception {
-    URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Car");
+    URIBuilder builder = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Car");
 
     final String TO_BE_UPDATED = "async buffered stream sample";
     final InputStream input = IOUtils.toInputStream(TO_BE_UPDATED);
@@ -119,7 +119,7 @@ public class AsyncTestITCase extends AbstractTestITCase {
             ? created.getProperties().get(0).getPrimitiveValue().toCastValue(Integer.class)
             : created.getProperties().get(1).getPrimitiveValue().toCastValue(Integer.class);
 
-    builder = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Car").appendKeySegment(id);
+    builder = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Car").appendKeySegment(id);
 
     final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaEntityRequest(builder.build());
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v3/BatchTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v3/BatchTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v3/BatchTestITCase.java
index cc634ef..18ebaad 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v3/BatchTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v3/BatchTestITCase.java
@@ -110,7 +110,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     URIBuilder targetURI;
     ODataEntityCreateRequest<ODataEntity> createReq;
 
-    targetURI = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customer");
+    targetURI = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customer");
     for (int i = 1; i <= 2; i++) {
       // Create Customer into the changeset
       createReq = client.getCUDRequestFactory().getEntityCreateRequest(
@@ -120,14 +120,14 @@ public class BatchTestITCase extends AbstractTestITCase {
       changeset.addRequest(createReq);
     }
 
-    targetURI = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("WrongEntitySet");
+    targetURI = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("WrongEntitySet");
     createReq = client.getCUDRequestFactory().getEntityCreateRequest(
             targetURI.build(),
             getSampleCustomerProfile(105, "Sample customer", false));
     createReq.setFormat(ODataPubFormat.JSON);
     changeset.addRequest(createReq);
 
-    targetURI = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customer");
+    targetURI = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customer");
     for (int i = 3; i <= 4; i++) {
       // Create Customer into the changeset
       createReq = client.getCUDRequestFactory().getEntityCreateRequest(
@@ -162,7 +162,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     final ODataChangeset changeset = streamManager.addChangeset();
     ODataEntity customer = getSampleCustomerProfile(20, "sample customer", false);
 
-    URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customer");
+    URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customer");
 
     // add create request
     final ODataEntityCreateRequest<ODataEntity> createReq =
@@ -177,7 +177,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     final ODataEntity customerChanges = client.getObjectFactory().newEntity(customer.getTypeName());
     customerChanges.addLink(client.getObjectFactory().newEntityNavigationLink(
             "Info",
-            client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("CustomerInfo").
+            client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("CustomerInfo").
             appendKeySegment(17).build()));
 
     final ODataEntityUpdateRequest<ODataEntity> updateReq = client.getCUDRequestFactory().getEntityUpdateRequest(
@@ -244,7 +244,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     info.getProperties().add(client.getObjectFactory().newPrimitiveProperty("Information",
             client.getObjectFactory().newPrimitiveValueBuilder().buildString("Sample information about customer 30")));
 
-    URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("CustomerInfo");
+    URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("CustomerInfo");
 
     ODataEntityCreateRequest<ODataEntity> createReq =
             client.getCUDRequestFactory().getEntityCreateRequest(uriBuilder.build(), info);
@@ -258,7 +258,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     customer.getNavigationLinks().add(
             client.getObjectFactory().newEntityNavigationLink("Info", URI.create("$" + createRequestRef)));
 
-    uriBuilder = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customer");
+    uriBuilder = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customer");
 
     // add create request
     createReq = client.getCUDRequestFactory().getEntityCreateRequest(uriBuilder.build(), customer);
@@ -289,7 +289,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     assertEquals(201, res.getStatusCode());
     assertTrue(res instanceof ODataEntityCreateResponse);
 
-    uriBuilder = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customer").appendKeySegment(30);
+    uriBuilder = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customer").appendKeySegment(30);
 
     final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(
             URIUtils.getURI(testStaticServiceRootURL, uriBuilder.build() + "/Info"));
@@ -312,7 +312,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     // Add retrieve item
     // -------------------------------------------
     // prepare URI
-    URIBuilder targetURI = client.getURIBuilder(testStaticServiceRootURL);
+    URIBuilder targetURI = client.newURIBuilder(testStaticServiceRootURL);
     targetURI.appendEntitySetSegment("Customer").appendKeySegment(-10).
             expand("Logins").select("CustomerId,Logins/Username");
 
@@ -329,7 +329,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     final ODataChangeset changeset = streamManager.addChangeset();
 
     // Update Product into the changeset
-    targetURI = client.getURIBuilder(testStaticServiceRootURL).
+    targetURI = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Product").appendKeySegment(-10);
     final URI editLink = targetURI.build();
 
@@ -348,7 +348,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     changeset.addRequest(changeReq);
 
     // Create Customer into the changeset
-    targetURI = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customer");
+    targetURI = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customer");
     final ODataEntity original = getSampleCustomerProfile(1000, "Sample customer", false);
     final ODataEntityCreateRequest<ODataEntity> createReq =
             client.getCUDRequestFactory().getEntityCreateRequest(targetURI.build(), original);
@@ -357,7 +357,7 @@ public class BatchTestITCase extends AbstractTestITCase {
 
     // Delete customer created above
     targetURI =
-            client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customer").appendKeySegment(1000);
+            client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customer").appendKeySegment(1000);
     final ODataDeleteRequest deleteReq = client.getCUDRequestFactory().getDeleteRequest(targetURI.build());
     changeset.addRequest(deleteReq);
     // -------------------------------------------
@@ -367,7 +367,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     // -------------------------------------------
 
     // prepare URI
-    targetURI = client.getURIBuilder(testStaticServiceRootURL).
+    targetURI = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Product").appendKeySegment(-10);
 
     // create new request

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v3/CountTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v3/CountTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v3/CountTestITCase.java
index 9745ef5..56c7902 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v3/CountTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v3/CountTestITCase.java
@@ -31,7 +31,7 @@ public class CountTestITCase extends AbstractTestITCase {
 
   @Test
   public void entityCount() {
-    CommonURIBuilder<?> uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    CommonURIBuilder<?> uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Customer").count();
     final ODataValueRequest req = client.getRetrieveRequestFactory().getValueRequest(uriBuilder.build());
     req.setFormat(ODataValueFormat.TEXT);
@@ -45,7 +45,7 @@ public class CountTestITCase extends AbstractTestITCase {
 
   @Test
   public void invalidAccept() {
-    final CommonURIBuilder<?> uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final CommonURIBuilder<?> uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Customer").count();
     final ODataValueRequest req = client.getRetrieveRequestFactory().getValueRequest(uriBuilder.build());
     req.setFormat(ODataValueFormat.TEXT);


[3/4] Invoke request factory re-factoring

Posted by il...@apache.org.
http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v3/EntityCreateTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v3/EntityCreateTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v3/EntityCreateTestITCase.java
index db26eee..0d9730e 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v3/EntityCreateTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v3/EntityCreateTestITCase.java
@@ -227,7 +227,7 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
     final ODataEntity original = getSampleCustomerProfile(id, "Sample customer", false);
 
     final ODataEntityCreateRequest<ODataEntity> createReq = client.getCUDRequestFactory().getEntityCreateRequest(
-            client.getURIBuilder(getServiceRoot()).appendEntitySetSegment("Customer").build(), original);
+            client.newURIBuilder(getServiceRoot()).appendEntitySetSegment("Customer").build(), original);
     createReq.setPrefer(client.newPreferences().returnNoContent());
 
     final ODataEntityCreateResponse<ODataEntity> createRes = createReq.execute();
@@ -243,7 +243,7 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
     }
 
     final ODataDeleteResponse deleteRes = client.getCUDRequestFactory().getDeleteRequest(
-            client.getURIBuilder(getServiceRoot()).appendEntitySetSegment("Customer").appendKeySegment(id).build()).
+            client.newURIBuilder(getServiceRoot()).appendEntitySetSegment("Customer").appendKeySegment(id).build()).
             execute();
     assertEquals(204, deleteRes.getStatusCode());
   }
@@ -253,7 +253,7 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
     final int id = 2;
     final ODataEntity original = getSampleCustomerProfile(id, "Sample customer for issue 135", false);
 
-    final URIBuilder uriBuilder = client.getURIBuilder(getServiceRoot()).appendEntitySetSegment("Customer");
+    final URIBuilder uriBuilder = client.newURIBuilder(getServiceRoot()).appendEntitySetSegment("Customer");
     final ODataEntityCreateRequest<ODataEntity> createReq =
             client.getCUDRequestFactory().getEntityCreateRequest(uriBuilder.build(), original);
     createReq.setFormat(ODataPubFormat.JSON_FULL_METADATA);
@@ -267,7 +267,7 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
       fail(e.getMessage());
     } finally {
       final ODataDeleteResponse deleteRes = client.getCUDRequestFactory().getDeleteRequest(
-              client.getURIBuilder(getServiceRoot()).appendEntitySetSegment("Customer").appendKeySegment(id).
+              client.newURIBuilder(getServiceRoot()).appendEntitySetSegment("Customer").appendKeySegment(id).
               build()).
               execute();
       assertEquals(204, deleteRes.getStatusCode());
@@ -294,7 +294,7 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
               client.getObjectFactory().newPrimitiveValueBuilder().buildInt32(id)));
 
       final ODataEntityCreateRequest<ODataEntity> createReq = client.getCUDRequestFactory().getEntityCreateRequest(
-              client.getURIBuilder(getServiceRoot()).appendEntitySetSegment("Order").build(), order);
+              client.newURIBuilder(getServiceRoot()).appendEntitySetSegment("Order").build(), order);
       createReq.setFormat(format);
 
       original.addLink(client.getObjectFactory().newEntitySetNavigationLink(
@@ -306,7 +306,7 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
     // now, compare the created one with the actual one and go deeply into the associated customer info.....
     final ODataEntity actual = compareEntities(getServiceRoot(), format, created, id, null);
 
-    final URIBuilder uriBuilder = client.getURIBuilder(getServiceRoot());
+    final URIBuilder uriBuilder = client.newURIBuilder(getServiceRoot());
     uriBuilder.appendEntitySetSegment("Customer").appendKeySegment(id).appendEntitySetSegment("Orders");
 
     final ODataEntitySetRequest<ODataEntitySet> req = client.getRetrieveRequestFactory().
@@ -348,7 +348,7 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
     // now, compare the created one with the actual one and go deeply into the associated customer info.....
     final ODataEntity actual = compareEntities(getServiceRoot(), format, created, id, null);
 
-    final URIBuilder uriBuilder = client.getURIBuilder(getServiceRoot());
+    final URIBuilder uriBuilder = client.newURIBuilder(getServiceRoot());
     uriBuilder.appendEntitySetSegment("Customer").appendKeySegment(id).appendEntitySetSegment("Info");
 
     final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
@@ -464,7 +464,7 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
                     client.getObjectFactory().newPrimitiveValueBuilder().buildBoolean(false)));
 
     final URIBuilder builder =
-            client.getURIBuilder(getServiceRoot()).appendEntitySetSegment("Message");
+            client.newURIBuilder(getServiceRoot()).appendEntitySetSegment("Message");
     final ODataEntityCreateRequest<ODataEntity> req = client.getCUDRequestFactory().
             getEntityCreateRequest(builder.build(), message);
     req.setFormat(format);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v3/EntityRetrieveTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v3/EntityRetrieveTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v3/EntityRetrieveTestITCase.java
index b6943aa..9314d2a 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v3/EntityRetrieveTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v3/EntityRetrieveTestITCase.java
@@ -56,7 +56,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
   }
 
   private void withInlineEntry(final ODataPubFormat format) {
-    final CommonURIBuilder<?> uriBuilder = client.getURIBuilder(getServiceRoot()).
+    final CommonURIBuilder<?> uriBuilder = client.newURIBuilder(getServiceRoot()).
             appendEntitySetSegment("Customer").appendKeySegment(-10).expand("Info");
 
     final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
@@ -109,7 +109,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
   }
 
   private void withInlineFeed(final ODataPubFormat format) {
-    final CommonURIBuilder<?> uriBuilder = client.getURIBuilder(getServiceRoot()).
+    final CommonURIBuilder<?> uriBuilder = client.newURIBuilder(getServiceRoot()).
             appendEntitySetSegment("Customer").appendKeySegment(-10).expand("Orders");
 
     final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
@@ -148,7 +148,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
   }
 
   private void rawRequest(final ODataPubFormat format) {
-    final CommonURIBuilder<?> uriBuilder = client.getURIBuilder(getServiceRoot()).
+    final CommonURIBuilder<?> uriBuilder = client.newURIBuilder(getServiceRoot()).
             appendEntitySetSegment("Car").appendKeySegment(16);
 
     final ODataRawRequest req = client.getRetrieveRequestFactory().getRawRequest(uriBuilder.build());
@@ -180,7 +180,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
     multiKey.put("FromUsername", "1");
     multiKey.put("MessageId", -10);
 
-    final CommonURIBuilder<?> uriBuilder = client.getURIBuilder(getServiceRoot()).
+    final CommonURIBuilder<?> uriBuilder = client.newURIBuilder(getServiceRoot()).
             appendEntitySetSegment("Message").appendKeySegment(multiKey);
 
     final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
@@ -214,7 +214,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
 
   private void checkForETag(final ODataPubFormat format) {
     final CommonURIBuilder<?> uriBuilder =
-            client.getURIBuilder(getServiceRoot()).appendEntitySetSegment("Product").appendKeySegment(-10);
+            client.newURIBuilder(getServiceRoot()).appendEntitySetSegment("Product").appendKeySegment(-10);
 
     final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
     req.setFormat(format);
@@ -231,7 +231,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
 
   @Test(expected = IllegalArgumentException.class)
   public void issue99() {
-    final CommonURIBuilder<?> uriBuilder = client.getURIBuilder(getServiceRoot()).appendEntitySetSegment("Car");
+    final CommonURIBuilder<?> uriBuilder = client.newURIBuilder(getServiceRoot()).appendEntitySetSegment("Car");
 
     final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
     req.setFormat(ODataPubFormat.JSON);
@@ -242,7 +242,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
   }
 
   private void geospatial(final ODataPubFormat format) {
-    final URIBuilder uriBuilder = client.getURIBuilder(getServiceRoot()).
+    final URIBuilder uriBuilder = client.newURIBuilder(getServiceRoot()).
             appendEntitySetSegment("AllGeoTypesSet").appendKeySegment(-10);
 
     final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v3/EntitySetTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v3/EntitySetTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v3/EntitySetTestITCase.java
index 6bcd248..68fb07d 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v3/EntitySetTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v3/EntitySetTestITCase.java
@@ -99,7 +99,7 @@ public class EntitySetTestITCase extends AbstractTestITCase {
   }
 
   private void readEntitySetWithNextLink(final ODataPubFormat format) {
-    final URIBuilder uriBuilder = client.getURIBuilder(getServiceRoot());
+    final URIBuilder uriBuilder = client.newURIBuilder(getServiceRoot());
     uriBuilder.appendEntitySetSegment("Customer");
 
     final ODataEntitySetRequest<ODataEntitySet> req = client.getRetrieveRequestFactory().
@@ -124,7 +124,7 @@ public class EntitySetTestITCase extends AbstractTestITCase {
   }
 
   private void readODataEntitySetIterator(final ODataPubFormat format) {
-    final URIBuilder uriBuilder = client.getURIBuilder(getServiceRoot());
+    final URIBuilder uriBuilder = client.newURIBuilder(getServiceRoot());
     uriBuilder.appendEntitySetSegment("Customer");
 
     final ODataEntitySetIteratorRequest<ODataEntitySet, ODataEntity> req =
@@ -147,7 +147,7 @@ public class EntitySetTestITCase extends AbstractTestITCase {
   }
 
   private void readWithInlineCount(final ODataPubFormat format) {
-    final URIBuilder uriBuilder = client.getURIBuilder(getServiceRoot());
+    final URIBuilder uriBuilder = client.newURIBuilder(getServiceRoot());
     uriBuilder.appendEntitySetSegment("Product").inlineCount(URIBuilder.InlineCount.allpages);
 
     final ODataRawRequest req = client.getRetrieveRequestFactory().getRawRequest(uriBuilder.build());
@@ -161,7 +161,7 @@ public class EntitySetTestITCase extends AbstractTestITCase {
   }
 
   private void rawRequest(final ODataPubFormat format) {
-    final URIBuilder uriBuilder = client.getURIBuilder(getServiceRoot());
+    final URIBuilder uriBuilder = client.newURIBuilder(getServiceRoot());
     uriBuilder.appendEntitySetSegment("Car");
 
     final ODataRawRequest req = client.getRetrieveRequestFactory().getRawRequest(uriBuilder.build());

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v3/EntityUpdateTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v3/EntityUpdateTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v3/EntityUpdateTestITCase.java
index 3e78f60..413dae8 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v3/EntityUpdateTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v3/EntityUpdateTestITCase.java
@@ -49,7 +49,7 @@ public class EntityUpdateTestITCase extends AbstractTestITCase {
   @Test
   public void mergeAsAtom() {
     final ODataPubFormat format = ODataPubFormat.ATOM;
-    final URI uri = client.getURIBuilder(getServiceRoot()).
+    final URI uri = client.newURIBuilder(getServiceRoot()).
             appendEntitySetSegment("Product").appendKeySegment(-10).build();
     final String etag = getETag(uri);
     final ODataEntity merge = client.getObjectFactory().newEntity(TEST_PRODUCT_TYPE);
@@ -60,7 +60,7 @@ public class EntityUpdateTestITCase extends AbstractTestITCase {
   @Test
   public void mergeAsJSON() {
     final ODataPubFormat format = ODataPubFormat.JSON_FULL_METADATA;
-    final URI uri = client.getURIBuilder(getServiceRoot()).
+    final URI uri = client.newURIBuilder(getServiceRoot()).
             appendEntitySetSegment("Product").appendKeySegment(-10).build();
     final String etag = getETag(uri);
     final ODataEntity merge = client.getObjectFactory().newEntity(TEST_PRODUCT_TYPE);
@@ -71,7 +71,7 @@ public class EntityUpdateTestITCase extends AbstractTestITCase {
   @Test
   public void patchAsAtom() {
     final ODataPubFormat format = ODataPubFormat.ATOM;
-    final URI uri = client.getURIBuilder(getServiceRoot()).
+    final URI uri = client.newURIBuilder(getServiceRoot()).
             appendEntitySetSegment("Product").appendKeySegment(-10).build();
     final String etag = getETag(uri);
     final ODataEntity patch = client.getObjectFactory().newEntity(TEST_PRODUCT_TYPE);
@@ -82,7 +82,7 @@ public class EntityUpdateTestITCase extends AbstractTestITCase {
   @Test
   public void patchAsJSON() {
     final ODataPubFormat format = ODataPubFormat.JSON_FULL_METADATA;
-    final URI uri = client.getURIBuilder(getServiceRoot()).
+    final URI uri = client.newURIBuilder(getServiceRoot()).
             appendEntitySetSegment("Product").appendKeySegment(-10).build();
     final String etag = getETag(uri);
     final ODataEntity patch = client.getObjectFactory().newEntity(TEST_PRODUCT_TYPE);
@@ -93,7 +93,7 @@ public class EntityUpdateTestITCase extends AbstractTestITCase {
   @Test
   public void replaceAsAtom() {
     final ODataPubFormat format = ODataPubFormat.ATOM;
-    final ODataEntity changes = read(format, client.getURIBuilder(getServiceRoot()).
+    final ODataEntity changes = read(format, client.newURIBuilder(getServiceRoot()).
             appendEntitySetSegment("Car").appendKeySegment(14).build());
     updateEntityDescription(format, changes, UpdateType.REPLACE);
   }
@@ -101,7 +101,7 @@ public class EntityUpdateTestITCase extends AbstractTestITCase {
   @Test
   public void replaceAsJSON() {
     final ODataPubFormat format = ODataPubFormat.JSON_FULL_METADATA;
-    final ODataEntity changes = read(format, client.getURIBuilder(getServiceRoot()).
+    final ODataEntity changes = read(format, client.newURIBuilder(getServiceRoot()).
             appendEntitySetSegment("Car").appendKeySegment(14).build());
     updateEntityDescription(format, changes, UpdateType.REPLACE);
   }
@@ -117,7 +117,7 @@ public class EntityUpdateTestITCase extends AbstractTestITCase {
   }
 
   public void patchLink(final ODataPubFormat format) throws EdmPrimitiveTypeException {
-    final URI uri = client.getURIBuilder(getServiceRoot()).
+    final URI uri = client.newURIBuilder(getServiceRoot()).
             appendEntitySetSegment("Customer").appendKeySegment(-10).build();
 
     final ODataEntity patch = client.getObjectFactory().
@@ -127,14 +127,14 @@ public class EntityUpdateTestITCase extends AbstractTestITCase {
     // ---------------------------------------
     // Update to CustomerInfo(12)
     // ---------------------------------------
-    URI customerInfoURI = client.getURIBuilder(getServiceRoot()).
+    URI customerInfoURI = client.newURIBuilder(getServiceRoot()).
             appendEntitySetSegment("CustomerInfo").appendKeySegment(12).build();
 
     patch.addLink(client.getObjectFactory().newEntityNavigationLink("Info", customerInfoURI));
 
     update(UpdateType.PATCH, patch, format, null);
 
-    customerInfoURI = client.getURIBuilder(getServiceRoot()).
+    customerInfoURI = client.newURIBuilder(getServiceRoot()).
             appendEntitySetSegment("Customer").appendKeySegment(-10).appendNavigationSegment("Info").build();
 
     ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(customerInfoURI);
@@ -151,7 +151,7 @@ public class EntityUpdateTestITCase extends AbstractTestITCase {
     // ---------------------------------------
     patch.getNavigationLinks().clear();
 
-    customerInfoURI = client.getURIBuilder(getServiceRoot()).
+    customerInfoURI = client.newURIBuilder(getServiceRoot()).
             appendEntitySetSegment("CustomerInfo").appendKeySegment(11).build();
     read(format, customerInfoURI);
 
@@ -159,7 +159,7 @@ public class EntityUpdateTestITCase extends AbstractTestITCase {
 
     update(UpdateType.PATCH, patch, format, null);
 
-    customerInfoURI = client.getURIBuilder(getServiceRoot()).
+    customerInfoURI = client.newURIBuilder(getServiceRoot()).
             appendEntitySetSegment("Customer").appendKeySegment(-10).appendNavigationSegment("Info").build();
 
     req = client.getRetrieveRequestFactory().getEntityRequest(customerInfoURI);
@@ -178,7 +178,7 @@ public class EntityUpdateTestITCase extends AbstractTestITCase {
     final LinkedHashMap<String, Object> multiKey = new LinkedHashMap<String, Object>();
     multiKey.put("FromUsername", "1");
     multiKey.put("MessageId", -10);
-    final ODataEntity message = read(format, client.getURIBuilder(getServiceRoot()).
+    final ODataEntity message = read(format, client.newURIBuilder(getServiceRoot()).
             appendEntitySetSegment("Message").appendKeySegment(multiKey).build());
     message.getAssociationLinks().clear();
     message.getNavigationLinks().clear();
@@ -222,7 +222,7 @@ public class EntityUpdateTestITCase extends AbstractTestITCase {
 
   @Test
   public void concurrentModification() {
-    final URI uri = client.getURIBuilder(getServiceRoot()).
+    final URI uri = client.newURIBuilder(getServiceRoot()).
             appendEntitySetSegment("Product").appendKeySegment(-10).build();
     String etag = getETag(uri);
     final ODataEntity product = client.getObjectFactory().newEntity(TEST_PRODUCT_TYPE);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v3/ErrorTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v3/ErrorTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v3/ErrorTestITCase.java
index 21fb8f8..fe8ef61 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v3/ErrorTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v3/ErrorTestITCase.java
@@ -38,12 +38,8 @@ import org.apache.olingo.client.api.uri.v3.URIBuilder;
 import org.apache.olingo.client.api.v3.ODataClient;
 import org.apache.olingo.client.core.communication.request.AbstractODataBasicRequest;
 import org.apache.olingo.client.core.communication.response.AbstractODataResponse;
-import org.apache.olingo.client.core.uri.URIUtils;
 import org.apache.olingo.commons.api.domain.v3.ODataEntity;
 import org.apache.olingo.commons.api.domain.v3.ODataEntitySet;
-import org.apache.olingo.commons.api.edm.Edm;
-import org.apache.olingo.commons.api.edm.EdmEntityContainer;
-import org.apache.olingo.commons.api.edm.EdmFunctionImport;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
 import org.junit.Test;
@@ -88,7 +84,7 @@ public class ErrorTestITCase extends AbstractTestITCase {
   }
 
   private void stacktraceError(final ODataPubFormat format) {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL);
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL);
     uriBuilder.appendEntitySetSegment("Customer");
 
     final ErrorGeneratingRequest errorReq = new ErrorGeneratingRequest(HttpMethod.POST, uriBuilder.build());
@@ -115,7 +111,7 @@ public class ErrorTestITCase extends AbstractTestITCase {
   }
 
   private void notfoundError(final ODataPubFormat format) {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL);
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL);
     uriBuilder.appendEntitySetSegment("Customer(154)");
 
     final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
@@ -143,16 +139,10 @@ public class ErrorTestITCase extends AbstractTestITCase {
   }
 
   private void instreamError(final ODataPubFormat format) {
-    final Edm metadata =
-            client.getRetrieveRequestFactory().getMetadataRequest(testStaticServiceRootURL).execute().getBody();
-    assertNotNull(metadata);
-
-    final EdmEntityContainer container = metadata.getSchemas().get(0).getEntityContainer();
-    final EdmFunctionImport funcImp = container.getFunctionImport("InStreamErrorGetCustomer");
-    final URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).
-            appendOperationCallSegment(URIUtils.operationImportURISegment(container, funcImp.getName()));
+    final URIBuilder builder = client.newURIBuilder(testStaticServiceRootURL).
+            appendOperationCallSegment("InStreamErrorGetCustomer");
     final ODataInvokeRequest<ODataEntitySet> req =
-            client.getInvokeRequestFactory().getInvokeRequest(builder.build(), funcImp.getUnboundFunction(null));
+            client.getInvokeRequestFactory().getFunctionInvokeRequest(builder.build(), ODataEntitySet.class);
     req.setFormat(format);
 
     final ODataInvokeResponse<ODataEntitySet> res = req.execute();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v3/FilterFactoryTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v3/FilterFactoryTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v3/FilterFactoryTestITCase.java
index 2b447ad..3f00d2c 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v3/FilterFactoryTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v3/FilterFactoryTestITCase.java
@@ -39,7 +39,7 @@ public class FilterFactoryTestITCase extends AbstractTestITCase {
   }
 
   private void match(final String entitySet, final URIFilter filter, final int expected) {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment(entitySet).filter(filter);
 
     final CommonODataEntitySet feed = 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/v3/FilterTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v3/FilterTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v3/FilterTestITCase.java
index 7d3bbdb..d14f9e4 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v3/FilterTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v3/FilterTestITCase.java
@@ -28,7 +28,7 @@ import org.junit.Test;
 public class FilterTestITCase extends AbstractTestITCase {
 
   private void filterQueryTest(final String entity, final String filter, final int expected) {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment(entity).filter(filter);
     final ODataEntitySet entitySet = client.getRetrieveRequestFactory().getEntitySetRequest(uriBuilder.build()).
             execute().getBody();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v3/InvokeTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v3/InvokeTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v3/InvokeTestITCase.java
index 02edf6e..6b8742f 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v3/InvokeTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v3/InvokeTestITCase.java
@@ -39,43 +39,25 @@ import org.apache.olingo.client.api.communication.response.ODataDeleteResponse;
 import org.apache.olingo.client.api.communication.response.ODataEntityCreateResponse;
 import org.apache.olingo.client.api.communication.response.ODataInvokeResponse;
 import org.apache.olingo.client.api.uri.v3.URIBuilder;
-import org.apache.olingo.client.core.uri.URIUtils;
 import org.apache.olingo.commons.api.domain.ODataOperation;
-import org.apache.olingo.commons.api.domain.ODataPrimitiveValue;
 import org.apache.olingo.commons.api.domain.ODataValue;
 import org.apache.olingo.commons.api.domain.v3.ODataEntity;
 import org.apache.olingo.commons.api.domain.v3.ODataEntitySet;
 import org.apache.olingo.commons.api.domain.v3.ODataProperty;
-import org.apache.olingo.commons.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.EdmFunctionImport;
-import org.apache.olingo.commons.api.edm.EdmParameter;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
-import org.apache.olingo.commons.core.edm.EdmTypeInfo;
 import org.junit.Test;
 
 public class InvokeTestITCase extends AbstractTestITCase {
 
   private void getWithNoParams(final ODataPubFormat format) {
-    final Edm edm = getClient().getRetrieveRequestFactory().
-            getMetadataRequest(testStaticServiceRootURL).execute().getBody();
-    assertNotNull(edm);
-
-    final EdmEntityContainer container = edm.getSchemas().get(0).getEntityContainer();
-
     // 1. get primitive value property
-    EdmFunctionImport funcImp = container.getFunctionImport("GetPrimitiveString");
-    EdmFunction func = funcImp.getUnboundFunction(null);
-
-    URIBuilder builder = getClient().getURIBuilder(testStaticServiceRootURL).
-            appendOperationCallSegment(URIUtils.operationImportURISegment(container, funcImp.getName()));
+    URIBuilder builder = getClient().newURIBuilder(testStaticServiceRootURL).
+            appendOperationCallSegment("GetPrimitiveString");
 
     ODataInvokeRequest<ODataProperty> req = getClient().getInvokeRequestFactory().
-            getInvokeRequest(builder.build(), func);
+            getFunctionInvokeRequest(builder.build(), ODataProperty.class);
     req.setFormat(format);
     ODataInvokeResponse<ODataProperty> res = req.execute();
     assertNotNull(res);
@@ -85,13 +67,10 @@ public class InvokeTestITCase extends AbstractTestITCase {
     assertEquals("Foo", property.getPrimitiveValue().toString());
 
     // 2. get collection of complex type property
-    funcImp = container.getFunctionImport("EntityProjectionReturnsCollectionOfComplexTypes");
-    func = funcImp.getUnboundFunction(null);
+    builder = getClient().newURIBuilder(testStaticServiceRootURL).
+            appendOperationCallSegment("EntityProjectionReturnsCollectionOfComplexTypes");
 
-    builder = getClient().getURIBuilder(testStaticServiceRootURL).
-            appendOperationCallSegment(URIUtils.operationImportURISegment(container, funcImp.getName()));
-
-    req = getClient().getInvokeRequestFactory().getInvokeRequest(builder.build(), func);
+    req = getClient().getInvokeRequestFactory().getFunctionInvokeRequest(builder.build(), ODataProperty.class);
     req.setFormat(format);
     res = req.execute();
     assertNotNull(res);
@@ -114,26 +93,13 @@ public class InvokeTestITCase extends AbstractTestITCase {
 
   private void getWithParams(final ODataPubFormat format) throws EdmPrimitiveTypeException {
     // 1. primitive result
-    final Edm edm = getClient().getRetrieveRequestFactory().
-            getMetadataRequest(testStaticServiceRootURL).execute().getBody();
-    assertNotNull(edm);
-
-    final EdmEntityContainer container = edm.getSchemas().get(0).getEntityContainer();
-    EdmFunctionImport funcImp = container.getFunctionImport("GetArgumentPlusOne");
-
-    URIBuilder builder = getClient().getURIBuilder(testStaticServiceRootURL).
-            appendOperationCallSegment(URIUtils.operationImportURISegment(container, funcImp.getName()));
-
-    EdmFunction function = funcImp.getUnboundFunction(Collections.singletonList("arg1"));
-    EdmParameter param = function.getParameter(function.getParameterNames().get(0));
-    ODataPrimitiveValue paramValue = getClient().getObjectFactory().newPrimitiveValueBuilder().
-            setType(param.getType()).
-            setValue(154).
-            build();
+    URIBuilder builder = getClient().newURIBuilder(testStaticServiceRootURL).
+            appendOperationCallSegment("GetArgumentPlusOne");
 
+    ODataValue param = getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(154);
     final ODataInvokeRequest<ODataProperty> primitiveReq = getClient().getInvokeRequestFactory().
-            getInvokeRequest(builder.build(), function,
-                    Collections.<String, ODataValue>singletonMap(param.getName(), paramValue));
+            getFunctionInvokeRequest(builder.build(), ODataProperty.class,
+                    Collections.<String, ODataValue>singletonMap("arg1", param));
     primitiveReq.setFormat(format);
 
     final ODataInvokeResponse<ODataProperty> primitiveRes = primitiveReq.execute();
@@ -143,22 +109,13 @@ public class InvokeTestITCase extends AbstractTestITCase {
     assertNotNull(property);
     assertEquals(Integer.valueOf(155), property.getPrimitiveValue().toCastValue(Integer.class));
 
-    // 2. feed result
-    funcImp = container.getFunctionImport("GetSpecificCustomer");
-
-    builder = getClient().getURIBuilder(testStaticServiceRootURL).
-            appendOperationCallSegment(URIUtils.operationImportURISegment(container, funcImp.getName()));
-
-    function = funcImp.getUnboundFunction(Collections.singletonList("Name"));
-    param = function.getParameter(function.getParameterNames().get(0));
-    paramValue = getClient().getObjectFactory().newPrimitiveValueBuilder().
-            setType(param.getType()).
-            setValue(StringUtils.EMPTY).
-            build();
+    // 2. entity set result
+    builder = getClient().newURIBuilder(testStaticServiceRootURL).appendOperationCallSegment("GetSpecificCustomer");
 
+    param = getClient().getObjectFactory().newPrimitiveValueBuilder().buildString(StringUtils.EMPTY);
     final ODataInvokeRequest<ODataEntitySet> feedReq = getClient().getInvokeRequestFactory().
-            getInvokeRequest(builder.build(), function,
-                    Collections.<String, ODataValue>singletonMap(param.getName(), paramValue));
+            getFunctionInvokeRequest(builder.build(), ODataEntitySet.class,
+                    Collections.<String, ODataValue>singletonMap("Name", param));
     feedReq.setFormat(format);
 
     final ODataInvokeResponse<ODataEntitySet> feedRes = feedReq.execute();
@@ -199,7 +156,7 @@ public class InvokeTestITCase extends AbstractTestITCase {
     employee.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty(
             "Title", getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("CEO")));
 
-    final URIBuilder uriBuilder = getClient().getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Person");
+    final URIBuilder uriBuilder = getClient().newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Person");
 
     final ODataEntityCreateRequest<ODataEntity> createReq =
             getClient().getCUDRequestFactory().getEntityCreateRequest(uriBuilder.build(), employee);
@@ -213,7 +170,7 @@ public class InvokeTestITCase extends AbstractTestITCase {
   }
 
   private void deleteEmployee(final ODataPubFormat format, final Integer id) {
-    final URIBuilder uriBuilder = getClient().getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = getClient().newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Person").appendKeySegment(id);
 
     final ODataDeleteRequest deleteReq = getClient().getCUDRequestFactory().getDeleteRequest(uriBuilder.build());
@@ -233,24 +190,15 @@ public class InvokeTestITCase extends AbstractTestITCase {
     // 1. invoke action bound with the employee just created
     final ODataOperation operation = created.getOperations().get(0);
 
-    final Edm edm = getClient().getRetrieveRequestFactory().
-            getMetadataRequest(testStaticServiceRootURL).execute().getBody();
-    assertNotNull(edm);
-
-    final EdmEntityContainer container = edm.getSchemas().get(0).getEntityContainer();
-    final EdmAction action = edm.getBoundAction(
-            new FullQualifiedName(container.getNamespace(), operation.getTitle()),
-            created.getTypeName(), false);
-
     final ODataInvokeRequest<ODataNoContent> req = getClient().getInvokeRequestFactory().
-            getInvokeRequest(operation.getTarget(), action);
+            getActionInvokeRequest(operation.getTarget(), ODataNoContent.class);
     req.setFormat(ODataPubFormat.JSON_FULL_METADATA);
     final ODataInvokeResponse<ODataNoContent> res = req.execute();
     assertNotNull(res);
     assertEquals(204, res.getStatusCode());
 
     // 2. check that invoked action has effectively run
-    final URIBuilder uriBuilder = getClient().getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = getClient().newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Person").appendKeySegment(createdId);
     final ODataEntityRequest<ODataEntity> retrieveRes =
             getClient().getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
@@ -266,7 +214,7 @@ public class InvokeTestITCase extends AbstractTestITCase {
   @Test
   public void boundPostWithParams() throws EdmPrimitiveTypeException {
     // 1. read employees and store their current salary
-    final URIBuilder builder = getClient().getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder builder = getClient().newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Person").
             appendEntitySetSegment("Microsoft.Test.OData.Services.AstoriaDefaultService.Employee");
     final URI employeesURI = builder.build();
@@ -281,27 +229,11 @@ public class InvokeTestITCase extends AbstractTestITCase {
     assertFalse(preSalaries.isEmpty());
 
     // 2. invoke action bound, with additional parameter
-    final Edm edm = getClient().getRetrieveRequestFactory().
-            getMetadataRequest(testStaticServiceRootURL).execute().getBody();
-    assertNotNull(edm);
-
-    final EdmEntityContainer container = edm.getSchemas().get(0).getEntityContainer();
-
-    final EdmTypeInfo employeesTypeInfo = new EdmTypeInfo.Builder().setEdm(edm).
-            setTypeExpression("Collection(Microsoft.Test.OData.Services.AstoriaDefaultService.Employee)").build();
-    final EdmAction action = edm.getBoundAction(
-            new FullQualifiedName(container.getNamespace(), "IncreaseSalaries"),
-            employeesTypeInfo.getFullQualifiedName(), employeesTypeInfo.isCollection());
-
-    final EdmParameter param = action.getParameter(action.getParameterNames().get(1));
-    final ODataPrimitiveValue paramValue = getClient().getObjectFactory().newPrimitiveValueBuilder().
-            setType(param.getType()).
-            setValue(1).
-            build();
-
-    final ODataInvokeRequest<ODataNoContent> req = getClient().getInvokeRequestFactory().getInvokeRequest(
-            builder.appendOperationCallSegment(action.getName()).build(), action,
-            Collections.<String, ODataValue>singletonMap(param.getName(), paramValue));
+    final ODataValue param = getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(1);
+    final ODataInvokeRequest<ODataNoContent> req = getClient().getInvokeRequestFactory().
+            getActionInvokeRequest(
+                    builder.appendOperationCallSegment("IncreaseSalaries").build(), ODataNoContent.class,
+                    Collections.<String, ODataValue>singletonMap("n", param));
     final ODataInvokeResponse<ODataNoContent> res = req.execute();
     assertNotNull(res);
     assertEquals(204, res.getStatusCode());

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v3/KeyAsSegmentTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v3/KeyAsSegmentTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v3/KeyAsSegmentTestITCase.java
index 7a1bebc..30c2d99 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v3/KeyAsSegmentTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v3/KeyAsSegmentTestITCase.java
@@ -39,7 +39,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("Customer").appendKeySegment(-10);
 
     final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
@@ -90,7 +90,7 @@ public class KeyAsSegmentTestITCase extends AbstractTestITCase {
   @Test
   public void replaceODataEntityAsAtom() {
     final ODataPubFormat format = ODataPubFormat.ATOM;
-    final ODataEntity changes = read(format, client.getURIBuilder(testKeyAsSegmentServiceRootURL).
+    final ODataEntity changes = read(format, client.newURIBuilder(testKeyAsSegmentServiceRootURL).
             appendEntitySetSegment("Car").appendKeySegment(14).build());
     updateEntityDescription(format, changes, UpdateType.REPLACE);
   }
@@ -98,7 +98,7 @@ public class KeyAsSegmentTestITCase extends AbstractTestITCase {
   @Test
   public void replaceODataEntityAsJSON() {
     final ODataPubFormat format = ODataPubFormat.JSON_FULL_METADATA;
-    final ODataEntity changes = read(format, client.getURIBuilder(testKeyAsSegmentServiceRootURL).
+    final ODataEntity changes = read(format, client.newURIBuilder(testKeyAsSegmentServiceRootURL).
             appendEntitySetSegment("Car").appendKeySegment(14).build());
     updateEntityDescription(format, changes, UpdateType.REPLACE);
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v3/LinkTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v3/LinkTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v3/LinkTestITCase.java
index 5edf429..54b0774 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v3/LinkTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v3/LinkTestITCase.java
@@ -49,7 +49,7 @@ public class LinkTestITCase extends AbstractTestITCase {
   }
 
   private ODataLinkCollection doRetrieveLinkURIs(final ODataFormat format, final String linkname) throws IOException {
-    final URIBuilder uriBuilder = client.getURIBuilder(getServiceRoot()).
+    final URIBuilder uriBuilder = client.newURIBuilder(getServiceRoot()).
             appendEntitySetSegment("Customer").appendKeySegment(-10);
 
     final ODataLinkCollectionRequest req =
@@ -95,7 +95,7 @@ public class LinkTestITCase extends AbstractTestITCase {
     final ODataLink newLink = client.getObjectFactory().
             newAssociationLink(URI.create(getServiceRoot() + "/Login('3')"));
 
-    final URIBuilder uriBuilder = client.getURIBuilder(getServiceRoot()).
+    final URIBuilder uriBuilder = client.newURIBuilder(getServiceRoot()).
             appendEntitySetSegment("Customer").appendKeySegment(-10).appendLinksSegment("Logins");
 
     final ODataLinkCreateRequest req =
@@ -113,7 +113,7 @@ public class LinkTestITCase extends AbstractTestITCase {
     assertEquals(Collections.singletonList(newLink.getLink()), after);
 
     assertEquals(204, client.getCUDRequestFactory().getDeleteRequest(
-            client.getURIBuilder(getServiceRoot()).appendEntitySetSegment("Customer").
+            client.newURIBuilder(getServiceRoot()).appendEntitySetSegment("Customer").
             appendKeySegment(-10).appendLinksSegment("Logins('3')").build()).execute().getStatusCode());
   }
 
@@ -135,7 +135,7 @@ public class LinkTestITCase extends AbstractTestITCase {
     ODataLink newLink = client.getObjectFactory().
             newAssociationLink(URI.create(getServiceRoot() + "/CustomerInfo(12)"));
 
-    final URIBuilder uriBuilder = client.getURIBuilder(getServiceRoot());
+    final URIBuilder uriBuilder = client.newURIBuilder(getServiceRoot());
     uriBuilder.appendEntitySetSegment("Customer").appendKeySegment(-10).appendLinksSegment("Info");
 
     ODataLinkUpdateRequest req =

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v3/MediaEntityTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v3/MediaEntityTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v3/MediaEntityTestITCase.java
index 5ae7e9e..7383c1b 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v3/MediaEntityTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v3/MediaEntityTestITCase.java
@@ -47,7 +47,7 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
 
   @Test
   public void read() throws Exception {
-    final URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder builder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Car").appendKeySegment(12);
 
     final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaEntityRequest(builder.build());
@@ -63,7 +63,7 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
   @Test(expected = ODataClientErrorException.class)
   public void readWithXmlError() throws Exception {
     final URIBuilder builder =
-            client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Car").appendKeySegment(12);
+            client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Car").appendKeySegment(12);
 
     final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaEntityRequest(builder.build());
     retrieveReq.setFormat(ODataMediaFormat.APPLICATION_XML);
@@ -74,7 +74,7 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
   @Test(expected = ODataClientErrorException.class)
   public void readWithJsonError() throws Exception {
     final URIBuilder builder =
-            client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Car").appendKeySegment(12);
+            client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Car").appendKeySegment(12);
 
     final ODataMediaRequest retrieveReq = client.getRetrieveRequestFactory().getMediaEntityRequest(builder.build());
     retrieveReq.setFormat(ODataMediaFormat.APPLICATION_JSON);
@@ -84,7 +84,7 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
 
   private void updateMediaEntity(final ODataPubFormat format, final int id) throws Exception {
     final URIBuilder builder =
-            client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Car").appendKeySegment(id);
+            client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Car").appendKeySegment(id);
 
     final String TO_BE_UPDATED = "new buffered stream sample";
     final InputStream input = IOUtils.toInputStream(TO_BE_UPDATED);
@@ -115,7 +115,7 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
   }
 
   private void createMediaEntity(final ODataPubFormat format, final InputStream input) throws Exception {
-    final URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Car");
+    final URIBuilder builder = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Car");
 
     final ODataMediaEntityCreateRequest<ODataEntity> createReq =
             client.getCUDRequestFactory().getMediaEntityCreateRequest(builder.build(), input);
@@ -163,7 +163,7 @@ public class MediaEntityTestITCase extends AbstractTestITCase {
 
   @Test
   public void updateNamedStream() throws Exception {
-    URIBuilder builder = client.getURIBuilder(testStaticServiceRootURL).
+    URIBuilder builder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Car").appendKeySegment(16).appendNavigationSegment("Photo");
 
     final String TO_BE_UPDATED = "buffered stream sample";

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v3/OpenTypeTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v3/OpenTypeTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v3/OpenTypeTestITCase.java
index b3490a0..05d8a07 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v3/OpenTypeTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v3/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());
   }
@@ -139,13 +139,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/v3/PrimitiveKeysTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v3/PrimitiveKeysTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v3/PrimitiveKeysTestITCase.java
index 079439b..73c7d9d 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v3/PrimitiveKeysTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v3/PrimitiveKeysTestITCase.java
@@ -34,7 +34,7 @@ public class PrimitiveKeysTestITCase extends AbstractTestITCase {
 
   private void readEntity(final String entityType, final Object key, final ODataPubFormat format) {
     final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(
-            client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment(entityType).
+            client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment(entityType).
             appendKeySegment(key).
             build());
     req.setFormat(format);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v3/PropertyRetrieveTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v3/PropertyRetrieveTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v3/PropertyRetrieveTestITCase.java
index 7e67e54..0904df8 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v3/PropertyRetrieveTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v3/PropertyRetrieveTestITCase.java
@@ -43,7 +43,7 @@ import org.junit.Test;
 public class PropertyRetrieveTestITCase extends AbstractTestITCase {
 
   private void retrievePropertyTest(final ODataFormat format, String entitySegment, String structuralSegment) {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment(entitySegment).appendPropertySegment(structuralSegment);
     final ODataPropertyRequest<ODataProperty> req = client.getRetrieveRequestFactory().
             getPropertyRequest(uriBuilder.build());
@@ -209,7 +209,7 @@ public class PropertyRetrieveTestITCase extends AbstractTestITCase {
 
   @Test
   public void navigationMediaLink() {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendNavigationSegment("Product").appendKeySegment(-7).appendLinksSegment("Photos");
     final ODataEntitySetRequest<ODataEntitySet> req = client.getRetrieveRequestFactory().
             getEntitySetRequest(uriBuilder.build());
@@ -233,7 +233,7 @@ public class PropertyRetrieveTestITCase extends AbstractTestITCase {
 
   @Test
   public void navigationMediaLinkInvalidQuery() {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendNavigationSegment("Product").appendKeySegment(-7).appendLinksSegment("Photo");
     final ODataEntitySetRequest<ODataEntitySet> req = client.getRetrieveRequestFactory().
             getEntitySetRequest(uriBuilder.build());
@@ -257,7 +257,7 @@ public class PropertyRetrieveTestITCase extends AbstractTestITCase {
 
   @Test
   public void navigationMediaLinkInvalidFormat() {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendNavigationSegment("Product").appendKeySegment(-7).appendLinksSegment("Photos");
     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/v3/PropertyTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v3/PropertyTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v3/PropertyTestITCase.java
index c9c1c00..e1fa1d4 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v3/PropertyTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v3/PropertyTestITCase.java
@@ -124,7 +124,7 @@ public class PropertyTestITCase extends AbstractTestITCase {
 
   @Test
   public void readCountValue() throws IOException {
-    final URIBuilder uriBuilder = client.getURIBuilder(getServiceRoot());
+    final URIBuilder uriBuilder = client.newURIBuilder(getServiceRoot());
     uriBuilder.appendEntitySetSegment("Customer").count();
 
     final ODataValueRequest req = client.getRetrieveRequestFactory().getValueRequest(uriBuilder.build());
@@ -143,7 +143,7 @@ public class PropertyTestITCase extends AbstractTestITCase {
 
   @Test
   public void nullNullableProperty() {
-    final ODataDeleteResponse res = client.getCUDRequestFactory().getDeleteRequest(client.getURIBuilder(
+    final ODataDeleteResponse res = client.getCUDRequestFactory().getDeleteRequest(client.newURIBuilder(
             getServiceRoot()).
             appendEntitySetSegment("Order").appendKeySegment(-8).
             appendPropertySegment("CustomerId").appendValueSegment().build()).
@@ -153,7 +153,7 @@ public class PropertyTestITCase extends AbstractTestITCase {
 
   @Test(expected = ODataClientErrorException.class)
   public void nullNonNullableProperty() {
-    client.getCUDRequestFactory().getDeleteRequest(client.getURIBuilder(getServiceRoot()).
+    client.getCUDRequestFactory().getDeleteRequest(client.newURIBuilder(getServiceRoot()).
             appendEntitySetSegment("Driver").appendKeySegment("1").
             appendPropertySegment("BirthDate").appendValueSegment().build()).
             execute();
@@ -162,7 +162,7 @@ public class PropertyTestITCase extends AbstractTestITCase {
   private void updatePropertyValue(final ODataValueFormat format, final UpdateType type)
           throws IOException, EdmPrimitiveTypeException {
 
-    final URIBuilder uriBuilder = client.getURIBuilder(getServiceRoot()).
+    final URIBuilder uriBuilder = client.newURIBuilder(getServiceRoot()).
             appendEntitySetSegment("Customer").appendKeySegment(-9).
             appendPropertySegment("PrimaryContactInfo").
             appendPropertySegment("HomePhone").
@@ -204,7 +204,7 @@ public class PropertyTestITCase extends AbstractTestITCase {
   }
 
   private void updateComplexProperty(final ODataFormat format, final UpdateType type) throws IOException {
-    final URIBuilder uriBuilder = client.getURIBuilder(getServiceRoot()).
+    final URIBuilder uriBuilder = client.newURIBuilder(getServiceRoot()).
             appendEntitySetSegment("Customer").appendKeySegment(-9).appendPropertySegment("PrimaryContactInfo");
 
     ODataPropertyRequest<ODataProperty> retrieveReq = client.getRetrieveRequestFactory().
@@ -251,7 +251,7 @@ public class PropertyTestITCase extends AbstractTestITCase {
   }
 
   private void updateCollectionProperty(final ODataFormat format) throws IOException {
-    final URIBuilder uriBuilder = client.getURIBuilder(getServiceRoot());
+    final URIBuilder uriBuilder = client.newURIBuilder(getServiceRoot());
     uriBuilder.appendEntitySetSegment("Customer").appendKeySegment(-10).
             appendPropertySegment("PrimaryContactInfo").appendPropertySegment("AlternativeNames");
 
@@ -299,7 +299,7 @@ public class PropertyTestITCase extends AbstractTestITCase {
   }
 
   private void updatePrimitiveProperty(final ODataFormat format) throws IOException, EdmPrimitiveTypeException {
-    final URIBuilder uriBuilder = client.getURIBuilder(getServiceRoot());
+    final URIBuilder uriBuilder = client.newURIBuilder(getServiceRoot());
     uriBuilder.appendEntitySetSegment("Customer").appendKeySegment(-9).
             appendPropertySegment("PrimaryContactInfo").
             appendPropertySegment("HomePhone").appendPropertySegment("PhoneNumber");
@@ -344,7 +344,7 @@ public class PropertyTestITCase extends AbstractTestITCase {
   }
 
   private void rawRequest(final ODataFormat format) {
-    final URIBuilder uriBuilder = client.getURIBuilder(getServiceRoot()).
+    final URIBuilder uriBuilder = client.newURIBuilder(getServiceRoot()).
             appendEntitySetSegment("Customer").appendKeySegment(-10).appendPropertySegment("BackupContactInfo");
 
     final ODataRawRequest req = client.getRetrieveRequestFactory().getRawRequest(uriBuilder.build());

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v3/PropertyValueTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v3/PropertyValueTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v3/PropertyValueTestITCase.java
index 4914eb5..2c8c9d9 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v3/PropertyValueTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v3/PropertyValueTestITCase.java
@@ -34,7 +34,7 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
 
   @Test
   public void retrieveIntPropertyValueTest() {
-    CommonURIBuilder<?> uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    CommonURIBuilder<?> uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Product").appendKeySegment(-10).appendPropertySegment("ProductId");
     final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     req.setFormat(ODataValueFormat.TEXT);
@@ -45,7 +45,7 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
 
   @Test
   public void retrieveBooleanPropertyValueTest() {
-    CommonURIBuilder<?> uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    CommonURIBuilder<?> uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Product").appendKeySegment(-10).appendPropertySegment("ProductId");
     final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     req.setFormat(ODataValueFormat.TEXT);
@@ -56,7 +56,7 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
 
   @Test
   public void retrieveStringPropertyValueTest() {
-    CommonURIBuilder<?> uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    CommonURIBuilder<?> uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Product").appendKeySegment(-6).appendPropertySegment("Description");
     final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     req.setFormat(ODataValueFormat.TEXT);
@@ -67,7 +67,7 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
 
   @Test
   public void retrieveDatePropertyValueTest() {
-    CommonURIBuilder<?> uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    CommonURIBuilder<?> uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Product").appendKeySegment(-7).appendPropertySegment(
                     "NestedComplexConcurrency/ModifiedDate");
     final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
@@ -79,7 +79,7 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
 
   @Test
   public void retrieveDecimalPropertyValueTest() {
-    CommonURIBuilder<?> uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    CommonURIBuilder<?> uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Product").appendKeySegment(-6).appendPropertySegment("Dimensions/Height");
     final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
     req.setFormat(ODataValueFormat.TEXT);
@@ -90,7 +90,7 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
 
   @Test
   public void retrieveBinaryPropertyValueTest() throws IOException {
-    CommonURIBuilder<?> uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    CommonURIBuilder<?> uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendNavigationSegment("ProductPhoto(PhotoId=-3,ProductId=-3)").appendPropertySegment("Photo");
     ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
     req.setAccept("application/json");
@@ -105,7 +105,7 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
 
   @Test(expected = ODataClientErrorException.class)
   public void retrieveBinaryPropertyValueTestWithAtom() throws IOException {
-    CommonURIBuilder<?> uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    CommonURIBuilder<?> uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendNavigationSegment("ProductPhoto(PhotoId=-3,ProductId=-3)").appendPropertySegment("Photo");
     ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
     req.setAccept("application/atom+xml");
@@ -120,7 +120,7 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
 
   @Test(expected = IllegalArgumentException.class)
   public void retrieveBinaryPropertyValueTestWithXML() throws IOException {
-    CommonURIBuilder<?> uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    CommonURIBuilder<?> uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendNavigationSegment("ProductPhoto(PhotoId=-3,ProductId=-3)").appendPropertySegment("Photo");
     ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
     req.setAccept("application/xml");
@@ -135,7 +135,7 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
 
   @Test
   public void retrieveCollectionPropertyValueTest() {
-    CommonURIBuilder<?> uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    CommonURIBuilder<?> uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Product").appendKeySegment(-7).appendPropertySegment(
                     "ComplexConcurrency/QueriedDateTime");
     final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());
@@ -149,7 +149,7 @@ public class PropertyValueTestITCase extends AbstractTestITCase {
 
   @Test
   public void retrieveNullPropertyValueTest() {
-    CommonURIBuilder<?> uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    CommonURIBuilder<?> uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Product").appendKeySegment(-10).appendPropertySegment(
                     "ComplexConcurrency/Token");
     final ODataValueRequest req = client.getRetrieveRequestFactory().getPropertyValueRequest(uriBuilder.build());

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v3/QueryOptionsTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v3/QueryOptionsTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v3/QueryOptionsTestITCase.java
index 72ea453..1c0f8bd 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v3/QueryOptionsTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v3/QueryOptionsTestITCase.java
@@ -60,7 +60,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("Car").filter("(VIN lt 16)");
 
     // 1. check that filtered entity set looks as expected
@@ -100,7 +100,7 @@ public class QueryOptionsTestITCase extends AbstractTestITCase {
    */
   @Test
   public void format() {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Customer").appendKeySegment(-10).format("json");
 
     final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
@@ -135,7 +135,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("Customer").skipToken("-10");
 
     final ODataEntitySetRequest<ODataEntitySet> req = client.getRetrieveRequestFactory().
@@ -154,7 +154,7 @@ public class QueryOptionsTestITCase extends AbstractTestITCase {
    */
   @Test
   public void inlinecount() {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Car").
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Car").
             inlineCount(InlineCount.allpages);
 
     final ODataEntitySetRequest<ODataEntitySet> req = client.getRetrieveRequestFactory().
@@ -170,7 +170,7 @@ public class QueryOptionsTestITCase extends AbstractTestITCase {
    */
   @Test
   public void select() {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Customer").appendKeySegment(-10).select("CustomerId,Orders").expand("Orders");
 
     final ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());
@@ -182,7 +182,7 @@ public class QueryOptionsTestITCase extends AbstractTestITCase {
 
   @Test
   public void issue131() {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Customer").appendKeySegment(-7).select("Name");
 
     ODataEntityRequest<ODataEntity> req = client.getRetrieveRequestFactory().getEntityRequest(uriBuilder.build());

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v4/AbstractTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/AbstractTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/AbstractTestITCase.java
index 8fed8f7..32a6e19 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/AbstractTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/AbstractTestITCase.java
@@ -131,7 +131,7 @@ public abstract class AbstractTestITCase extends AbstractBaseTestITCase {
     order.getProperties().add(orderShelfLifes);
 
     final ODataEntityCreateRequest<ODataEntity> req = getClient().getCUDRequestFactory().getEntityCreateRequest(
-            getClient().getURIBuilder(testStaticServiceRootURL).
+            getClient().newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Orders").build(), order);
     req.setFormat(format);
     final ODataEntity created = req.execute().getBody();
@@ -139,7 +139,7 @@ public abstract class AbstractTestITCase extends AbstractBaseTestITCase {
     assertEquals(2, created.getProperty("OrderShelfLifes").getCollectionValue().size());
 
     final URI deleteURI = created.getEditLink() == null
-            ? getClient().getURIBuilder(testStaticServiceRootURL).
+            ? getClient().newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Orders").appendKeySegment(id).build()
             : created.getEditLink();
     final ODataDeleteRequest deleteReq = getClient().getCUDRequestFactory().getDeleteRequest(deleteURI);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v4/AsyncTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/AsyncTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/AsyncTestITCase.java
index bff5993..edeeae5 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/AsyncTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/AsyncTestITCase.java
@@ -46,7 +46,7 @@ public class AsyncTestITCase extends AbstractTestITCase {
 
   @Test
   public void clientAsync() throws InterruptedException, ExecutionException {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("Customers");
     final Future<ODataRetrieveResponse<ODataEntitySet>> futureRes =
             client.getRetrieveRequestFactory().getEntitySetRequest(uriBuilder.build()).asyncExecute();
@@ -63,7 +63,7 @@ public class AsyncTestITCase extends AbstractTestITCase {
   }
 
   private void withInlineEntry(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().getEntityRequest(uriBuilder.build());
@@ -130,7 +130,7 @@ public class AsyncTestITCase extends AbstractTestITCase {
   }
 
   private void asyncOrders(final ODataPubFormat format) {
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).
             appendEntitySetSegment("async").appendEntitySetSegment("Orders");
 
     final ODataEntitySetRequest<ODataEntitySet> req =

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/35e89699/fit/src/test/java/org/apache/olingo/fit/v4/BatchTestITCase.java
----------------------------------------------------------------------
diff --git a/fit/src/test/java/org/apache/olingo/fit/v4/BatchTestITCase.java b/fit/src/test/java/org/apache/olingo/fit/v4/BatchTestITCase.java
index ef568b8..daf4ed2 100644
--- a/fit/src/test/java/org/apache/olingo/fit/v4/BatchTestITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/v4/BatchTestITCase.java
@@ -122,7 +122,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     URIBuilder targetURI;
     ODataEntityCreateRequest<ODataEntity> createReq;
 
-    targetURI = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Orders");
+    targetURI = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Orders");
     for (int i = 1; i <= 2; i++) {
       // Create Customer into the changeset
       createReq = client.getCUDRequestFactory().getEntityCreateRequest(targetURI.build(), newOrder(100 + i));
@@ -130,12 +130,12 @@ public class BatchTestITCase extends AbstractTestITCase {
       changeset.addRequest(createReq);
     }
 
-    targetURI = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("WrongEntitySet");
+    targetURI = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("WrongEntitySet");
     createReq = client.getCUDRequestFactory().getEntityCreateRequest(targetURI.build(), newOrder(105));
     createReq.setFormat(ODataPubFormat.JSON);
     changeset.addRequest(createReq);
 
-    targetURI = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Orders");
+    targetURI = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Orders");
     for (int i = 3; i <= 4; i++) {
       // Create Customer into the changeset
       createReq = client.getCUDRequestFactory().getEntityCreateRequest(targetURI.build(), newOrder(100 + i));
@@ -184,7 +184,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     // Add retrieve item
     // -------------------------------------------
     // prepare URI
-    URIBuilder targetURI = client.getURIBuilder(testStaticServiceRootURL);
+    URIBuilder targetURI = client.newURIBuilder(testStaticServiceRootURL);
     targetURI.appendEntitySetSegment("UnexistinfEntitySet").appendKeySegment(1);
 
     // create new request
@@ -198,7 +198,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     // Add retrieve item
     // -------------------------------------------
     // prepare URI
-    targetURI = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customers").appendKeySegment(1);
+    targetURI = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customers").appendKeySegment(1);
 
     // create new request
     queryReq = client.getRetrieveRequestFactory().getEntityRequest(targetURI.build());
@@ -243,7 +243,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     final ODataChangeset changeset = streamManager.addChangeset();
     ODataEntity order = newOrder(20);
 
-    final URIBuilder uriBuilder = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Orders");
+    final URIBuilder uriBuilder = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Orders");
 
     // add create request
     final ODataEntityCreateRequest<ODataEntity> createReq =
@@ -258,7 +258,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     final ODataEntity customerChanges = client.getObjectFactory().newEntity(order.getTypeName());
     customerChanges.addLink(client.getObjectFactory().newEntitySetNavigationLink(
             "OrderDetails",
-            client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("OrderDetails").
+            client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("OrderDetails").
             appendKeySegment(new HashMap<String, Object>() {
       private static final long serialVersionUID = 3109256773218160485L;
 
@@ -328,7 +328,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     // Add retrieve item
     // -------------------------------------------
     // prepare URI
-    URIBuilder targetURI = client.getURIBuilder(testStaticServiceRootURL);
+    URIBuilder targetURI = client.newURIBuilder(testStaticServiceRootURL);
     targetURI.appendEntitySetSegment("Customers").appendKeySegment(1).
             expand("Orders").select("PersonID,Orders/OrderID");
 
@@ -343,7 +343,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     // Add new order with outside item
     // -------------------------------------------
     // prepare URI
-    targetURI = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Orders");
+    targetURI = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Orders");
     final ODataEntity original = newOrder(2000);
     final ODataEntityCreateRequest<ODataEntity> createReq =
             client.getCUDRequestFactory().getEntityCreateRequest(targetURI.build(), original);
@@ -396,7 +396,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     // Add retrieve item
     // -------------------------------------------
     // prepare URI
-    URIBuilder targetURI = client.getURIBuilder(testStaticServiceRootURL);
+    URIBuilder targetURI = client.newURIBuilder(testStaticServiceRootURL);
     targetURI.appendEntitySetSegment("Customers").appendKeySegment(1);
 
     // create new request
@@ -412,7 +412,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     final ODataChangeset changeset = streamManager.addChangeset();
 
     // Update Customer into the changeset
-    targetURI = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customers").appendKeySegment(1);
+    targetURI = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customers").appendKeySegment(1);
     final URI editLink = targetURI.build();
 
     final ODataEntity patch = client.getObjectFactory().newEntity(
@@ -430,7 +430,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     changeset.addRequest(changeReq);
 
     // Create Order into the changeset
-    targetURI = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Orders");
+    targetURI = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Orders");
     final ODataEntity original = newOrder(1000);
     final ODataEntityCreateRequest<ODataEntity> createReq =
             client.getCUDRequestFactory().getEntityCreateRequest(targetURI.build(), original);
@@ -442,7 +442,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     // Add retrieve item
     // -------------------------------------------
     // prepare URI
-    targetURI = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customers").appendKeySegment(1);
+    targetURI = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customers").appendKeySegment(1);
 
     // create new request
     queryReq = client.getRetrieveRequestFactory().getEntityRequest(targetURI.build());
@@ -520,7 +520,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     // Add retrieve item
     // -------------------------------------------
     // prepare URI
-    URIBuilder targetURI = client.getURIBuilder(testStaticServiceRootURL);
+    URIBuilder targetURI = client.newURIBuilder(testStaticServiceRootURL);
     targetURI.appendEntitySetSegment("People").appendKeySegment(5);
 
     // create new request
@@ -534,7 +534,7 @@ public class BatchTestITCase extends AbstractTestITCase {
     // Add retrieve item
     // -------------------------------------------
     // prepare URI
-    targetURI = client.getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customers").appendKeySegment(1);
+    targetURI = client.newURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Customers").appendKeySegment(1);
 
     // create new request
     queryReq = client.getRetrieveRequestFactory().getEntityRequest(targetURI.build());