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

[1/3] git commit: [OLINGO-234] Adding operation import test IT case relying on external service, conditionally enabled - waiting for fit

Repository: olingo-odata4
Updated Branches:
  refs/heads/master 4f59dba76 -> 7104c65f8


[OLINGO-234] Adding operation import test IT case relying on external service, conditionally enabled - waiting for fit


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

Branch: refs/heads/master
Commit: 86a7dffdba436109a29ecf23b3f729d04ff8876f
Parents: 4f59dba
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Tue Apr 8 16:09:55 2014 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Tue Apr 8 16:09:55 2014 +0200

----------------------------------------------------------------------
 .../client/core/it/v4/AbstractTestITCase.java   |   4 +
 .../it/v4/OperationImportInvokeTestITCase.java  | 301 +++++++++++++++++++
 2 files changed, 305 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86a7dffd/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/AbstractTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/AbstractTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/AbstractTestITCase.java
index 28cb871..edab2dd 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/AbstractTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/AbstractTestITCase.java
@@ -22,9 +22,13 @@ import java.io.IOException;
 import org.apache.olingo.client.api.v4.ODataClient;
 import org.apache.olingo.client.core.ODataClientFactory;
 import org.junit.BeforeClass;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public abstract class AbstractTestITCase {
 
+  protected static final Logger LOG = LoggerFactory.getLogger(AbstractTestITCase.class);
+
   protected static ODataClient client;
 
   protected static String testStaticServiceRootURL;

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/86a7dffd/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/OperationImportInvokeTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/OperationImportInvokeTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/OperationImportInvokeTestITCase.java
new file mode 100644
index 0000000..91ddf22
--- /dev/null
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/OperationImportInvokeTestITCase.java
@@ -0,0 +1,301 @@
+/*
+ * 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.it.v4;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import org.apache.commons.io.IOUtils;
+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.ODataCollectionValue;
+import org.apache.olingo.commons.api.domain.ODataComplexValue;
+import org.apache.olingo.commons.api.domain.ODataPrimitiveValue;
+import org.apache.olingo.commons.api.domain.ODataValue;
+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.edm.EdmPrimitiveTypeKind;
+import org.apache.olingo.commons.api.format.ODataPubFormat;
+import org.junit.Assume;
+import org.junit.BeforeClass;
+
+import org.junit.Test;
+
+public class OperationImportInvokeTestITCase extends AbstractTestITCase {
+
+  private static final String serviceRoot = "http://odatae2etest.azurewebsites.net/javatest/DefaultService";
+
+  // TODO: remove once fit provides function / action imports
+  @BeforeClass
+  public static void checkServerIsOnline() throws IOException {
+    Socket socket = new Socket();
+    boolean reachable = false;
+    try {
+      socket.connect(new InetSocketAddress("odatae2etest.azurewebsites.net", 80), 2000);
+      reachable = true;
+    } catch (Exception e) {
+      LOG.warn("External test service not reachable, ignoring this whole class: {}",
+              OperationImportInvokeTestITCase.class.getName());
+    } finally {
+      IOUtils.closeQuietly(socket);
+    }
+    Assume.assumeTrue(reachable);
+  }
+
+  public Edm getEdm() {
+    final Edm edm = getClient().getRetrieveRequestFactory().
+            getMetadataRequest(serviceRoot).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(serviceRoot).
+                    appendOperationCallSegment(funcImp.getName()).build(),
+                    funcImp.getUnboundFunctions().get(0));
+    defaultColorReq.setFormat(format);
+    final ODataProperty defaultColor = defaultColorReq.execute().getBody();
+    assertNotNull(defaultColor);
+    assertTrue(defaultColor.hasEnumValue());
+    assertEquals("Red", defaultColor.getEnumValue().getValue());
+    assertEquals("Microsoft.Test.OData.Services.ODataWCFService.Color", defaultColor.getEnumValue().getTypeName());
+
+    // GetPerson2
+    funcImp = container.getFunctionImport("GetPerson2");
+
+    final ODataPrimitiveValue city =
+            getClient().getObjectFactory().newPrimitiveValueBuilder().setText("London").build();
+
+    final ODataInvokeRequest<ODataEntity> person2Req = getClient().getInvokeRequestFactory().
+            getInvokeRequest(getClient().getURIBuilder(serviceRoot).
+                    appendOperationCallSegment(funcImp.getName()).build(),
+                    funcImp.getUnboundFunctions().get(0),
+                    Collections.<String, ODataValue>singletonMap("city", city));
+    person2Req.setFormat(format);
+    final ODataEntity person2 = person2Req.execute().getBody();
+    assertNotNull(person2);
+    assertEquals("#Microsoft.Test.OData.Services.ODataWCFService.Customer", person2.getName());
+    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",
+            client.getObjectFactory().newPrimitiveValueBuilder().setText("1 Microsoft Way").build()));
+    address.add(client.getObjectFactory().newPrimitiveProperty("City",
+            client.getObjectFactory().newPrimitiveValueBuilder().setText("London").build()));
+    address.add(client.getObjectFactory().newPrimitiveProperty("PostalCode",
+            client.getObjectFactory().newPrimitiveValueBuilder().setText("98052").build()));
+
+    final ODataInvokeRequest<ODataEntity> personReq = getClient().getInvokeRequestFactory().
+            getInvokeRequest(getClient().getURIBuilder(serviceRoot).
+                    appendOperationCallSegment(funcImp.getName()).build(),
+                    funcImp.getUnboundFunctions().get(0),
+                    Collections.<String, ODataValue>singletonMap("address", address));
+    personReq.setFormat(format);
+    //TODO test service doesn't support yet complex and collection values as inline parameters
+    try {
+      final ODataEntity person = personReq.execute().getBody();
+      assertNotNull(person);
+    } catch (Exception e) {
+      // ignore
+    }
+
+    // GetAllProducts
+    funcImp = container.getFunctionImport("GetAllProducts");
+
+    final ODataInvokeRequest<ODataEntitySet> productsReq = getClient().getInvokeRequestFactory().
+            getInvokeRequest(getClient().getURIBuilder(serviceRoot).
+                    appendOperationCallSegment(funcImp.getName()).build(),
+                    funcImp.getUnboundFunctions().get(0));
+    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(serviceRoot).
+                    appendOperationCallSegment(funcImp.getName()).build(),
+                    funcImp.getUnboundFunctions().get(0),
+                    Collections.<String, ODataValue>singletonMap("accessLevel", accessLevel));
+    prodByALReq.setFormat(format);
+    final ODataProperty prodByAL = prodByALReq.execute().getBody();
+    assertNotNull(prodByAL);
+    assertTrue(prodByAL.hasCollectionValue());
+    assertEquals(5, prodByAL.getCollectionValue().size());
+    assertTrue(prodByAL.getCollectionValue().asJavaCollection().contains("Car"));
+  }
+
+  @Test
+  public void atomFunctionImports() throws EdmPrimitiveTypeException {
+    functionImports(ODataPubFormat.ATOM);
+  }
+
+  @Test
+  public void jsonFunctionImports() throws EdmPrimitiveTypeException {
+    functionImports(ODataPubFormat.JSON_FULL_METADATA);
+  }
+
+  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().
+            setType(EdmPrimitiveTypeKind.Int32).setValue(22).build();
+    final ODataInvokeRequest<ODataNoContent> discountReq = getClient().getInvokeRequestFactory().
+            getInvokeRequest(getClient().getURIBuilder(serviceRoot).
+                    appendOperationCallSegment(actImp.getName()).build(),
+                    actImp.getUnboundAction(),
+                    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",
+            client.getObjectFactory().newPrimitiveValueBuilder().setText("Via Le Mani Dal Naso, 666").build()));
+    address.add(client.getObjectFactory().newPrimitiveProperty("City",
+            client.getObjectFactory().newPrimitiveValueBuilder().setText("Tollo").build()));
+    address.add(client.getObjectFactory().newPrimitiveProperty("PostalCode",
+            client.getObjectFactory().newPrimitiveValueBuilder().setText("66010").build()));
+
+    final ODataInvokeRequest<ODataProperty> resetBossAddressReq = getClient().getInvokeRequestFactory().
+            getInvokeRequest(getClient().getURIBuilder(serviceRoot).
+                    appendOperationCallSegment(actImp.getName()).build(),
+                    actImp.getUnboundAction(),
+                    Collections.<String, ODataValue>singletonMap("address", address));
+    resetBossAddressReq.setFormat(format);
+    final ODataProperty resetBossAddress = resetBossAddressReq.execute().getBody();
+    assertNotNull(resetBossAddress);
+  }
+
+  @Test
+  public void atomActionImports() {
+    //TODO test service doesn't support yet Atom POST params
+    try {
+      actionImports(ODataPubFormat.ATOM);
+    } catch (Exception e) {
+      // ignore
+    }
+  }
+
+  @Test
+  public void jsonActionImports() {
+    actionImports(ODataPubFormat.JSON_FULL_METADATA);
+  }
+
+  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(
+                    EdmPrimitiveTypeKind.String.getFullQualifiedName().toString());
+    emails.add(getClient().getObjectFactory().newPrimitiveValueBuilder().setValue("first@olingo.apache.org").build());
+    emails.add(getClient().getObjectFactory().newPrimitiveValueBuilder().setValue("second@olingo.apache.org").build());
+    ODataInvokeRequest<ODataProperty> bossEmailsReq = getClient().getInvokeRequestFactory().
+            getInvokeRequest(getClient().getURIBuilder(serviceRoot).
+                    appendOperationCallSegment(actImp.getName()).build(),
+                    actImp.getUnboundAction(),
+                    Collections.<String, ODataValue>singletonMap("emails", emails));
+    bossEmailsReq.setFormat(format);
+    final ODataProperty bossEmails = bossEmailsReq.execute().getBody();
+    assertNotNull(bossEmails);
+    assertTrue(bossEmails.hasCollectionValue());
+    assertEquals(2, bossEmails.getCollectionValue().size());
+
+    EdmFunctionImport funcImp = container.getFunctionImport("GetBossEmails");
+
+    final Map<String, ODataValue> params = new LinkedHashMap<String, ODataValue>(2);
+    params.put("start", getClient().getObjectFactory().newPrimitiveValueBuilder().
+            setType(EdmPrimitiveTypeKind.Int32).setValue(0).build());
+    params.put("count", getClient().getObjectFactory().newPrimitiveValueBuilder().
+            setType(EdmPrimitiveTypeKind.Int32).setValue(100).build());
+    bossEmailsReq = getClient().getInvokeRequestFactory().
+            getInvokeRequest(getClient().getURIBuilder(serviceRoot).
+                    appendOperationCallSegment(funcImp.getName()).build(),
+                    funcImp.getUnboundFunctions().get(0),
+                    params);
+    bossEmailsReq.setFormat(format);
+    final ODataProperty bossEmailsViaGET = bossEmailsReq.execute().getBody();
+    assertNotNull(bossEmailsViaGET);
+    assertTrue(bossEmailsViaGET.hasCollectionValue());
+    assertEquals(2, bossEmailsViaGET.getCollectionValue().size());
+    assertEquals(bossEmails, bossEmailsViaGET);
+  }
+
+  @Test
+  public void atomBossEmails() throws EdmPrimitiveTypeException {
+    //TODO test service doesn't support yet Atom POST params
+    try {
+      bossEmails(ODataPubFormat.ATOM);
+    } catch (Exception e) {
+      // ignore
+    }
+  }
+
+  @Test
+  public void jsonBossEmails() throws EdmPrimitiveTypeException {
+    bossEmails(ODataPubFormat.JSON_FULL_METADATA);
+  }
+
+}


[2/3] git commit: Small fixes and utility methods

Posted by il...@apache.org.
Small fixes and utility methods


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

Branch: refs/heads/master
Commit: d3b513cfb58380c4168658ad41c6b96673be9294
Parents: 86a7dff
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Wed Apr 9 14:09:53 2014 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Wed Apr 9 14:09:53 2014 +0200

----------------------------------------------------------------------
 .../invoke/v4/ODataInvokeRequestImpl.java       |   2 -
 .../olingo/client/core/edm/EdmClientImpl.java   |  12 +-
 .../olingo/client/core/edm/EdmSchemaImpl.java   |  10 +-
 .../client/core/it/v3/AbstractTestITCase.java   |  20 +--
 .../core/it/v3/ActionOverloadingTestITCase.java |   4 +-
 .../core/it/v3/EntityCreateTestITCase.java      |  31 ++--
 .../core/it/v3/EntityUpdateTestITCase.java      |   4 +-
 .../client/core/it/v3/InvokeTestITCase.java     |  18 +--
 .../core/it/v4/EntityCreateTestITCase.java      |   3 +-
 .../it/v4/OperationImportInvokeTestITCase.java  |  31 ++--
 .../olingo/commons/api/domain/ODataItem.java    |  12 +-
 .../olingo/commons/api/domain/ODataLink.java    |   2 +-
 .../commons/api/domain/ODataPrimitiveValue.java |  13 ++
 .../commons/api/edm/EdmEntityContainer.java     |   5 +
 .../apache/olingo/commons/api/edm/EdmType.java  |   5 +
 .../commons/api/edm/FullQualifiedName.java      |  17 ++-
 .../apache/olingo/commons/api/edm/Target.java   |  12 +-
 .../domain/AbstractODataPrimitiveValue.java     |  32 +++++
 .../core/edm/AbstractEdmEntityContainer.java    |   5 +
 .../commons/core/edm/AbstractEdmOperation.java  | 140 +++++++++----------
 .../commons/core/edm/AbstractEdmSchema.java     |   2 +-
 .../core/edm/AbstractEdmTypeDefinition.java     |   5 +
 .../olingo/commons/core/edm/EdmNamedImpl.java   |  20 +--
 .../olingo/commons/core/edm/EdmTypeImpl.java    |   6 +
 .../primitivetype/AbstractPrimitiveType.java    |  15 +-
 25 files changed, 233 insertions(+), 193 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d3b513cf/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/ODataInvokeRequestImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/ODataInvokeRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/ODataInvokeRequestImpl.java
index a59b727..1bd0bbd 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/ODataInvokeRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/v4/ODataInvokeRequestImpl.java
@@ -57,8 +57,6 @@ public class ODataInvokeRequestImpl<T extends ODataInvokeResult> extends Abstrac
     String baseURI = this.uri.toASCIIString();
     if (baseURI.endsWith("()")) {
       baseURI = baseURI.substring(0, baseURI.length() - 2);
-    } else if (!baseURI.endsWith("(")) {
-      baseURI = baseURI.substring(0, baseURI.length() - 1);
     }
 
     final StringBuilder inlineParams = new StringBuilder();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d3b513cf/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmClientImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmClientImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmClientImpl.java
index 21a1dbf..1e16adb 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmClientImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmClientImpl.java
@@ -305,7 +305,8 @@ public class EdmClientImpl extends AbstractEdm {
           final EdmTypeInfo boundParam = new EdmTypeInfo.Builder().setEdm(this).
                   setTypeExpression(action.getParameters().get(0).getType()).build();
           if (bindingParameterTypeName.equals(boundParam.getFullQualifiedName())
-                  && isBindingParameterCollection.booleanValue() == boundParam.isCollection()) {
+                  && (isBindingParameterCollection == null
+                  || isBindingParameterCollection.booleanValue() == boundParam.isCollection())) {
 
             found = true;
             result = EdmActionImpl.getInstance(this, actionName, action);
@@ -324,7 +325,8 @@ public class EdmClientImpl extends AbstractEdm {
             final EdmTypeInfo boundParam = new EdmTypeInfo.Builder().setEdm(this).
                     setTypeExpression(functionImport.getParameters().get(0).getType()).build();
             if (bindingParameterTypeName.equals(boundParam.getFullQualifiedName())
-                    && isBindingParameterCollection.booleanValue() == boundParam.isCollection()) {
+                    && (isBindingParameterCollection == null
+                    || isBindingParameterCollection.booleanValue() == boundParam.isCollection())) {
 
               found = true;
               result = EdmActionProxy.getInstance(this, actionName, functionImport);
@@ -355,7 +357,8 @@ public class EdmClientImpl extends AbstractEdm {
           final EdmTypeInfo boundParam = new EdmTypeInfo.Builder().setEdm(this).
                   setTypeExpression(function.getParameters().get(0).getType()).build();
           if (bindingParameterTypeName.equals(boundParam.getFullQualifiedName())
-                  && isBindingParameterCollection.booleanValue() == boundParam.isCollection()) {
+                  && (isBindingParameterCollection == null
+                  || isBindingParameterCollection.booleanValue() == boundParam.isCollection())) {
 
             final Set<String> functionParamNames = new HashSet<String>();
             for (CommonParameter param : function.getParameters()) {
@@ -380,7 +383,8 @@ public class EdmClientImpl extends AbstractEdm {
             final EdmTypeInfo boundParam = new EdmTypeInfo.Builder().setEdm(this).
                     setTypeExpression(functionImport.getParameters().get(0).getType()).build();
             if (bindingParameterTypeName.equals(boundParam.getFullQualifiedName())
-                    && isBindingParameterCollection.booleanValue() == boundParam.isCollection()) {
+                    && (isBindingParameterCollection == null
+                    || isBindingParameterCollection.booleanValue() == boundParam.isCollection())) {
 
               final Set<String> functionParamNames = new HashSet<String>();
               for (CommonParameter param : functionImport.getParameters()) {

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d3b513cf/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmSchemaImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmSchemaImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmSchemaImpl.java
index 0d5a936..5ee3461 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmSchemaImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmSchemaImpl.java
@@ -76,17 +76,13 @@ public class EdmSchemaImpl extends AbstractEdmSchema {
       if (schema instanceof org.apache.olingo.client.api.edm.xml.v4.Schema) {
         entityContainers = super.getEntityContainers();
         entityContainerByName = new HashMap<FullQualifiedName, EdmEntityContainer>();
-        entityContainerByName.put(
-                new FullQualifiedName(getEntityContainer().getNamespace(), getEntityContainer().getName()),
-                getEntityContainer());
+        entityContainerByName.put(getEntityContainer().getFullQualifiedName(), getEntityContainer());
       } else {
         entityContainers = new ArrayList<EdmEntityContainer>(schema.getEntityContainers().size());
         for (EntityContainer entityContainer : schema.getEntityContainers()) {
           final EdmEntityContainer edmContainer = createEntityContainer(entityContainer.getName());
-          final FullQualifiedName fqn = new FullQualifiedName(edmContainer.getNamespace(), edmContainer.getName());
-
           entityContainers.add(edmContainer);
-          entityContainerByName.put(fqn, edmContainer);
+          entityContainerByName.put(edmContainer.getFullQualifiedName(), edmContainer);
         }
       }
     }
@@ -127,7 +123,7 @@ public class EdmSchemaImpl extends AbstractEdmSchema {
       if (providerTypeDefinitions != null) {
         for (TypeDefinition def : providerTypeDefinitions) {
           typeDefinitions.add(
-                  new EdmTypeDefinitionImpl(version, edm, new FullQualifiedName("namespace", def.getName()), def));
+                  new EdmTypeDefinitionImpl(version, edm, new FullQualifiedName(namespace, def.getName()), def));
         }
       }
     }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d3b513cf/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java
index bee2500..0ca15c1 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/AbstractTestITCase.java
@@ -238,8 +238,7 @@ public abstract class AbstractTestITCase {
 
     getClient().getBinder().add(entity,
             getClient().getObjectFactory().newPrimitiveProperty("Information",
-                    getClient().getObjectFactory().newPrimitiveValueBuilder().setText(sampleinfo).
-                    setType(EdmPrimitiveTypeKind.String).build()));
+                    getClient().getObjectFactory().newPrimitiveValueBuilder().buildString(sampleinfo)));
 
     return entity;
   }
@@ -253,14 +252,12 @@ public abstract class AbstractTestITCase {
     // add name attribute
     getClient().getBinder().add(entity,
             getClient().getObjectFactory().newPrimitiveProperty("Name",
-                    getClient().getObjectFactory().newPrimitiveValueBuilder().setText(sampleName).
-                    setType(EdmPrimitiveTypeKind.String).build()));
+                    getClient().getObjectFactory().newPrimitiveValueBuilder().buildString(sampleName)));
 
     // add key attribute
     getClient().getBinder().add(entity,
             getClient().getObjectFactory().newPrimitiveProperty("CustomerId",
-                    getClient().getObjectFactory().newPrimitiveValueBuilder().setText(String.valueOf(id)).
-                    setType(EdmPrimitiveTypeKind.Int32).build()));
+                    getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(id)));
 
     // add BackupContactInfo attribute (collection)
     final ODataCollectionValue<ODataValue> backupContactInfoValue = getClient().getObjectFactory().newCollectionValue(
@@ -276,15 +273,13 @@ public abstract class AbstractTestITCase {
     // add BackupContactInfo.ContactDetails.AlternativeNames attribute (collection)
     final ODataCollectionValue<ODataValue> altNamesValue = getClient().getObjectFactory().
             newCollectionValue("Collection(Edm.String)");
-    altNamesValue.add(getClient().getObjectFactory().newPrimitiveValueBuilder().
-            setText("myname").setType(EdmPrimitiveTypeKind.String).build());
+    altNamesValue.add(getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("myname"));
     contactDetails.add(getClient().getObjectFactory().newCollectionProperty("AlternativeNames", altNamesValue));
 
     // add BackupContactInfo.ContactDetails.EmailBag attribute (collection)
     final ODataCollectionValue<ODataValue> emailBagValue = getClient().getObjectFactory().
             newCollectionValue("Collection(Edm.String)");
-    emailBagValue.add(getClient().getObjectFactory().newPrimitiveValueBuilder().
-            setText("myname@mydomain.com").setType(EdmPrimitiveTypeKind.String).build());
+    emailBagValue.add(getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("myname@mydomain.com"));
     contactDetails.add(getClient().getObjectFactory().newCollectionProperty("EmailBag", emailBagValue));
 
     // add BackupContactInfo.ContactDetails.ContactAlias attribute (complex)
@@ -295,8 +290,7 @@ public abstract class AbstractTestITCase {
     // add BackupContactInfo.ContactDetails.ContactAlias.AlternativeNames attribute (collection)
     final ODataCollectionValue<ODataValue> aliasAltNamesValue = getClient().getObjectFactory().
             newCollectionValue("Collection(Edm.String)");
-    aliasAltNamesValue.add(getClient().getObjectFactory().newPrimitiveValueBuilder().
-            setText("myAlternativeName").setType(EdmPrimitiveTypeKind.String).build());
+    aliasAltNamesValue.add(getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("myAlternativeName"));
     contactAliasValue.add(getClient().getObjectFactory().newCollectionProperty("AlternativeNames", aliasAltNamesValue));
 
     if (withInlineInfo) {
@@ -545,7 +539,7 @@ public abstract class AbstractTestITCase {
 
     getClient().getBinder().add(changes,
             getClient().getObjectFactory().newPrimitiveProperty(propertyName,
-                    getClient().getObjectFactory().newPrimitiveValueBuilder().setText(newm).build()));
+                    getClient().getObjectFactory().newPrimitiveValueBuilder().buildString(newm)));
 
     update(type, changes, format, etag);
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d3b513cf/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/ActionOverloadingTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/ActionOverloadingTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/ActionOverloadingTestITCase.java
index 1031fbe..4273a9c 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/ActionOverloadingTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/ActionOverloadingTestITCase.java
@@ -37,7 +37,6 @@ 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.EdmPrimitiveTypeKind;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.core.edm.primitivetype.EdmInt32;
 import org.junit.Test;
@@ -132,8 +131,7 @@ public class ActionOverloadingTestITCase extends AbstractTestITCase {
     for (EdmActionImport actImp : container.getActionImports()) {
       if ("IncreaseSalaries".equals(actImp.getName())) {
         final Map<String, ODataValue> parameters = new LinkedHashMap<String, ODataValue>(1);
-        parameters.put("n", getClient().getObjectFactory().newPrimitiveValueBuilder().
-                setType(EdmPrimitiveTypeKind.Int32).setValue(5).build());
+        parameters.put("n", getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(5));
 
         // 1. bound to employees
         final EdmAction employeeBound = edm.getBoundAction(

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d3b513cf/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityCreateTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityCreateTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityCreateTestITCase.java
index f89be63..ef1ac85 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityCreateTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityCreateTestITCase.java
@@ -43,7 +43,6 @@ 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.EdmPrimitiveTypeException;
-import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
@@ -292,12 +291,10 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
 
       getClient().getBinder().add(order,
               client.getObjectFactory().newPrimitiveProperty("OrderId",
-                      client.getObjectFactory().newPrimitiveValueBuilder().setValue(key).
-                      setType(EdmPrimitiveTypeKind.Int32).build()));
+                      client.getObjectFactory().newPrimitiveValueBuilder().buildInt32(key)));
       getClient().getBinder().add(order,
               client.getObjectFactory().newPrimitiveProperty("CustomerId",
-                      client.getObjectFactory().newPrimitiveValueBuilder().setValue(id).
-                      setType(EdmPrimitiveTypeKind.Int32).build()));
+                      client.getObjectFactory().newPrimitiveValueBuilder().buildInt32(id)));
 
       final ODataEntityCreateRequest<ODataEntity> createReq = client.getCUDRequestFactory().getEntityCreateRequest(
               client.getURIBuilder(getServiceRoot()).appendEntitySetSegment("Order").build(), order);
@@ -392,12 +389,10 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
             "Microsoft.Test.OData.Services.AstoriaDefaultService.Order");
     getClient().getBinder().add(order,
             client.getObjectFactory().newPrimitiveProperty("CustomerId",
-                    client.getObjectFactory().newPrimitiveValueBuilder().setValue(id).
-                    setType(EdmPrimitiveTypeKind.Int32).build()));
+                    client.getObjectFactory().newPrimitiveValueBuilder().buildInt32(id)));
     getClient().getBinder().add(order,
             client.getObjectFactory().newPrimitiveProperty("OrderId",
-                    client.getObjectFactory().newPrimitiveValueBuilder().setValue(id).
-                    setType(EdmPrimitiveTypeKind.Int32).build()));
+                    client.getObjectFactory().newPrimitiveValueBuilder().buildInt32(id)));
 
     order.addLink(client.getObjectFactory().newEntityNavigationLink(
             "Customer", URIUtils.getURI(getServiceRoot(), customer.getEditLink().toASCIIString())));
@@ -454,28 +449,22 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
 
     getClient().getBinder().add(message,
             client.getObjectFactory().newPrimitiveProperty("MessageId",
-                    client.getObjectFactory().newPrimitiveValueBuilder().setValue(1000).
-                    setType(EdmPrimitiveTypeKind.Int32).build()));
+                    client.getObjectFactory().newPrimitiveValueBuilder().buildInt32(1000)));
     getClient().getBinder().add(message,
             client.getObjectFactory().newPrimitiveProperty("FromUsername",
-                    client.getObjectFactory().newPrimitiveValueBuilder().setValue("1").
-                    setType(EdmPrimitiveTypeKind.String).build()));
+                    client.getObjectFactory().newPrimitiveValueBuilder().buildString("1")));
     getClient().getBinder().add(message,
             client.getObjectFactory().newPrimitiveProperty("ToUsername",
-                    client.getObjectFactory().newPrimitiveValueBuilder().setValue("xlodhxzzusxecbzptxlfxprneoxkn").
-                    setType(EdmPrimitiveTypeKind.String).build()));
+                    client.getObjectFactory().newPrimitiveValueBuilder().buildString("xlodhxzzusxecbzptxlfxprneoxkn")));
     getClient().getBinder().add(message,
             client.getObjectFactory().newPrimitiveProperty("Subject",
-                    client.getObjectFactory().newPrimitiveValueBuilder().setValue("Test subject").
-                    setType(EdmPrimitiveTypeKind.String).build()));
+                    client.getObjectFactory().newPrimitiveValueBuilder().buildString("Test subject")));
     getClient().getBinder().add(message,
             client.getObjectFactory().newPrimitiveProperty("Body",
-                    client.getObjectFactory().newPrimitiveValueBuilder().setValue("Test body").
-                    setType(EdmPrimitiveTypeKind.String).build()));
+                    client.getObjectFactory().newPrimitiveValueBuilder().buildString("Test body")));
     getClient().getBinder().add(message,
             client.getObjectFactory().newPrimitiveProperty("IsRead",
-                    client.getObjectFactory().newPrimitiveValueBuilder().setValue(false).
-                    setType(EdmPrimitiveTypeKind.Boolean).build()));
+                    client.getObjectFactory().newPrimitiveValueBuilder().buildBoolean(false)));
 
     final URIBuilder builder =
             client.getURIBuilder(getServiceRoot()).appendEntitySetSegment("Message");

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d3b513cf/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityUpdateTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityUpdateTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityUpdateTestITCase.java
index 223f908..2ad2816 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityUpdateTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityUpdateTestITCase.java
@@ -29,7 +29,6 @@ import org.apache.olingo.client.api.communication.request.retrieve.ODataEntityRe
 import org.apache.olingo.client.api.communication.response.ODataEntityUpdateResponse;
 import org.apache.olingo.commons.api.domain.v3.ODataEntity;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
-import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
@@ -187,8 +186,7 @@ public class EntityUpdateTestITCase extends AbstractTestITCase {
     message.getProperties().remove(message.getProperty("IsRead"));
     getClient().getBinder().add(message,
             client.getObjectFactory().newPrimitiveProperty("IsRead",
-                    client.getObjectFactory().newPrimitiveValueBuilder().setValue(!before).
-                    setType(EdmPrimitiveTypeKind.Boolean).build()));
+                    client.getObjectFactory().newPrimitiveValueBuilder().buildBoolean(!before)));
 
     return client.getCUDRequestFactory().getEntityUpdateRequest(UpdateType.MERGE, message);
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d3b513cf/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/InvokeTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/InvokeTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/InvokeTestITCase.java
index 50e95c5..70daa25 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/InvokeTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/InvokeTestITCase.java
@@ -53,7 +53,6 @@ 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.EdmPrimitiveTypeKind;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.apache.olingo.commons.api.format.ODataPubFormat;
 import org.apache.olingo.commons.core.edm.EdmTypeInfo;
@@ -190,20 +189,15 @@ public class InvokeTestITCase extends AbstractTestITCase {
             "Microsoft.Test.OData.Services.AstoriaDefaultService.Employee");
 
     employee.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("PersonId",
-            getClient().getObjectFactory().newPrimitiveValueBuilder().
-            setText("1244").setType(EdmPrimitiveTypeKind.Int32).build()));
+            getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(1244)));
+    employee.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty("Name",
+            getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("Test employee")));
     employee.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty(
-            "Name", getClient().getObjectFactory().newPrimitiveValueBuilder().
-            setText("Test employee").build()));
+            "ManagersPersonId", getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(3777)));
     employee.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty(
-            "ManagersPersonId", getClient().getObjectFactory().newPrimitiveValueBuilder().
-            setText("3777").setType(EdmPrimitiveTypeKind.Int32).build()));
+            "Salary", getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(1000)));
     employee.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty(
-            "Salary", getClient().getObjectFactory().newPrimitiveValueBuilder().
-            setText("1000").setType(EdmPrimitiveTypeKind.Int32).build()));
-    employee.getProperties().add(getClient().getObjectFactory().newPrimitiveProperty(
-            "Title", getClient().getObjectFactory().newPrimitiveValueBuilder().
-            setText("CEO").build()));
+            "Title", getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("CEO")));
 
     final URIBuilder uriBuilder = getClient().getURIBuilder(testStaticServiceRootURL).appendEntitySetSegment("Person");
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d3b513cf/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityCreateTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityCreateTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityCreateTestITCase.java
index 962542c..9098d49 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityCreateTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntityCreateTestITCase.java
@@ -37,8 +37,7 @@ public class EntityCreateTestITCase extends AbstractTestITCase {
     final ODataEntity order = new ODataEntityImpl("Microsoft.Test.OData.Services.ODataWCFService.Order");
 
     final ODataProperty orderId = getClient().getObjectFactory().newPrimitiveProperty("OrderID",
-            getClient().getObjectFactory().newPrimitiveValueBuilder().
-            setType(EdmPrimitiveTypeKind.Int32).setValue(id).build());
+            getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(id));
     order.getProperties().add(orderId);
 
     final ODataProperty orderDate = getClient().getObjectFactory().newPrimitiveProperty("OrderDate",

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d3b513cf/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/OperationImportInvokeTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/OperationImportInvokeTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/OperationImportInvokeTestITCase.java
index 91ddf22..9bd2c35 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/OperationImportInvokeTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/OperationImportInvokeTestITCase.java
@@ -58,7 +58,7 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
   // TODO: remove once fit provides function / action imports
   @BeforeClass
   public static void checkServerIsOnline() throws IOException {
-    Socket socket = new Socket();
+    final Socket socket = new Socket();
     boolean reachable = false;
     try {
       socket.connect(new InetSocketAddress("odatae2etest.azurewebsites.net", 80), 2000);
@@ -72,7 +72,7 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
     Assume.assumeTrue(reachable);
   }
 
-  public Edm getEdm() {
+  private Edm getEdm() {
     final Edm edm = getClient().getRetrieveRequestFactory().
             getMetadataRequest(serviceRoot).execute().getBody();
     assertNotNull(edm);
@@ -103,7 +103,7 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
     funcImp = container.getFunctionImport("GetPerson2");
 
     final ODataPrimitiveValue city =
-            getClient().getObjectFactory().newPrimitiveValueBuilder().setText("London").build();
+            getClient().getObjectFactory().newPrimitiveValueBuilder().buildString("London");
 
     final ODataInvokeRequest<ODataEntity> person2Req = getClient().getInvokeRequestFactory().
             getInvokeRequest(getClient().getURIBuilder(serviceRoot).
@@ -122,11 +122,11 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
     final ODataComplexValue<ODataProperty> address = getClient().getObjectFactory().
             newLinkedComplexValue("Microsoft.Test.OData.Services.ODataWCFService.Address");
     address.add(client.getObjectFactory().newPrimitiveProperty("Street",
-            client.getObjectFactory().newPrimitiveValueBuilder().setText("1 Microsoft Way").build()));
+            client.getObjectFactory().newPrimitiveValueBuilder().buildString("1 Microsoft Way")));
     address.add(client.getObjectFactory().newPrimitiveProperty("City",
-            client.getObjectFactory().newPrimitiveValueBuilder().setText("London").build()));
+            client.getObjectFactory().newPrimitiveValueBuilder().buildString("London")));
     address.add(client.getObjectFactory().newPrimitiveProperty("PostalCode",
-            client.getObjectFactory().newPrimitiveValueBuilder().setText("98052").build()));
+            client.getObjectFactory().newPrimitiveValueBuilder().buildString("98052")));
 
     final ODataInvokeRequest<ODataEntity> personReq = getClient().getInvokeRequestFactory().
             getInvokeRequest(getClient().getURIBuilder(serviceRoot).
@@ -191,8 +191,7 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
     // Discount
     EdmActionImport actImp = container.getActionImport("Discount");
 
-    final ODataPrimitiveValue percentage = getClient().getObjectFactory().newPrimitiveValueBuilder().
-            setType(EdmPrimitiveTypeKind.Int32).setValue(22).build();
+    final ODataPrimitiveValue percentage = getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(22);
     final ODataInvokeRequest<ODataNoContent> discountReq = getClient().getInvokeRequestFactory().
             getInvokeRequest(getClient().getURIBuilder(serviceRoot).
                     appendOperationCallSegment(actImp.getName()).build(),
@@ -208,11 +207,11 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
     final ODataComplexValue<ODataProperty> address = getClient().getObjectFactory().
             newLinkedComplexValue("Microsoft.Test.OData.Services.ODataWCFService.Address");
     address.add(client.getObjectFactory().newPrimitiveProperty("Street",
-            client.getObjectFactory().newPrimitiveValueBuilder().setText("Via Le Mani Dal Naso, 666").build()));
+            client.getObjectFactory().newPrimitiveValueBuilder().buildString("Via Le Mani Dal Naso, 123")));
     address.add(client.getObjectFactory().newPrimitiveProperty("City",
-            client.getObjectFactory().newPrimitiveValueBuilder().setText("Tollo").build()));
+            client.getObjectFactory().newPrimitiveValueBuilder().buildString("Tollo")));
     address.add(client.getObjectFactory().newPrimitiveProperty("PostalCode",
-            client.getObjectFactory().newPrimitiveValueBuilder().setText("66010").build()));
+            client.getObjectFactory().newPrimitiveValueBuilder().buildString("66010")));
 
     final ODataInvokeRequest<ODataProperty> resetBossAddressReq = getClient().getInvokeRequestFactory().
             getInvokeRequest(getClient().getURIBuilder(serviceRoot).
@@ -250,8 +249,8 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
     final ODataCollectionValue<org.apache.olingo.commons.api.domain.v4.ODataValue> emails =
             getClient().getObjectFactory().newCollectionValue(
                     EdmPrimitiveTypeKind.String.getFullQualifiedName().toString());
-    emails.add(getClient().getObjectFactory().newPrimitiveValueBuilder().setValue("first@olingo.apache.org").build());
-    emails.add(getClient().getObjectFactory().newPrimitiveValueBuilder().setValue("second@olingo.apache.org").build());
+    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(serviceRoot).
                     appendOperationCallSegment(actImp.getName()).build(),
@@ -266,10 +265,8 @@ public class OperationImportInvokeTestITCase extends AbstractTestITCase {
     EdmFunctionImport funcImp = container.getFunctionImport("GetBossEmails");
 
     final Map<String, ODataValue> params = new LinkedHashMap<String, ODataValue>(2);
-    params.put("start", getClient().getObjectFactory().newPrimitiveValueBuilder().
-            setType(EdmPrimitiveTypeKind.Int32).setValue(0).build());
-    params.put("count", getClient().getObjectFactory().newPrimitiveValueBuilder().
-            setType(EdmPrimitiveTypeKind.Int32).setValue(100).build());
+    params.put("start", getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(0));
+    params.put("count", getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(100));
     bossEmailsReq = getClient().getInvokeRequestFactory().
             getInvokeRequest(getClient().getURIBuilder(serviceRoot).
                     appendOperationCallSegment(funcImp.getName()).build(),

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d3b513cf/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/ODataItem.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/ODataItem.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/ODataItem.java
index 6ab2376..3ad5ed5 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/ODataItem.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/ODataItem.java
@@ -52,32 +52,28 @@ public abstract class ODataItem implements Serializable {
   /**
    * Constructor.
    *
-   * @param name OData entity name.
+   * @param name ODataItem name (it's entity type for {@link CommonODataEntity}).
    */
   public ODataItem(final String name) {
     this.name = name;
   }
 
   /**
-   * Returns OData entity name.
-   *
-   * @return entity name.
+   * @return ODataItem name (it's entity type for {@link CommonODataEntity}).
    */
   public String getName() {
     return name;
   }
 
   /**
-   * Returns self link.
-   *
-   * @return entity edit link.
+   * @return ODataItem link (it's edit link for {@link CommonODataEntity}).
    */
   public URI getLink() {
     return link;
   }
 
   /**
-   * Sets self link.
+   * Sets ODataItem link (it's edit link for {@link CommonODataEntity}).
    *
    * @param link link.
    */

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d3b513cf/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/ODataLink.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/ODataLink.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/ODataLink.java
index d463511..1b74caa 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/ODataLink.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/ODataLink.java
@@ -70,7 +70,7 @@ public class ODataLink extends ODataItem {
     }
 
     public ODataLink build() {
-      ODataLink instance = new ODataLink(version, uri, type, title);
+      final ODataLink instance = new ODataLink(version, uri, type, title);
       instance.mediaETag = this.mediaETag;
       return instance;
     }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d3b513cf/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/ODataPrimitiveValue.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/ODataPrimitiveValue.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/ODataPrimitiveValue.java
index fb4d0bc..8b0e5bb 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/ODataPrimitiveValue.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/domain/ODataPrimitiveValue.java
@@ -18,6 +18,7 @@
  */
 package org.apache.olingo.commons.api.domain;
 
+import java.util.UUID;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeException;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
@@ -36,6 +37,18 @@ public interface ODataPrimitiveValue extends ODataValue {
     Builder setValue(Object value);
 
     ODataPrimitiveValue build();
+
+    ODataPrimitiveValue buildBoolean(Boolean value);
+
+    ODataPrimitiveValue buildInt32(Integer value);
+
+    ODataPrimitiveValue buildSingle(Float value);
+
+    ODataPrimitiveValue buildDouble(Double value);
+
+    ODataPrimitiveValue buildString(String value);
+
+    ODataPrimitiveValue buildGuid(UUID value);
   }
 
   EdmPrimitiveTypeKind getTypeKind();

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d3b513cf/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmEntityContainer.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmEntityContainer.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmEntityContainer.java
index c0e1815..519c11d 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmEntityContainer.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmEntityContainer.java
@@ -34,6 +34,11 @@ public interface EdmEntityContainer extends EdmNamed {
   String getNamespace();
 
   /**
+   * @return full qualified name of this entity container
+   */
+  FullQualifiedName getFullQualifiedName();
+  
+  /**
    * Returns whether this container is the default container in the current schema.
    * <br/>
    * According to CSDL specifications, this method will always return <tt>true</tt> for OData 4.0.

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d3b513cf/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmType.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmType.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmType.java
index 985e101..6832ae4 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmType.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmType.java
@@ -26,6 +26,11 @@ import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
 public interface EdmType extends EdmNamed {
 
   /**
+   * @return full qualified name
+   */
+  FullQualifiedName getFullQualifiedName();
+
+  /**
    * Namespace of this {@link EdmType}.
    *
    * @return namespace as String

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d3b513cf/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/FullQualifiedName.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/FullQualifiedName.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/FullQualifiedName.java
index a439e72..4035b44 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/FullQualifiedName.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/FullQualifiedName.java
@@ -36,17 +36,22 @@ public class FullQualifiedName {
   public FullQualifiedName(final String namespace, final String name) {
     this.namespace = namespace;
     this.name = name;
-    fqn = namespace + "." + name;
+    this.fqn = namespace + "." + name;
   }
 
   /**
-   * @param namespace.name
+   * @param namespaceAndName
    */
   public FullQualifiedName(final String namespaceAndName) {
-    fqn = namespaceAndName;
-    String[] split = namespaceAndName.split(".");
-    namespace = split[0];
-    name = split[1];
+    final int dotIdx = namespaceAndName.lastIndexOf('.');
+    if (dotIdx == -1 || dotIdx == 0 || dotIdx == namespaceAndName.length() - 1) {
+      throw new IllegalArgumentException(
+              "Malformed " + FullQualifiedName.class.getSimpleName() + ": " + namespaceAndName);
+    }
+
+    this.fqn = namespaceAndName;
+    this.namespace = this.fqn.substring(0, dotIdx);
+    this.name = this.fqn.substring(dotIdx + 1);
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d3b513cf/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/Target.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/Target.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/Target.java
index 122e670..ac9e3c9 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/Target.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/Target.java
@@ -37,15 +37,11 @@ public class Target {
 
       instance = new Target();
       if (bindingTargetParts.length == 1) {
-        instance.
-            setEntityContainer(new FullQualifiedName(defaultContainer.getNamespace(), defaultContainer.getName())).
-            setTargetName(bindingTargetParts[0]);
+        instance.setEntityContainer(defaultContainer.getFullQualifiedName()).
+                setTargetName(bindingTargetParts[0]);
       } else {
-        final int idx = bindingTargetParts[0].lastIndexOf('.');
-        instance.
-            setEntityContainer(new FullQualifiedName(
-                bindingTargetParts[0].substring(0, idx), bindingTargetParts[0].substring(idx))).
-            setTargetName(bindingTargetParts[1]);
+        instance.setEntityContainer(new FullQualifiedName(bindingTargetParts[0])).
+                setTargetName(bindingTargetParts[1]);
       }
     }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d3b513cf/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/AbstractODataPrimitiveValue.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/AbstractODataPrimitiveValue.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/AbstractODataPrimitiveValue.java
index 36b07d0..a18971f 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/AbstractODataPrimitiveValue.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/domain/AbstractODataPrimitiveValue.java
@@ -20,6 +20,7 @@ package org.apache.olingo.commons.core.domain;
 
 import java.sql.Timestamp;
 import java.util.Calendar;
+import java.util.UUID;
 import org.apache.olingo.commons.api.Constants;
 import org.apache.olingo.commons.api.domain.AbstractODataValue;
 import org.apache.olingo.commons.api.domain.ODataPrimitiveValue;
@@ -130,6 +131,37 @@ public abstract class AbstractODataPrimitiveValue extends AbstractODataValue imp
 
       return getInstance();
     }
+
+    @Override
+    public ODataPrimitiveValue buildBoolean(final Boolean value) {
+      return setType(EdmPrimitiveTypeKind.Boolean).setValue(value).build();
+    }
+
+    @Override
+    public ODataPrimitiveValue buildInt32(final Integer value) {
+      return setType(EdmPrimitiveTypeKind.Int32).setValue(value).build();
+    }
+
+    @Override
+    public ODataPrimitiveValue buildSingle(final Float value) {
+      return setType(EdmPrimitiveTypeKind.Single).setValue(value).build();
+    }
+
+    @Override
+    public ODataPrimitiveValue buildDouble(final Double value) {
+      return setType(EdmPrimitiveTypeKind.Double).setValue(value).build();
+    }
+
+    @Override
+    public ODataPrimitiveValue buildString(final String value) {
+      return setType(EdmPrimitiveTypeKind.String).setValue(value).build();
+    }
+
+    @Override
+    public ODataPrimitiveValue buildGuid(final UUID value) {
+      return setType(EdmPrimitiveTypeKind.Guid).setValue(value).build();
+    }
+
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d3b513cf/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmEntityContainer.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmEntityContainer.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmEntityContainer.java
index 815a00f..cf08fe3 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmEntityContainer.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmEntityContainer.java
@@ -70,6 +70,11 @@ public abstract class AbstractEdmEntityContainer extends EdmNamedImpl implements
     return entityContainerName.getNamespace();
   }
 
+  @Override
+  public FullQualifiedName getFullQualifiedName() {
+    return new FullQualifiedName(getNamespace(), getName());
+  }
+
   protected abstract EdmSingleton createSingleton(String singletonName);
 
   @Override

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d3b513cf/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmOperation.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmOperation.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmOperation.java
index 3c2f894..9be59aa 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmOperation.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmOperation.java
@@ -35,83 +35,83 @@ import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
 
 public abstract class AbstractEdmOperation extends EdmTypeImpl implements EdmOperation {
 
-    private final Map<String, EdmParameter> parameters = new LinkedHashMap<String, EdmParameter>();
+  private final Map<String, EdmParameter> parameters = new LinkedHashMap<String, EdmParameter>();
 
-    private String entitySetPath;
+  private String entitySetPath;
 
-    private boolean isBound;
+  private boolean isBound;
 
-    private EdmReturnType returnType;
+  private EdmReturnType returnType;
 
-    private List<String> parameterNames;
+  private List<String> parameterNames;
 
-    protected AbstractEdmOperation(
-            final Edm edm,
-            final FullQualifiedName fqn,
-            final EdmTypeKind kind) {
-        super(edm, fqn, kind);
-    }
-
-    protected void setParameters(final List<EdmParameter> _parameters) {
-        for (EdmParameter parameter : _parameters) {
-            parameters.put(parameter.getName(), parameter);
-        }
-    }
-
-    protected void setEntitySetPath(final String entitySetPath) {
-        this.entitySetPath = entitySetPath;
-    }
-
-    protected void setIsBound(final boolean isBound) {
-        this.isBound = isBound;
-    }
+  protected AbstractEdmOperation(
+          final Edm edm,
+          final FullQualifiedName fqn,
+          final EdmTypeKind kind) {
+    super(edm, fqn, kind);
+  }
 
-    protected void setReturnType(final EdmReturnType returnType) {
-        this.returnType = returnType;
+  protected void setParameters(final List<EdmParameter> _parameters) {
+    for (EdmParameter parameter : _parameters) {
+      parameters.put(parameter.getName(), parameter);
     }
-
-    @Override
-    public EdmParameter getParameter(final String name) {
-        return parameters.get(name);
+  }
+
+  protected void setEntitySetPath(final String entitySetPath) {
+    this.entitySetPath = entitySetPath;
+  }
+
+  protected void setIsBound(final boolean isBound) {
+    this.isBound = isBound;
+  }
+
+  protected void setReturnType(final EdmReturnType returnType) {
+    this.returnType = returnType;
+  }
+
+  @Override
+  public EdmParameter getParameter(final String name) {
+    return parameters.get(name);
+  }
+
+  @Override
+  public List<String> getParameterNames() {
+    if (parameterNames == null) {
+      parameterNames = new ArrayList<String>(parameters.size());
+      for (String parameterName : parameters.keySet()) {
+        parameterNames.add(parameterName);
+      }
     }
-
-    @Override
-    public List<String> getParameterNames() {
-        if (parameterNames == null) {
-            parameterNames = new ArrayList<String>(parameters.size());
-            for (String parameterName : parameters.keySet()) {
-                parameterNames.add(parameterName);
-            }
-        }
-        return parameterNames;
-    }
-
-    @Override
-    public EdmEntitySet getReturnedEntitySet(final EdmEntitySet bindingParameterEntitySet) {
-        EdmEntitySet returnedEntitySet = null;
-        if (bindingParameterEntitySet != null && entitySetPath != null) {
-            final EdmBindingTarget relatedBindingTarget = bindingParameterEntitySet.
-                    getRelatedBindingTarget(entitySetPath);
-            if (relatedBindingTarget == null) {
-                throw new EdmException("Cannot find entity set with path: " + entitySetPath);
-            }
-            if (relatedBindingTarget instanceof EdmEntitySet) {
-                returnedEntitySet = (EdmEntitySet) relatedBindingTarget;
-            } else {
-                throw new EdmException("BindingTarget with name: " + relatedBindingTarget.getName()
-                        + " must be an entity set");
-            }
-        }
-        return returnedEntitySet;
-    }
-
-    @Override
-    public EdmReturnType getReturnType() {
-        return returnType;
-    }
-
-    @Override
-    public boolean isBound() {
-        return isBound;
+    return parameterNames;
+  }
+
+  @Override
+  public EdmEntitySet getReturnedEntitySet(final EdmEntitySet bindingParameterEntitySet) {
+    EdmEntitySet returnedEntitySet = null;
+    if (bindingParameterEntitySet != null && entitySetPath != null) {
+      final EdmBindingTarget relatedBindingTarget = bindingParameterEntitySet.
+              getRelatedBindingTarget(entitySetPath);
+      if (relatedBindingTarget == null) {
+        throw new EdmException("Cannot find entity set with path: " + entitySetPath);
+      }
+      if (relatedBindingTarget instanceof EdmEntitySet) {
+        returnedEntitySet = (EdmEntitySet) relatedBindingTarget;
+      } else {
+        throw new EdmException("BindingTarget with name: " + relatedBindingTarget.getName()
+                + " must be an entity set");
+      }
     }
+    return returnedEntitySet;
+  }
+
+  @Override
+  public EdmReturnType getReturnType() {
+    return returnType;
+  }
+
+  @Override
+  public boolean isBound() {
+    return isBound;
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d3b513cf/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmSchema.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmSchema.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmSchema.java
index 64bd3b9..6c4184d 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmSchema.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmSchema.java
@@ -137,7 +137,7 @@ public abstract class AbstractEdmSchema implements EdmSchema {
             ? null
             : name == null
             ? getEntityContainer()
-            : name.equals(new FullQualifiedName(getEntityContainer().getNamespace(), getEntityContainer().getName()))
+            : name.equals(getEntityContainer().getFullQualifiedName())
             ? getEntityContainer()
             : null;
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d3b513cf/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmTypeDefinition.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmTypeDefinition.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmTypeDefinition.java
index 9ce14de..12b1dd1 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmTypeDefinition.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmTypeDefinition.java
@@ -83,6 +83,11 @@ public abstract class AbstractEdmTypeDefinition extends EdmNamedImpl implements
   }
 
   @Override
+  public FullQualifiedName getFullQualifiedName() {
+    return new FullQualifiedName(getNamespace(), getName());
+  }
+
+  @Override
   public String getNamespace() {
     return namespace;
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d3b513cf/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmNamedImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmNamedImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmNamedImpl.java
index 0f0bd5d..3b2914d 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmNamedImpl.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmNamedImpl.java
@@ -23,17 +23,17 @@ import org.apache.olingo.commons.api.edm.EdmNamed;
 
 public abstract class EdmNamedImpl implements EdmNamed {
 
-    protected final Edm edm;
+  protected final Edm edm;
 
-    private final String name;
+  private final String name;
 
-    public EdmNamedImpl(final Edm edm, final String name) {
-        this.edm = edm;
-        this.name = name;
-    }
+  public EdmNamedImpl(final Edm edm, final String name) {
+    this.edm = edm;
+    this.name = name;
+  }
 
-    @Override
-    public String getName() {
-        return name;
-    }
+  @Override
+  public String getName() {
+    return name;
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d3b513cf/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmTypeImpl.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmTypeImpl.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmTypeImpl.java
index 6b9e7cb..3a174e2 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmTypeImpl.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/EdmTypeImpl.java
@@ -26,6 +26,7 @@ import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
 public class EdmTypeImpl extends EdmNamedImpl implements EdmType {
 
   protected final FullQualifiedName typeName;
+
   protected final EdmTypeKind kind;
 
   public EdmTypeImpl(final Edm edm, final FullQualifiedName typeName, final EdmTypeKind kind) {
@@ -35,6 +36,11 @@ public class EdmTypeImpl extends EdmNamedImpl implements EdmType {
   }
 
   @Override
+  public FullQualifiedName getFullQualifiedName() {
+    return typeName;
+  }
+
+  @Override
   public String getNamespace() {
     return typeName.getNamespace();
   }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/d3b513cf/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/AbstractPrimitiveType.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/AbstractPrimitiveType.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/AbstractPrimitiveType.java
index 09ceb31..f9d0a73 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/AbstractPrimitiveType.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/primitivetype/AbstractPrimitiveType.java
@@ -32,6 +32,11 @@ abstract class AbstractPrimitiveType implements EdmPrimitiveType {
   protected String uriSuffix = "";
 
   @Override
+  public FullQualifiedName getFullQualifiedName() {
+    return new FullQualifiedName(getNamespace(), getName());
+  }
+
+  @Override
   public boolean isCompatible(final EdmPrimitiveType primitiveType) {
     return equals(primitiveType);
   }
@@ -88,10 +93,10 @@ abstract class AbstractPrimitiveType implements EdmPrimitiveType {
   @Override
   public String toUriLiteral(final String literal) {
     return literal == null
-           ? null
-           : uriPrefix.isEmpty() && uriSuffix.isEmpty()
-             ? literal
-             : uriPrefix + literal + uriSuffix;
+            ? null
+            : uriPrefix.isEmpty() && uriSuffix.isEmpty()
+            ? literal
+            : uriPrefix + literal + uriSuffix;
   }
 
   @Override
@@ -101,7 +106,7 @@ abstract class AbstractPrimitiveType implements EdmPrimitiveType {
     } else if (uriPrefix.isEmpty() && uriSuffix.isEmpty()) {
       return literal;
     } else if (literal.length() >= uriPrefix.length() + uriSuffix.length()
-               && literal.startsWith(uriPrefix) && literal.endsWith(uriSuffix)) {
+            && literal.startsWith(uriPrefix) && literal.endsWith(uriSuffix)) {
 
       return literal.substring(uriPrefix.length(), literal.length() - uriSuffix.length());
     } else {


[3/3] git commit: [OLINGO-234] V4 bound Action / Function invoke tests ready - still using external service

Posted by il...@apache.org.
[OLINGO-234] V4 bound Action / Function invoke tests ready - still using external service


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

Branch: refs/heads/master
Commit: 7104c65f843c2414579f51b235e482be23be98bd
Parents: d3b513c
Author: Francesco Chicchiriccò <il...@apache.org>
Authored: Wed Apr 9 14:11:07 2014 +0200
Committer: Francesco Chicchiriccò <il...@apache.org>
Committed: Wed Apr 9 14:11:07 2014 +0200

----------------------------------------------------------------------
 .../it/v4/BoundOperationInvokeTestITCase.java   | 387 +++++++++++++++++++
 1 file changed, 387 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/7104c65f/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/BoundOperationInvokeTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/BoundOperationInvokeTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/BoundOperationInvokeTestITCase.java
new file mode 100644
index 0000000..b381da8
--- /dev/null
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/BoundOperationInvokeTestITCase.java
@@ -0,0 +1,387 @@
+/*
+ * 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.it.v4;
+
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import org.apache.commons.io.IOUtils;
+import org.apache.olingo.client.api.communication.request.invoke.ODataInvokeRequest;
+import org.apache.olingo.client.api.communication.request.retrieve.ODataEntityRequest;
+import org.apache.olingo.client.api.uri.v4.URIBuilder;
+import org.apache.olingo.commons.api.domain.ODataCollectionValue;
+import org.apache.olingo.commons.api.domain.ODataComplexValue;
+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.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.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;
+import org.apache.olingo.commons.api.format.ODataPubFormat;
+import org.apache.olingo.commons.core.edm.EdmTypeInfo;
+import org.junit.Assume;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class BoundOperationInvokeTestITCase extends AbstractTestITCase {
+
+  private static final String serviceRoot = "http://odatae2etest.azurewebsites.net/javatest/DefaultService";
+
+  // TODO: remove once fit provides function / action imports
+  @BeforeClass
+  public static void checkServerIsOnline() throws IOException {
+    final Socket socket = new Socket();
+    boolean reachable = false;
+    try {
+      socket.connect(new InetSocketAddress("odatae2etest.azurewebsites.net", 80), 2000);
+      reachable = true;
+    } catch (Exception e) {
+      LOG.warn("External test service not reachable, ignoring this whole class: {}",
+              OperationImportInvokeTestITCase.class.getName());
+    } finally {
+      IOUtils.closeQuietly(socket);
+    }
+    Assume.assumeTrue(reachable);
+  }
+
+  private Edm getEdm() {
+    final Edm edm = getClient().getRetrieveRequestFactory().
+            getMetadataRequest(serviceRoot).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 = getClient().getURIBuilder(serviceRoot).appendSingletonSegment("Company");
+    ODataEntityRequest<ODataEntity> entityReq =
+            getClient().getRetrieveRequestFactory().getEntityRequest(builder.build());
+    // TODO: remove when fit is used since external test server does not advertise actions in Atom
+    entityReq.setFormat(ODataPubFormat.JSON_FULL_METADATA);
+    ODataEntity entity = entityReq.execute().getBody();
+    assertNotNull(entity);
+
+    ODataOperation boundOp = entity.getOperation("Microsoft.Test.OData.Services.ODataWCFService.GetEmployeesCount");
+    assertNotNull(boundOp);
+
+    EdmFunction func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()),
+            new EdmTypeInfo.Builder().setTypeExpression(entity.getName()).build().getFullQualifiedName(), false, null);
+    assertNotNull(func);
+
+    final ODataInvokeRequest<ODataProperty> getEmployeesCountReq =
+            getClient().getInvokeRequestFactory().getInvokeRequest(boundOp.getTarget(), func);
+    getEmployeesCountReq.setFormat(format);
+    final ODataProperty getEmployeesCountRes = getEmployeesCountReq.execute().getBody();
+    assertNotNull(getEmployeesCountRes);
+    assertTrue(getEmployeesCountRes.hasPrimitiveValue());
+
+    // GetProductDetails
+    builder = getClient().getURIBuilder(serviceRoot).appendEntitySetSegment("Products").appendKeySegment(5);
+    entityReq = getClient().getRetrieveRequestFactory().getEntityRequest(builder.build());
+    // TODO: remove when fit is used since external test server does not advertise actions in Atom
+    entityReq.setFormat(ODataPubFormat.JSON_FULL_METADATA);
+    entity = entityReq.execute().getBody();
+    assertNotNull(entity);
+
+    boundOp = entity.getOperation("Microsoft.Test.OData.Services.ODataWCFService.GetProductDetails");
+    assertNotNull(boundOp);
+
+    func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()),
+            new EdmTypeInfo.Builder().setTypeExpression(entity.getName()).build().getFullQualifiedName(), false, null);
+    assertNotNull(func);
+
+    final ODataPrimitiveValue count = getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(1);
+    final ODataInvokeRequest<ODataEntitySet> getProductDetailsReq =
+            getClient().getInvokeRequestFactory().getInvokeRequest(boundOp.getTarget(), func,
+                    Collections.<String, ODataValue>singletonMap("count", count));
+    getProductDetailsReq.setFormat(format);
+    final ODataEntitySet getProductDetailsRes = getProductDetailsReq.execute().getBody();
+    assertNotNull(getProductDetailsRes);
+    assertEquals(1, getProductDetailsRes.getCount());
+
+    // GetRelatedProduct
+    final Map<String, Object> keyMap = new HashMap<String, Object>();
+    keyMap.put("ProductID", 6);
+    keyMap.put("ProductDetailID", 1);
+    builder = getClient().getURIBuilder(serviceRoot).appendEntitySetSegment("ProductDetails").
+            appendKeySegment(keyMap);
+    entityReq = getClient().getRetrieveRequestFactory().getEntityRequest(builder.build());
+    // TODO: remove when fit is used since external test server does not advertise actions in Atom
+    entityReq.setFormat(ODataPubFormat.JSON_FULL_METADATA);
+    entity = entityReq.execute().getBody();
+    assertNotNull(entity);
+
+    boundOp = entity.getOperation("Microsoft.Test.OData.Services.ODataWCFService.GetRelatedProduct");
+    assertNotNull(boundOp);
+
+    func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()),
+            new EdmTypeInfo.Builder().setTypeExpression(entity.getName()).build().getFullQualifiedName(), false,
+            null);
+    assertNotNull(func);
+
+    final ODataInvokeRequest<ODataEntity> getRelatedProductReq =
+            getClient().getInvokeRequestFactory().getInvokeRequest(boundOp.getTarget(), func);
+    getRelatedProductReq.setFormat(format);
+    //TODO test service returns error instead of Products(6)
+    try {
+      final ODataEntity getRelatedProductRes = getRelatedProductReq.execute().getBody();
+      assertNotNull(getRelatedProductRes);
+      assertEquals("#Microsoft.Test.OData.Services.ODataWCFService.Product", getRelatedProductRes.getName());
+      assertEquals(6, getRelatedProductRes.getProperty("ProductID").getPrimitiveValue().toCastValue(Integer.class), 0);
+    } catch (Exception e) {
+      // ignore
+    }
+
+    // GetDefaultPI
+    builder = getClient().getURIBuilder(serviceRoot).appendEntitySetSegment("Accounts").appendKeySegment(101);
+    entityReq = getClient().getRetrieveRequestFactory().getEntityRequest(builder.build());
+    // TODO: remove when fit is used since external test server does not advertise actions in Atom
+    entityReq.setFormat(ODataPubFormat.JSON_FULL_METADATA);
+    entity = entityReq.execute().getBody();
+    assertNotNull(entity);
+
+    boundOp = entity.getOperation("Microsoft.Test.OData.Services.ODataWCFService.GetDefaultPI");
+    assertNotNull(boundOp);
+
+    func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()),
+            new EdmTypeInfo.Builder().setTypeExpression(entity.getName()).build().getFullQualifiedName(), false, null);
+    assertNotNull(func);
+
+    final ODataInvokeRequest<ODataEntity> getDefaultPIReq =
+            getClient().getInvokeRequestFactory().getInvokeRequest(boundOp.getTarget(), func);
+    getDefaultPIReq.setFormat(format);
+    final ODataEntity getDefaultPIRes = getDefaultPIReq.execute().getBody();
+    assertNotNull(getDefaultPIRes);
+    assertEquals("#Microsoft.Test.OData.Services.ODataWCFService.PaymentInstrument", getDefaultPIRes.getName());
+    assertEquals(101901,
+            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()),
+            new EdmTypeInfo.Builder().setTypeExpression(entity.getName()).build().getFullQualifiedName(), false, null);
+    assertNotNull(func);
+
+    final ODataInvokeRequest<ODataProperty> getAccountInfoReq =
+            getClient().getInvokeRequestFactory().getInvokeRequest(boundOp.getTarget(), func);
+    getAccountInfoReq.setFormat(format);
+    final ODataProperty getAccountInfoRes = getAccountInfoReq.execute().getBody();
+    assertNotNull(getAccountInfoRes);
+    assertTrue(getAccountInfoRes.hasComplexValue());
+    assertEquals("Microsoft.Test.OData.Services.ODataWCFService.AccountInfo",
+            getAccountInfoRes.getComplexValue().getTypeName());
+
+    // GetActualAmount
+    entityReq = getClient().getRetrieveRequestFactory().getEntityRequest(
+            entity.getNavigationLink("MyGiftCard").getLink());
+    // TODO: remove when fit is used since external test server does not advertise actions in Atom
+    entityReq.setFormat(ODataPubFormat.JSON_FULL_METADATA);
+    entity = entityReq.execute().getBody();
+    assertNotNull(entity);
+    assertEquals(301, entity.getProperty("GiftCardID").getPrimitiveValue().toCastValue(Integer.class), 0);
+
+    boundOp = entity.getOperation("Microsoft.Test.OData.Services.ODataWCFService.GetActualAmount");
+    assertNotNull(boundOp);
+
+    func = edm.getBoundFunction(new FullQualifiedName(boundOp.getTitle()),
+            new EdmTypeInfo.Builder().setTypeExpression(entity.getName()).build().getFullQualifiedName(), false, null);
+    assertNotNull(func);
+
+    final ODataPrimitiveValue bonusRate = getClient().getObjectFactory().newPrimitiveValueBuilder().buildDouble(1.1);
+    final ODataInvokeRequest<ODataProperty> getActualAmountReq =
+            getClient().getInvokeRequestFactory().getInvokeRequest(boundOp.getTarget(), func,
+                    Collections.<String, ODataValue>singletonMap("bonusRate", bonusRate));
+    getActualAmountReq.setFormat(format);
+    final ODataProperty getActualAmountRes = getActualAmountReq.execute().getBody();
+    assertNotNull(getActualAmountRes);
+    assertEquals(41.79, getActualAmountRes.getPrimitiveValue().toCastValue(Double.class), 0);
+  }
+
+  @Test
+  public void atomFunctions() throws EdmPrimitiveTypeException {
+    functions(ODataPubFormat.ATOM);
+  }
+
+  @Test
+  public void jsonFunctions() throws EdmPrimitiveTypeException {
+    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);
+
+    // IncreaseRevenue
+    URIBuilder builder = getClient().getURIBuilder(serviceRoot).appendSingletonSegment("Company");
+    ODataEntityRequest<ODataEntity> entityReq =
+            getClient().getRetrieveRequestFactory().getEntityRequest(builder.build());
+    // TODO: remove when fit is used since external test server does not advertise actions in Atom
+    entityReq.setFormat(ODataPubFormat.JSON_FULL_METADATA);
+    ODataEntity entity = entityReq.execute().getBody();
+    assertNotNull(entity);
+
+    ODataOperation boundOp = entity.getOperation("Microsoft.Test.OData.Services.ODataWCFService.IncreaseRevenue");
+    assertNotNull(boundOp);
+
+    EdmAction act = edm.getBoundAction(new FullQualifiedName(boundOp.getTitle()),
+            new EdmTypeInfo.Builder().setTypeExpression(entity.getName()).build().getFullQualifiedName(), false);
+    assertNotNull(act);
+
+    final ODataPrimitiveValue increaseValue = getClient().getObjectFactory().newPrimitiveValueBuilder().
+            setType(EdmPrimitiveTypeKind.Int64).setValue(12).build();
+    final ODataInvokeRequest<ODataProperty> increaseRevenueReq =
+            getClient().getInvokeRequestFactory().getInvokeRequest(boundOp.getTarget(), act,
+                    Collections.<String, ODataValue>singletonMap("IncreaseValue", increaseValue));
+    increaseRevenueReq.setFormat(format);
+    final ODataProperty increaseRevenueRes = increaseRevenueReq.execute().getBody();
+    assertNotNull(increaseRevenueRes);
+    assertTrue(increaseRevenueRes.hasPrimitiveValue());
+
+    // AddAccessRight
+    builder = getClient().getURIBuilder(serviceRoot).appendEntitySetSegment("Products").appendKeySegment(5);
+    entityReq = getClient().getRetrieveRequestFactory().getEntityRequest(builder.build());
+    // TODO: remove when fit is used since external test server does not advertise actions in Atom
+    entityReq.setFormat(ODataPubFormat.JSON_FULL_METADATA);
+    entity = entityReq.execute().getBody();
+    assertNotNull(entity);
+
+    boundOp = entity.getOperation("Microsoft.Test.OData.Services.ODataWCFService.AddAccessRight");
+    assertNotNull(boundOp);
+
+    act = edm.getBoundAction(new FullQualifiedName(boundOp.getTitle()),
+            new EdmTypeInfo.Builder().setTypeExpression(entity.getName()).build().getFullQualifiedName(), false);
+    assertNotNull(act);
+
+    final ODataEnumValue accessRight = getClient().getObjectFactory().
+            newEnumValue("Microsoft.Test.OData.Services.ODataWCFService.AccessLevel", "Execute");
+    final ODataInvokeRequest<ODataProperty> getProductDetailsReq =
+            getClient().getInvokeRequestFactory().getInvokeRequest(boundOp.getTarget(), act,
+                    Collections.<String, ODataValue>singletonMap("accessRight", accessRight));
+    getProductDetailsReq.setFormat(format);
+    final ODataProperty getProductDetailsRes = getProductDetailsReq.execute().getBody();
+    assertNotNull(getProductDetailsRes);
+    assertTrue(getProductDetailsRes.hasEnumValue());
+
+    // ResetAddress
+    builder = getClient().getURIBuilder(serviceRoot).appendEntitySetSegment("Customers").appendKeySegment(2);
+    entityReq = getClient().getRetrieveRequestFactory().getEntityRequest(builder.build());
+    // TODO: remove when fit is used since external test server does not advertise actions in Atom
+    entityReq.setFormat(ODataPubFormat.JSON_FULL_METADATA);
+    entity = entityReq.execute().getBody();
+    assertNotNull(entity);
+
+    boundOp = entity.getOperation("Microsoft.Test.OData.Services.ODataWCFService.ResetAddress");
+    assertNotNull(boundOp);
+
+    act = edm.getBoundAction(new FullQualifiedName(boundOp.getTitle()),
+            edm.getEntityType(new EdmTypeInfo.Builder().setTypeExpression(entity.getName()).build().
+                    getFullQualifiedName()).getBaseType().getFullQualifiedName(), false);
+    assertNotNull(act);
+
+    final ODataCollectionValue<org.apache.olingo.commons.api.domain.v4.ODataValue> addresses =
+            getClient().getObjectFactory().
+            newCollectionValue("Collection(Microsoft.Test.OData.Services.ODataWCFService.Address)");
+    final ODataComplexValue<ODataProperty> address = getClient().getObjectFactory().
+            newLinkedComplexValue("Microsoft.Test.OData.Services.ODataWCFService.Address");
+    address.add(client.getObjectFactory().newPrimitiveProperty("Street",
+            client.getObjectFactory().newPrimitiveValueBuilder().buildString("Piazza La Bomba E Scappa")));
+    address.add(client.getObjectFactory().newPrimitiveProperty("City",
+            client.getObjectFactory().newPrimitiveValueBuilder().buildString("Tollo")));
+    address.add(client.getObjectFactory().newPrimitiveProperty("PostalCode",
+            client.getObjectFactory().newPrimitiveValueBuilder().buildString("66010")));
+    addresses.add(address);
+    final ODataPrimitiveValue index = getClient().getObjectFactory().newPrimitiveValueBuilder().buildInt32(0);
+    final Map<String, ODataValue> params = new LinkedHashMap<String, ODataValue>(2);
+    params.put("addresses", addresses);
+    params.put("index", index);
+    final ODataInvokeRequest<ODataEntity> resetAddressReq =
+            getClient().getInvokeRequestFactory().getInvokeRequest(boundOp.getTarget(), act, params);
+    resetAddressReq.setFormat(format);
+    final ODataEntity resetAddressRes = resetAddressReq.execute().getBody();
+    assertNotNull(resetAddressRes);
+    assertEquals(2, resetAddressRes.getProperty("PersonID").getPrimitiveValue().toCastValue(Integer.class), 0);
+
+    // RefreshDefaultPI
+    builder = getClient().getURIBuilder(serviceRoot).appendEntitySetSegment("Accounts").appendKeySegment(101);
+    entityReq = getClient().getRetrieveRequestFactory().getEntityRequest(builder.build());
+    // TODO: remove when fit is used since external test server does not advertise actions in Atom
+    entityReq.setFormat(ODataPubFormat.JSON_FULL_METADATA);
+    entity = entityReq.execute().getBody();
+    assertNotNull(entity);
+
+    boundOp = entity.getOperation("Microsoft.Test.OData.Services.ODataWCFService.RefreshDefaultPI");
+    assertNotNull(boundOp);
+
+    act = edm.getBoundAction(new FullQualifiedName(boundOp.getTitle()),
+            new EdmTypeInfo.Builder().setTypeExpression(entity.getName()).build().getFullQualifiedName(), false);
+    assertNotNull(act);
+
+    final ODataPrimitiveValue newDate = getClient().getObjectFactory().newPrimitiveValueBuilder().
+            setType(EdmPrimitiveTypeKind.DateTimeOffset).setText("2014-04-09T00:00:00Z").build();
+    final ODataInvokeRequest<ODataEntity> getDefaultPIReq =
+            getClient().getInvokeRequestFactory().getInvokeRequest(boundOp.getTarget(), act,
+                    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.getName());
+    assertEquals(101901,
+            getDefaultPIRes.getProperty("PaymentInstrumentID").getPrimitiveValue().toCastValue(Integer.class), 0);
+  }
+
+  @Test
+  public void atomActions() throws EdmPrimitiveTypeException {
+    //TODO test service doesn't support yet Atom POST params
+    try {
+      actions(ODataPubFormat.ATOM);
+    } catch (Exception e) {
+      // ignore
+    }
+  }
+
+  @Test
+  public void jsonActions() throws EdmPrimitiveTypeException {
+    actions(ODataPubFormat.JSON_FULL_METADATA);
+  }
+
+}