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

[42/52] [abbrv] [OLINGO-205, OLINGO-200] provided atom v4 deserialization for entity type/set + entity set request

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/ODataBasicRequest.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/ODataBasicRequest.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/ODataBasicRequest.java
index f64b233..7ba38f8 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/ODataBasicRequest.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/ODataBasicRequest.java
@@ -20,6 +20,7 @@ package org.apache.olingo.client.api.communication.request;
 
 import java.util.concurrent.Future;
 import org.apache.olingo.client.api.communication.response.ODataResponse;
+import org.apache.olingo.client.api.format.Format;
 
 /**
  * Basic OData request.
@@ -27,7 +28,7 @@ import org.apache.olingo.client.api.communication.response.ODataResponse;
  * @param <V> OData response type corresponding to the request implementation.
  * @param <T> Accepted content-type formats by the request in object.
  */
-public interface ODataBasicRequest<V extends ODataResponse, T extends Enum<T>> extends ODataRequest {
+public interface ODataBasicRequest<V extends ODataResponse, T extends Format> extends ODataRequest {
 
   /**
    * Request execute.

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/ODataRetrieveRequest.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/ODataRetrieveRequest.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/ODataRetrieveRequest.java
index edabb96..14f907e 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/ODataRetrieveRequest.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/communication/request/retrieve/ODataRetrieveRequest.java
@@ -20,9 +20,10 @@ package org.apache.olingo.client.api.communication.request.retrieve;
 
 import org.apache.olingo.client.api.communication.request.ODataBasicRequest;
 import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
+import org.apache.olingo.client.api.format.Format;
 
 /**
  * This is an abstract representation of an OData retrieve query request returning one or more result item.
  */
-public interface ODataRetrieveRequest<V, T extends Enum<T>> extends ODataBasicRequest<ODataRetrieveResponse<V>, T> {
+public interface ODataRetrieveRequest<V, T extends Format> extends ODataBasicRequest<ODataRetrieveResponse<V>, T> {
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/client-api/src/main/java/org/apache/olingo/client/api/domain/ODataLinkType.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/domain/ODataLinkType.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/domain/ODataLinkType.java
index 6702c00..179f9cc 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/domain/ODataLinkType.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/domain/ODataLinkType.java
@@ -20,7 +20,6 @@ package org.apache.olingo.client.api.domain;
 
 import org.apache.commons.lang3.StringUtils;
 import org.apache.http.entity.ContentType;
-import org.apache.olingo.client.api.format.ODataPubFormat;
 import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
 
 /**
@@ -31,11 +30,11 @@ public enum ODataLinkType {
   /**
    * Entity navigation link.
    */
-  ENTITY_NAVIGATION(ODataPubFormat.ATOM + ";type=entry"),
+  ENTITY_NAVIGATION(ContentType.APPLICATION_ATOM_XML.getMimeType() + ";type=entry"),
   /**
    * Entity set navigation link.
    */
-  ENTITY_SET_NAVIGATION(ODataPubFormat.ATOM + ";type=feed"),
+  ENTITY_SET_NAVIGATION(ContentType.APPLICATION_ATOM_XML.getMimeType() + ";type=feed"),
   /**
    * Association link.
    */
@@ -57,7 +56,8 @@ public enum ODataLinkType {
   }
 
   /**
-   * Gets <code>LinkType</code> instance from the given rel and type.
+   * Gets
+   * <code>LinkType</code> instance from the given rel and type.
    *
    * @param client OData client.
    * @param rel rel.

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/client-api/src/main/java/org/apache/olingo/client/api/format/Format.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/format/Format.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/format/Format.java
new file mode 100644
index 0000000..1d52664
--- /dev/null
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/format/Format.java
@@ -0,0 +1,26 @@
+/*
+ * 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.api.format;
+
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
+
+public interface Format {
+
+  String toString(ODataServiceVersion version);
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/client-api/src/main/java/org/apache/olingo/client/api/format/ODataFormat.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/format/ODataFormat.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/format/ODataFormat.java
index 2ee704b..8f52ea3 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/format/ODataFormat.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/format/ODataFormat.java
@@ -19,11 +19,12 @@
 package org.apache.olingo.client.api.format;
 
 import org.apache.http.entity.ContentType;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
 
 /**
  * Available formats to be used in various contexts.
  */
-public enum ODataFormat {
+public enum ODataFormat implements Format{
 
   /**
    * JSON format with no metadata.
@@ -94,4 +95,9 @@ public enum ODataFormat {
 
     return result;
   }
+
+  @Override
+  public String toString(final ODataServiceVersion version) {
+    return this.toString();
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/client-api/src/main/java/org/apache/olingo/client/api/format/ODataMediaFormat.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/format/ODataMediaFormat.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/format/ODataMediaFormat.java
index 353edc4..5d49ddb 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/format/ODataMediaFormat.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/format/ODataMediaFormat.java
@@ -19,11 +19,12 @@
 package org.apache.olingo.client.api.format;
 
 import org.apache.http.entity.ContentType;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
 
 /**
  * Available formats for media.
  */
-public enum ODataMediaFormat {
+public enum ODataMediaFormat implements Format{
 
   CHARSET_PARAMETER("charset"),
   MEDIA_TYPE_WILDCARD("*"),
@@ -68,4 +69,9 @@ public enum ODataMediaFormat {
 
     return result;
   }
+
+  @Override
+  public String toString(final ODataServiceVersion version) {
+    return this.toString();
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/client-api/src/main/java/org/apache/olingo/client/api/format/ODataPubFormat.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/format/ODataPubFormat.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/format/ODataPubFormat.java
index 62e5322..aea294f 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/format/ODataPubFormat.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/format/ODataPubFormat.java
@@ -18,34 +18,49 @@
  */
 package org.apache.olingo.client.api.format;
 
+import java.util.EnumMap;
 import org.apache.http.entity.ContentType;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
 
 /**
  * Available formats for AtomPub exchange.
  */
-public enum ODataPubFormat {
+public enum ODataPubFormat implements Format {
 
   /**
    * JSON format with no metadata.
    */
-  JSON_NO_METADATA(ContentType.APPLICATION_JSON.getMimeType() + ";odata=nometadata"),
+  JSON_NO_METADATA(),
   /**
    * JSON format with minimal metadata (default).
    */
-  JSON(ContentType.APPLICATION_JSON.getMimeType() + ";odata=minimalmetadata"),
+  JSON(),
   /**
    * JSON format with no metadata.
    */
-  JSON_FULL_METADATA(ContentType.APPLICATION_JSON.getMimeType() + ";odata=fullmetadata"),
+  JSON_FULL_METADATA(),
   /**
    * Atom format.
    */
-  ATOM(ContentType.APPLICATION_ATOM_XML.getMimeType());
+  ATOM();
 
-  private final String format;
+  final static EnumMap<ODataServiceVersion, EnumMap<ODataPubFormat, String>> formatPerVersion =
+          new EnumMap<ODataServiceVersion, EnumMap<ODataPubFormat, String>>(ODataServiceVersion.class);
 
-  ODataPubFormat(final String format) {
-    this.format = format;
+  static {
+    final EnumMap<ODataPubFormat, String> v3 = new EnumMap<ODataPubFormat, String>(ODataPubFormat.class);
+    v3.put(JSON_NO_METADATA, ContentType.APPLICATION_JSON.getMimeType() + ";odata=nometadata");
+    v3.put(JSON, ContentType.APPLICATION_JSON.getMimeType() + ";odata=minimalmetadata");
+    v3.put(JSON_FULL_METADATA, ContentType.APPLICATION_JSON.getMimeType() + ";odata=fullmetadata");
+    v3.put(ATOM, ContentType.APPLICATION_ATOM_XML.getMimeType());
+    formatPerVersion.put(ODataServiceVersion.V30, v3);
+
+    final EnumMap<ODataPubFormat, String> v4 = new EnumMap<ODataPubFormat, String>(ODataPubFormat.class);
+    v4.put(JSON_NO_METADATA, ContentType.APPLICATION_JSON.getMimeType() + ";odata.metadata=none");
+    v4.put(JSON, ContentType.APPLICATION_JSON.getMimeType() + ";odata.metadata=minimal");
+    v4.put(JSON_FULL_METADATA, ContentType.APPLICATION_JSON.getMimeType() + ";odata.metadata=full");
+    v4.put(ATOM, ContentType.APPLICATION_ATOM_XML.getMimeType());
+    formatPerVersion.put(ODataServiceVersion.V40, v4);
   }
 
   /**
@@ -54,8 +69,17 @@ public enum ODataPubFormat {
    * @return format as a string.
    */
   @Override
+  public String toString(final ODataServiceVersion version) {
+    if (version.ordinal() < ODataServiceVersion.V30.ordinal()) {
+      throw new IllegalArgumentException("Unsupported version " + version);
+    }
+
+    return ODataPubFormat.formatPerVersion.get(version).get(this);
+  }
+
+  @Override
   public String toString() {
-    return format;
+    throw new UnsupportedOperationException();
   }
 
   /**
@@ -72,7 +96,7 @@ public enum ODataPubFormat {
     final String[] parts = format.split(";");
     _format.append(parts[0].trim());
     if (ContentType.APPLICATION_JSON.getMimeType().equals(parts[0].trim())) {
-      if (parts.length > 1 && parts[1].startsWith("odata=")) {
+      if (parts.length > 1 && parts[1].startsWith("odata")) {
         _format.append(';').append(parts[1].trim());
       } else {
         result = ODataPubFormat.JSON;
@@ -82,7 +106,8 @@ public enum ODataPubFormat {
     if (result == null) {
       final String candidate = _format.toString();
       for (ODataPubFormat value : values()) {
-        if (candidate.equals(value.toString())) {
+        if (candidate.equals(value.toString(ODataServiceVersion.V30))
+                || candidate.equals(value.toString(ODataServiceVersion.V40))) {
           result = value;
         }
       }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/client-api/src/main/java/org/apache/olingo/client/api/format/ODataValueFormat.java
----------------------------------------------------------------------
diff --git a/lib/client-api/src/main/java/org/apache/olingo/client/api/format/ODataValueFormat.java b/lib/client-api/src/main/java/org/apache/olingo/client/api/format/ODataValueFormat.java
index b04ce7d..818b104 100644
--- a/lib/client-api/src/main/java/org/apache/olingo/client/api/format/ODataValueFormat.java
+++ b/lib/client-api/src/main/java/org/apache/olingo/client/api/format/ODataValueFormat.java
@@ -19,11 +19,12 @@
 package org.apache.olingo.client.api.format;
 
 import org.apache.http.entity.ContentType;
+import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
 
 /**
  * Available formats for property values.
  */
-public enum ODataValueFormat {
+public enum ODataValueFormat implements Format{
 
   /**
    * Application octet stream.
@@ -73,4 +74,9 @@ public enum ODataValueFormat {
 
     return result;
   }
+
+  @Override
+  public String toString(final ODataServiceVersion version) {
+    return this.toString();
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/AbstractODataBasicRequest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/AbstractODataBasicRequest.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/AbstractODataBasicRequest.java
index 307cdc9..8cd5819 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/AbstractODataBasicRequest.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/AbstractODataBasicRequest.java
@@ -31,6 +31,7 @@ import org.apache.olingo.client.api.communication.request.ODataBasicRequest;
 import org.apache.olingo.client.api.communication.request.ODataStreamer;
 import org.apache.olingo.client.api.communication.request.batch.ODataBatchRequest;
 import org.apache.olingo.client.api.communication.response.ODataResponse;
+import org.apache.olingo.client.api.format.Format;
 import org.apache.olingo.client.api.http.HttpMethod;
 
 /**
@@ -39,88 +40,87 @@ import org.apache.olingo.client.api.http.HttpMethod;
  * @param <V> OData response type corresponding to the request implementation.
  * @param <T> OData format being used.
  */
-public abstract class AbstractODataBasicRequest<V extends ODataResponse, T extends Enum<T>>
+public abstract class AbstractODataBasicRequest<V extends ODataResponse, T extends Format>
         extends ODataRequestImpl<T>
         implements ODataBasicRequest<V, T> {
 
-    /**
-     * Constructor.
-     *
-     * @param odataClient client instance getting this request
-     * @param formatRef reference class for the format being used
-     * @param method request method.
-     * @param uri OData request URI.
-     */
-    public AbstractODataBasicRequest(final CommonODataClient odataClient,
-            final Class<T> formatRef, final HttpMethod method, final URI uri) {
+  /**
+   * Constructor.
+   *
+   * @param odataClient client instance getting this request
+   * @param formatRef reference class for the format being used
+   * @param method request method.
+   * @param uri OData request URI.
+   */
+  public AbstractODataBasicRequest(final CommonODataClient odataClient,
+          final Class<T> formatRef, final HttpMethod method, final URI uri) {
 
-        super(odataClient, formatRef, method, uri);
-    }
+    super(odataClient, formatRef, method, uri);
+  }
 
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public void setFormat(final T format) {
-        if (format != null) {
-            setAccept(format.toString());
-            setContentType(format.toString());
-        }
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public void setFormat(final T format) {
+    if (format != null) {
+      setAccept(format.toString(odataClient.getServiceVersion()));
+      setContentType(format.toString(odataClient.getServiceVersion()));
     }
+  }
 
-    /**
-     * {@inheritDoc}
-     */
-    @Override
-    public final Future<V> asyncExecute() {
-        return odataClient.getConfiguration().getExecutor().submit(new Callable<V>() {
-
-            @Override
-            public V call() throws Exception {
-                return execute();
-            }
-        });
-    }
+  /**
+   * {@inheritDoc}
+   */
+  @Override
+  public final Future<V> asyncExecute() {
+    return odataClient.getConfiguration().getExecutor().submit(new Callable<V>() {
+      @Override
+      public V call() throws Exception {
+        return execute();
+      }
+    });
+  }
 
-    /**
-     * Gets payload as an InputStream.
-     *
-     * @return InputStream for entire payload.
-     */
-    protected abstract InputStream getPayload();
+  /**
+   * Gets payload as an InputStream.
+   *
+   * @return InputStream for entire payload.
+   */
+  protected abstract InputStream getPayload();
 
-    /**
-     * Serializes the full request into the given batch request.
-     *
-     * @param req destination batch request.
-     */
-    public void batch(final ODataBatchRequest req) {
-        batch(req, null);
-    }
+  /**
+   * Serializes the full request into the given batch request.
+   *
+   * @param req destination batch request.
+   */
+  public void batch(final ODataBatchRequest req) {
+    batch(req, null);
+  }
 
-    /**
-     * Serializes the full request into the given batch request.
-     * <p>
-     * This method have to be used to serialize a changeset item with the specified contentId.
-     *
-     * @param req destination batch request.
-     * @param contentId contentId of the changeset item.
-     */
-    public void batch(final ODataBatchRequest req, final String contentId) {
-        try {
-            req.rawAppend(toByteArray());
-            if (StringUtils.isNotBlank(contentId)) {
-                req.rawAppend((ODataBatchConstants.CHANGESET_CONTENT_ID_NAME + ": " + contentId).getBytes());
-                req.rawAppend(ODataStreamer.CRLF);
-            }
-            req.rawAppend(ODataStreamer.CRLF);
+  /**
+   * Serializes the full request into the given batch request.
+   * <p>
+   * This method have to be used to serialize a changeset item with the specified contentId.
+   *
+   * @param req destination batch request.
+   * @param contentId contentId of the changeset item.
+   */
+  public void batch(final ODataBatchRequest req, final String contentId) {
+    try {
+      req.rawAppend(toByteArray());
+      if (StringUtils.isNotBlank(contentId)) {
+        req.rawAppend((ODataBatchConstants.CHANGESET_CONTENT_ID_NAME + ": " + contentId).getBytes());
+        req.rawAppend(ODataStreamer.CRLF);
+      }
+      req.rawAppend(ODataStreamer.CRLF);
 
-            final InputStream payload = getPayload();
-            if (payload != null) {
-                req.rawAppend(IOUtils.toByteArray(getPayload()));
-            }
-        } catch (IOException e) {
-            throw new IllegalStateException(e);
-        }
+      final InputStream payload = getPayload();
+      if (payload != null) {
+        req.rawAppend(IOUtils.toByteArray(getPayload()));
+      }
+    } catch (IOException e) {
+      throw new IllegalStateException(e);
     }
+  }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/ODataRequestImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/ODataRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/ODataRequestImpl.java
index d088e97..2e60a7d 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/ODataRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/ODataRequestImpl.java
@@ -42,6 +42,10 @@ import org.apache.olingo.client.api.communication.header.ODataHeaderValues;
 import org.apache.olingo.client.api.communication.header.ODataHeaders;
 import org.apache.olingo.client.api.communication.request.ODataRequest;
 import org.apache.olingo.client.api.communication.request.ODataStreamer;
+import org.apache.olingo.client.api.communication.request.batch.v3.BatchRequestFactory;
+import org.apache.olingo.client.api.communication.request.cud.v3.CUDRequestFactory;
+import org.apache.olingo.client.api.communication.request.invoke.v3.InvokeRequestFactory;
+import org.apache.olingo.client.api.communication.request.streamed.v3.StreamedRequestFactory;
 import org.apache.olingo.client.api.communication.response.ODataResponse;
 import org.apache.olingo.client.api.format.ODataMediaFormat;
 import org.apache.olingo.client.api.format.ODataPubFormat;
@@ -51,6 +55,7 @@ import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.client.core.data.JSONErrorImpl;
 import org.apache.olingo.client.core.data.XMLErrorImpl;
 import org.apache.olingo.client.api.data.ODataError;
+import org.apache.olingo.client.api.format.Format;
 import org.apache.olingo.client.core.communication.header.ODataHeadersImpl;
 import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
 import org.slf4j.Logger;
@@ -66,7 +71,7 @@ import org.slf4j.LoggerFactory;
  * @see InvokeRequestFactory
  * @see StreamedRequestFactory
  */
-public class ODataRequestImpl<T extends Enum<T>> implements ODataRequest {
+public class ODataRequestImpl<T extends Format> implements ODataRequest {
 
   /**
    * Logger.
@@ -251,7 +256,7 @@ public class ODataRequestImpl<T extends Enum<T>> implements ODataRequest {
   @Override
   public String getAccept() {
     final String acceptHead = odataHeaders.getHeader(HeaderName.accept);
-    return StringUtils.isBlank(acceptHead) ? getDefaultFormat().toString() : acceptHead;
+    return StringUtils.isBlank(acceptHead) ? getDefaultFormat().toString(odataClient.getServiceVersion()) : acceptHead;
   }
 
   /**
@@ -284,7 +289,8 @@ public class ODataRequestImpl<T extends Enum<T>> implements ODataRequest {
   @Override
   public String getContentType() {
     final String contentTypeHead = odataHeaders.getHeader(HeaderName.contentType);
-    return StringUtils.isBlank(contentTypeHead) ? getDefaultFormat().toString() : contentTypeHead;
+    return StringUtils.isBlank(contentTypeHead)
+            ? getDefaultFormat().toString(odataClient.getServiceVersion()) : contentTypeHead;
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/ODataInvokeRequestImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/ODataInvokeRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/ODataInvokeRequestImpl.java
index c6355e4..abef76c 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/ODataInvokeRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/invoke/ODataInvokeRequestImpl.java
@@ -100,7 +100,7 @@ public class ODataInvokeRequestImpl<T extends ODataInvokeResult>
   public void setFormat(final ODataPubFormat format) {
     final String _format = (reference.isAssignableFrom(ODataProperty.class) && format == ODataPubFormat.ATOM)
             ? ODataFormat.XML.toString()
-            : format.toString();
+            : format.toString(odataClient.getServiceVersion());
     setAccept(_format);
     setContentType(_format);
   }
@@ -163,7 +163,7 @@ public class ODataInvokeRequestImpl<T extends ODataInvokeResult>
       } else if (this.method == HttpMethod.POST) {
         ((HttpPost) request).setEntity(URIUtils.buildInputStreamEntity(odataClient, input));
 
-        setContentType(ODataPubFormat.JSON.toString());
+        setContentType(ODataPubFormat.JSON.toString(odataClient.getServiceVersion()));
       }
     }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/AbstractODataRetrieveRequest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/AbstractODataRetrieveRequest.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/AbstractODataRetrieveRequest.java
index fe51722..628e836 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/AbstractODataRetrieveRequest.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/AbstractODataRetrieveRequest.java
@@ -26,6 +26,7 @@ import org.apache.olingo.client.api.CommonODataClient;
 import org.apache.olingo.client.api.communication.request.ODataBatchableRequest;
 import org.apache.olingo.client.api.communication.request.retrieve.ODataRetrieveRequest;
 import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
+import org.apache.olingo.client.api.format.Format;
 import org.apache.olingo.client.api.http.HttpMethod;
 import org.apache.olingo.client.core.communication.request.AbstractODataBasicRequest;
 import org.apache.olingo.client.core.communication.response.AbstractODataResponse;
@@ -33,7 +34,7 @@ import org.apache.olingo.client.core.communication.response.AbstractODataRespons
 /**
  * This is an abstract representation of an OData retrieve query request returning one or more result item.
  */
-public abstract class AbstractODataRetrieveRequest<V, T extends Enum<T>>
+public abstract class AbstractODataRetrieveRequest<V, T extends Format>
         extends AbstractODataBasicRequest<ODataRetrieveResponse<V>, T>
         implements ODataRetrieveRequest<V, T>, ODataBatchableRequest {
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataRawRequestImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataRawRequestImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataRawRequestImpl.java
index 4226cc2..777d86a 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataRawRequestImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/retrieve/ODataRawRequestImpl.java
@@ -92,7 +92,7 @@ public class ODataRawRequestImpl extends ODataRequestImpl<ODataPubFormat>
           this.close();
         }
       }
-
+      
       return odataClient.getReader().read(new ByteArrayInputStream(obj), getContentType(), reference);
     }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractODataStreamedEntityRequest.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractODataStreamedEntityRequest.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractODataStreamedEntityRequest.java
index d19d0d5..c7f7c52 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractODataStreamedEntityRequest.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/communication/request/streamed/AbstractODataStreamedEntityRequest.java
@@ -48,7 +48,7 @@ public abstract class AbstractODataStreamedEntityRequest<V extends ODataResponse
   public AbstractODataStreamedEntityRequest(final CommonODataClient odataClient, final HttpMethod method,
           URI uri) {
     super(odataClient, method, uri);
-    setAccept(getFormat().toString());
+    setAccept(getFormat().toString(odataClient.getServiceVersion()));
   }
 
   /**
@@ -65,6 +65,6 @@ public abstract class AbstractODataStreamedEntityRequest<V extends ODataResponse
   @Override
   public final void setFormat(final ODataPubFormat format) {
     this.format = format;
-    setAccept(format.toString());
+    setAccept(format.toString(odataClient.getServiceVersion()));
   }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/client-core/src/main/java/org/apache/olingo/client/core/data/AbstractJsonDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/data/AbstractJsonDeserializer.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/data/AbstractJsonDeserializer.java
index 74b29fb..3aca585 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/data/AbstractJsonDeserializer.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/data/AbstractJsonDeserializer.java
@@ -57,7 +57,7 @@ abstract class AbstractJsonDeserializer<T> extends ODataJacksonDeserializer<T> {
   }
 
   private ODataPropertyType guessPropertyType(final JsonNode node) {
-    ODataPropertyType type = null;
+    final ODataPropertyType type;
 
     if (node.isValueNode() || node.isNull()) {
       type = ODataPropertyType.PRIMITIVE;
@@ -73,7 +73,7 @@ abstract class AbstractJsonDeserializer<T> extends ODataJacksonDeserializer<T> {
   }
 
   private Value fromPrimitive(final JsonNode node, final EdmTypeInfo typeInfo) {
-    Value value = null;
+    final Value value;
 
     if (node.isNull()) {
       value = new NullValueImpl();
@@ -172,5 +172,4 @@ abstract class AbstractJsonDeserializer<T> extends ODataJacksonDeserializer<T> {
         property.setValue(new PrimitiveValueImpl(StringUtils.EMPTY));
     }
   }
-
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/client-core/src/main/java/org/apache/olingo/client/core/data/AtomDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/data/AtomDeserializer.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/data/AtomDeserializer.java
index 8893b91..835d174 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/data/AtomDeserializer.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/data/AtomDeserializer.java
@@ -153,7 +153,6 @@ public class AtomDeserializer extends AbstractAtomDealer {
 
   private void properties(final XMLEventReader reader, final StartElement start, final AtomEntryImpl entry)
           throws XMLStreamException {
-
     boolean foundEndProperties = false;
     while (reader.hasNext() && !foundEndProperties) {
       final XMLEvent event = reader.nextEvent();
@@ -316,7 +315,6 @@ public class AtomDeserializer extends AbstractAtomDealer {
     boolean foundEndFeed = false;
     while (reader.hasNext() && !foundEndFeed) {
       final XMLEvent event = reader.nextEvent();
-
       if (event.isStartElement()) {
         if (countQName.equals(event.asStartElement().getName())) {
           count(reader, event.asStartElement(), feed);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/client-core/src/main/java/org/apache/olingo/client/core/data/AtomPropertyDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/data/AtomPropertyDeserializer.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/data/AtomPropertyDeserializer.java
index 884d815..42d2504 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/data/AtomPropertyDeserializer.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/data/AtomPropertyDeserializer.java
@@ -139,7 +139,7 @@ class AtomPropertyDeserializer extends AbstractAtomDealer {
       }
     }
 
-    ODataPropertyType type = null;
+    final ODataPropertyType type;
     if (child == null) {
       type = ODataPropertyType.PRIMITIVE;
     } else {
@@ -168,16 +168,19 @@ class AtomPropertyDeserializer extends AbstractAtomDealer {
     property.setName(start.getName().getLocalPart());
 
     final Attribute typeAttr = start.getAttributeByName(this.typeQName);
-    if (typeAttr != null) {
-      property.setType(typeAttr.getValue());
-    }
 
     Value value;
     final Attribute nullAttr = start.getAttributeByName(this.nullQName);
+    final String typeAttrValue = typeAttr == null ? null : typeAttr.getValue();
+
     if (nullAttr == null) {
-      final EdmTypeInfo typeInfo = StringUtils.isBlank(property.getType())
+      final EdmTypeInfo typeInfo = StringUtils.isBlank(typeAttrValue)
               ? null
-              : new EdmTypeInfo.Builder().setTypeExpression(property.getType()).build();
+              : new EdmTypeInfo.Builder().setTypeExpression(typeAttrValue).build();
+
+      if (typeInfo != null) {
+        property.setType(typeInfo.getTypeExpression());
+      }
 
       final ODataPropertyType propType = typeInfo == null
               ? guessPropertyType(reader)
@@ -207,6 +210,7 @@ class AtomPropertyDeserializer extends AbstractAtomDealer {
     } else {
       value = new NullValueImpl();
     }
+
     property.setValue(value);
 
     return property;

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/client-core/src/main/java/org/apache/olingo/client/core/data/JSONGeoValueDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/data/JSONGeoValueDeserializer.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/data/JSONGeoValueDeserializer.java
index eebfef3..c77369a 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/data/JSONGeoValueDeserializer.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/data/JSONGeoValueDeserializer.java
@@ -60,7 +60,7 @@ class JSONGeoValueDeserializer {
   private MultiPoint multipoint(final Iterator<JsonNode> itor, final EdmPrimitiveTypeKind type,
           final String crs) {
 
-    MultiPoint multiPoint = null;
+    final MultiPoint multiPoint;
 
     if (itor.hasNext()) {
       final List<Point> points = new ArrayList<Point>();
@@ -79,7 +79,7 @@ class JSONGeoValueDeserializer {
   private LineString lineString(final Iterator<JsonNode> itor, final EdmPrimitiveTypeKind type,
           final String crs) {
 
-    LineString lineString = null;
+    final LineString lineString;
 
     if (itor.hasNext()) {
       final List<Point> points = new ArrayList<Point>();
@@ -98,7 +98,7 @@ class JSONGeoValueDeserializer {
   private MultiLineString multiLineString(final Iterator<JsonNode> itor, final EdmPrimitiveTypeKind type,
           final String crs) {
 
-    MultiLineString multiLineString = null;
+    final MultiLineString multiLineString;
 
     if (itor.hasNext()) {
       final List<LineString> lineStrings = new ArrayList<LineString>();
@@ -147,7 +147,7 @@ class JSONGeoValueDeserializer {
   private MultiPolygon multiPolygon(final Iterator<JsonNode> itor, final EdmPrimitiveTypeKind type,
           final String crs) {
 
-    MultiPolygon multiPolygon = null;
+    final MultiPolygon multiPolygon;
 
     if (itor.hasNext()) {
       final List<Polygon> polygons = new ArrayList<Polygon>();
@@ -166,7 +166,7 @@ class JSONGeoValueDeserializer {
   private GeospatialCollection collection(final Iterator<JsonNode> itor, final EdmPrimitiveTypeKind type,
           final String crs) {
 
-    GeospatialCollection collection = null;
+    final GeospatialCollection collection;
 
     if (itor.hasNext()) {
       final List<Geospatial> geospatials = new ArrayList<Geospatial>();
@@ -262,5 +262,4 @@ class JSONGeoValueDeserializer {
 
     return value;
   }
-
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmActionImportImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmActionImportImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmActionImportImpl.java
index 3827418..bf047af 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmActionImportImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmActionImportImpl.java
@@ -19,7 +19,6 @@
 package org.apache.olingo.client.core.edm;
 
 import org.apache.olingo.client.api.edm.xml.v4.ActionImport;
-import org.apache.olingo.client.core.edm.EdmTypeInfo;
 import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.edm.EdmAction;
 import org.apache.olingo.commons.api.edm.EdmActionImport;

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmOperationImpl.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmOperationImpl.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmOperationImpl.java
index f54d6c1..da29a68 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmOperationImpl.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmOperationImpl.java
@@ -70,12 +70,12 @@ public abstract class EdmOperationImpl extends AbstractEdmOperation {
 
   @Override
   public FullQualifiedName getBindingParameterTypeFqn() {
-    FullQualifiedName fqn = null;
+    FullQualifiedName bpfqn = null;
     final EdmParameter bindingParam = getBindingParameter();
     if (bindingParam != null) {
-      fqn = new FullQualifiedName(bindingParam.getType().getNamespace(), bindingParam.getType().getName());
+      bpfqn = new FullQualifiedName(bindingParam.getType().getNamespace(), bindingParam.getType().getName());
     }
-    return fqn;
+    return bpfqn;
   }
 
   @Override
@@ -85,6 +85,6 @@ public abstract class EdmOperationImpl extends AbstractEdmOperation {
     if (bindingParam != null) {
       result = bindingParam.isCollection();
     }
-    return null;
+    return result;
   }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmTypeInfo.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmTypeInfo.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmTypeInfo.java
index 461e829..abf1a54 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmTypeInfo.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/edm/EdmTypeInfo.java
@@ -23,6 +23,7 @@ import org.apache.olingo.commons.api.edm.Edm;
 import org.apache.olingo.commons.api.edm.EdmComplexType;
 import org.apache.olingo.commons.api.edm.EdmEntityType;
 import org.apache.olingo.commons.api.edm.EdmEnumType;
+import org.apache.olingo.commons.api.edm.EdmPrimitiveType;
 import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
 import org.apache.olingo.commons.api.edm.FullQualifiedName;
 import org.slf4j.Logger;
@@ -56,12 +57,11 @@ public class EdmTypeInfo {
     }
 
     public EdmTypeInfo build() {
-      return new EdmTypeInfo(edm, typeExpression.indexOf('.') == -1
+      return new EdmTypeInfo(edm, typeExpression.indexOf('.') == -1 && StringUtils.isNotBlank(defaultNamespace)
               ? defaultNamespace + "." + typeExpression
               : typeExpression);
     }
   }
-
   private final Edm edm;
 
   private final String typeExpression;
@@ -80,7 +80,6 @@ public class EdmTypeInfo {
 
   private EdmTypeInfo(final Edm edm, final String typeExpression) {
     this.edm = edm;
-    this.typeExpression = typeExpression;
 
     String baseType;
     final int collStartIdx = typeExpression.indexOf("Collection(");
@@ -97,16 +96,30 @@ public class EdmTypeInfo {
       baseType = typeExpression.substring(collStartIdx + 11, collEndIdx);
     }
 
+
+    baseType = baseType.replaceAll("^#", "");
+
+    final String typeName;
+    final String namespace;
+
     final int lastDotIdx = baseType.lastIndexOf('.');
     if (lastDotIdx == -1) {
-      throw new IllegalArgumentException("Cannot find namespace or alias in " + typeExpression);
+      namespace = EdmPrimitiveType.EDM_NAMESPACE;
+      typeName = baseType;
+      baseType = new FullQualifiedName(EdmPrimitiveType.EDM_NAMESPACE, baseType).toString();
+    } else {
+      namespace = baseType.substring(0, lastDotIdx);
+      typeName = baseType.substring(lastDotIdx + 1);
     }
-    final String namespace = baseType.substring(0, lastDotIdx);
-    final String typeName = baseType.substring(lastDotIdx + 1);
+
     if (StringUtils.isBlank(typeName)) {
       throw new IllegalArgumentException("Null or empty type name in " + typeExpression);
     }
 
+    final StringBuilder exp = new StringBuilder();
+    exp.append(baseType);
+
+    this.typeExpression = (this.collection ? exp.insert(0, "Collection(").append(")") : exp).toString();
     this.fullQualifiedName = new FullQualifiedName(namespace, typeName);
 
     try {
@@ -168,5 +181,4 @@ public class EdmTypeInfo {
   public EdmEntityType getEntityType() {
     return entityType;
   }
-
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/AbstractODataBinder.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/AbstractODataBinder.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/AbstractODataBinder.java
index 2c2cdea..09c39ef 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/AbstractODataBinder.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/AbstractODataBinder.java
@@ -268,7 +268,7 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
     }
 
     final URI base = defaultBaseURI == null ? resource.getBaseURI() : defaultBaseURI;
-
+    
     final URI next = resource.getNext();
 
     final ODataEntitySet entitySet = next == null
@@ -282,7 +282,7 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
     for (Entry entryResource : resource.getEntries()) {
       entitySet.addEntity(getODataEntity(entryResource));
     }
-
+    
     return entitySet;
   }
 
@@ -310,11 +310,11 @@ public abstract class AbstractODataBinder implements CommonODataBinder {
     if (StringUtils.isNotBlank(resource.getETag())) {
       entity.setETag(resource.getETag());
     }
-
+    
     if (resource.getEditLink() != null) {
       entity.setEditLink(URIUtils.getURI(base, resource.getEditLink().getHref()));
     }
-
+    
     for (Link link : resource.getAssociationLinks()) {
       entity.addLink(client.getObjectFactory().newAssociationLink(link.getTitle(), base, link.getHref()));
     }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/AbstractODataDeserializer.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/AbstractODataDeserializer.java b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/AbstractODataDeserializer.java
index 67acc09..103f81d 100644
--- a/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/AbstractODataDeserializer.java
+++ b/lib/client-core/src/main/java/org/apache/olingo/client/core/op/impl/AbstractODataDeserializer.java
@@ -103,5 +103,4 @@ public abstract class AbstractODataDeserializer extends AbstractJacksonTool impl
       throw new IllegalArgumentException("While deserializing " + reference.getName(), e);
     }
   }
-
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityRetrieveTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityRetrieveTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityRetrieveTestITCase.java
index 6637346..c69b469 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityRetrieveTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntityRetrieveTestITCase.java
@@ -148,7 +148,7 @@ public class EntityRetrieveTestITCase extends AbstractTestITCase {
             appendEntitySetSegment("Car").appendKeySegment(16);
 
     final ODataRawRequest req = client.getRetrieveRequestFactory().getRawRequest(uriBuilder.build());
-    req.setFormat(format.toString());
+    req.setFormat(format.toString(client.getServiceVersion()));
 
     final ODataRawResponse res = req.execute();
     assertNotNull(res);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntitySetTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntitySetTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntitySetTestITCase.java
index 35cc3d6..3e69aff 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntitySetTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/EntitySetTestITCase.java
@@ -138,7 +138,7 @@ public class EntitySetTestITCase extends AbstractTestITCase {
     uriBuilder.appendEntitySetSegment("Car");
 
     final ODataRawRequest req = client.getRetrieveRequestFactory().getRawRequest(uriBuilder.build());
-    req.setFormat(format.toString());
+    req.setFormat(format.toString(client.getServiceVersion()));
 
     final ODataRawResponse res = req.execute();
     assertNotNull(res);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/QueryOptionsTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/QueryOptionsTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/QueryOptionsTestITCase.java
index 3501482..21cf9ae 100644
--- a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/QueryOptionsTestITCase.java
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v3/QueryOptionsTestITCase.java
@@ -107,7 +107,8 @@ public class QueryOptionsTestITCase extends AbstractTestITCase {
 
     final ODataRetrieveResponse<ODataEntity> res = req.execute();
     assertNotNull(res);
-    assertTrue(res.getContentType().replaceAll(" ", "").startsWith(ODataPubFormat.JSON.toString()));
+    assertTrue(res.getContentType().replaceAll(" ", "").
+            startsWith(ODataPubFormat.JSON.toString(client.getServiceVersion())));
   }
 
   /**

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/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 46a59bd..a745380 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
@@ -35,8 +35,8 @@ public abstract class AbstractTestITCase extends org.apache.olingo.client.core.i
 
   @BeforeClass
   public static void setUpODataServiceRoot() throws IOException {
-    testStaticServiceRootURL = "http://localhost:9080/StaticService/V30/Static.svc";
-    testLargeModelServiceRootURL = "http://localhost:9080/StaticService/V30/Static.svc/large";
+    testStaticServiceRootURL = "http://localhost:9080/StaticService/V40/Static.svc";
+    testLargeModelServiceRootURL = "http://localhost:9080/StaticService/V40/Static.svc/large";
     testAuthServiceRootURL = "http://localhost:9080/DefaultService.svc";
   }
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntitySetTestITCase.java
----------------------------------------------------------------------
diff --git a/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntitySetTestITCase.java b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntitySetTestITCase.java
new file mode 100644
index 0000000..9e2527a
--- /dev/null
+++ b/lib/client-core/src/test/java/org/apache/olingo/client/core/it/v4/EntitySetTestITCase.java
@@ -0,0 +1,152 @@
+/*
+ * 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 java.io.IOException;
+import org.apache.olingo.client.api.communication.request.retrieve.ODataEntitySetIteratorRequest;
+import org.apache.olingo.client.api.communication.request.retrieve.ODataEntitySetRequest;
+import org.apache.olingo.client.api.communication.request.retrieve.ODataRawRequest;
+import org.apache.olingo.client.api.communication.response.ODataRawResponse;
+import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
+import org.apache.olingo.client.api.domain.ODataEntitySet;
+import org.apache.olingo.client.api.domain.ODataEntitySetIterator;
+import org.apache.olingo.client.api.format.ODataPubFormat;
+import org.apache.olingo.client.api.uri.CommonURIBuilder;
+import org.apache.olingo.client.core.op.impl.ResourceFactory;
+import static org.junit.Assert.assertNotNull;
+import org.junit.Ignore;
+import org.junit.Test;
+
+/**
+ * This is the unit test class to check basic feed operations.
+ */
+public class EntitySetTestITCase extends AbstractTestITCase {
+
+  protected String getServiceRoot() {
+    return testStaticServiceRootURL;
+  }
+
+  @Test
+  public void rawRequestAsAtom() throws IOException {
+    rawRequest(ODataPubFormat.ATOM);
+  }
+
+  @Test
+  @Ignore
+  public void rawRequestAsJSON() throws IOException {
+    rawRequest(ODataPubFormat.JSON);
+  }
+
+  @Test
+  public void readODataEntitySetIteratorFromAtom() {
+    readODataEntitySetIterator(ODataPubFormat.ATOM);
+  }
+
+  @Test
+  @Ignore
+  public void readODataEntitySetIteratorFromJSON() {
+    readODataEntitySetIterator(ODataPubFormat.JSON);
+  }
+
+  @Test
+  @Ignore
+  public void readODataEntitySetIteratorFromJSONFullMeta() {
+    readODataEntitySetIterator(ODataPubFormat.JSON_FULL_METADATA);
+  }
+
+  @Test
+  @Ignore
+  public void readODataEntitySetIteratorFromJSONNoMeta() {
+    readODataEntitySetIterator(ODataPubFormat.JSON_NO_METADATA);
+  }
+
+  @Test
+  public void readODataEntitySetWithNextFromAtom() {
+    readEntitySetWithNextLink(ODataPubFormat.ATOM);
+  }
+
+  @Test
+  @Ignore
+  public void readODataEntitySetWithNextFromJSON() {
+    readEntitySetWithNextLink(ODataPubFormat.JSON_FULL_METADATA);
+  }
+
+  private void readEntitySetWithNextLink(final ODataPubFormat format) {
+    final CommonURIBuilder<?> uriBuilder = client.getURIBuilder(getServiceRoot());
+    uriBuilder.appendEntitySetSegment("People");
+
+    final ODataEntitySetRequest req = client.getRetrieveRequestFactory().getEntitySetRequest(uriBuilder.build());
+    req.setFormat(format);
+
+    final ODataRetrieveResponse<ODataEntitySet> res = req.execute();
+    final ODataEntitySet feed = res.getBody();
+
+    assertNotNull(feed);
+
+    debugFeed(client.getBinder().getFeed(feed, ResourceFactory.feedClassForFormat(
+            ODataPubFormat.ATOM == format)), "Just retrieved feed");
+
+    assertEquals(5, feed.getEntities().size());
+//    assertNotNull(feed.getNext());
+
+//    final URI expected = URI.create(getServiceRoot() + "/Customer?$skiptoken=-9");
+//    final URI found = URIUtils.getURI(getServiceRoot(), feed.getNext().toASCIIString());
+
+//    assertEquals(expected, found);
+  }
+
+  private void readODataEntitySetIterator(final ODataPubFormat format) {
+    final CommonURIBuilder<?> uriBuilder = client.getURIBuilder(getServiceRoot());
+    uriBuilder.appendEntitySetSegment("People");
+
+    final ODataEntitySetIteratorRequest req =
+            client.getRetrieveRequestFactory().getEntitySetIteratorRequest(uriBuilder.build());
+    req.setFormat(format);
+
+    final ODataRetrieveResponse<ODataEntitySetIterator> res = req.execute();
+    final ODataEntitySetIterator feedIterator = res.getBody();
+
+    assertNotNull(feedIterator);
+
+    int count = 0;
+
+    while (feedIterator.hasNext()) {
+      assertNotNull(feedIterator.next());
+      count++;
+    }
+    assertEquals(5, count);
+//    assertTrue(feedIterator.getNext().toASCIIString().endsWith("Customer?$skiptoken=-9"));
+  }
+
+  private void rawRequest(final ODataPubFormat format) {
+    final CommonURIBuilder<?> uriBuilder = client.getURIBuilder(getServiceRoot());
+    uriBuilder.appendEntitySetSegment("People");
+
+    final ODataRawRequest req = client.getRetrieveRequestFactory().getRawRequest(uriBuilder.build());
+    req.setFormat(format.toString(client.getServiceVersion()));
+
+    final ODataRawResponse res = req.execute();
+    assertNotNull(res);
+
+    final ODataEntitySet entitySet = res.getBodyAs(ODataEntitySet.class);
+    assertNotNull(entitySet);
+  }
+}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/Edm.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/Edm.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/Edm.java
index c7aeff0..32e6fc8 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/Edm.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/Edm.java
@@ -26,92 +26,93 @@ import java.util.List;
  * Interface representing a Entity Data Model as described in the Conceptual Schema Definition.
  */
 public interface Edm {
-  
-  /**
-   * This method DOES NOT support lazy loading. All schemas are loaded completely!
-   * @return all schemas defined for this EDM
-   */
-  List<EdmSchema> getSchemas();
 
-  /**
-   * Get entity container by full qualified name.
-   * <br/>
-   * See {@link EdmEntityContainer} for more information.
-   *
-   * @param name
-   * @return {@link EdmEntityContainer}
-   */
-  EdmEntityContainer getEntityContainer(FullQualifiedName name);
+    /**
+     * This method DOES NOT support lazy loading. All schemas are loaded completely!
+     *
+     * @return all schemas defined for this EDM
+     */
+    List<EdmSchema> getSchemas();
 
-  /**
-   * Get enum type by full qualified name.
-   * <br/>
-   * See {@link EdmEnumType} for more information
-   *
-   * @param name
-   * @return {@link EdmEnumType}
-   */
-  EdmEnumType getEnumType(FullQualifiedName name);
+    /**
+     * Get entity container by full qualified name.
+     * <br/>
+     * See {@link EdmEntityContainer} for more information.
+     *
+     * @param name
+     * @return {@link EdmEntityContainer}
+     */
+    EdmEntityContainer getEntityContainer(FullQualifiedName name);
 
-  /**
-   * Get a type definition by full qualified name.
-   * <br/>
-   * See {@link EdmTypeDefinition} for more information
-   *
-   * @param name
-   * @return {@link EdmTypeDefinition}
-   */
-  EdmTypeDefinition getTypeDefinition(FullQualifiedName name);
+    /**
+     * Get enum type by full qualified name.
+     * <br/>
+     * See {@link EdmEnumType} for more information
+     *
+     * @param name
+     * @return {@link EdmEnumType}
+     */
+    EdmEnumType getEnumType(FullQualifiedName name);
 
-  /**
-   * Get entity type by full qualified name.
-   * <br/>
-   * See {@link EdmEntityType} for more information.
-   *
-   * @param name
-   * @return {@link EdmEntityType}
-   */
-  EdmEntityType getEntityType(FullQualifiedName name);
+    /**
+     * Get a type definition by full qualified name.
+     * <br/>
+     * See {@link EdmTypeDefinition} for more information
+     *
+     * @param name
+     * @return {@link EdmTypeDefinition}
+     */
+    EdmTypeDefinition getTypeDefinition(FullQualifiedName name);
 
-  /**
-   * Get complex type by full qualified name..
-   * <br/>
-   * See {@link EdmComplexType} for more information.
-   *
-   * @param name
-   * @return {@link EdmComplexType}
-   */
-  EdmComplexType getComplexType(FullQualifiedName name);
+    /**
+     * Get entity type by full qualified name.
+     * <br/>
+     * See {@link EdmEntityType} for more information.
+     *
+     * @param name
+     * @return {@link EdmEntityType}
+     */
+    EdmEntityType getEntityType(FullQualifiedName name);
 
-  /**
-   * Get Action by full qualified name and binding parameter type.
-   *
-   * @param actionName must not be null
-   * @param bindingParameterTypeName may be null if it is an unbound action
-   * @param isBindingParameterCollection may be null if it is an unbound action
-   * @return {@link EdmAction}
-   */
-  EdmAction getAction(FullQualifiedName actionName, FullQualifiedName bindingParameterTypeName,
-          Boolean isBindingParameterCollection);
+    /**
+     * Get complex type by full qualified name..
+     * <br/>
+     * See {@link EdmComplexType} for more information.
+     *
+     * @param name
+     * @return {@link EdmComplexType}
+     */
+    EdmComplexType getComplexType(FullQualifiedName name);
 
-  /**
-   * Get Function by full qualified name and binding parameter type and binding parameter names.
-   *
-   * @param functionName
-   * @param bindingParameterTypeName may be null if it is an unbound function
-   * @param isBindingParameterCollection may be null if it is an unbound function
-   * @param parameterNames may be null if it is an unbound function
-   * @return {@link EdmFunction}
-   */
-  EdmFunction getFunction(FullQualifiedName functionName, FullQualifiedName bindingParameterTypeName,
-          Boolean isBindingParameterCollection, List<String> parameterNames);
+    /**
+     * Get Action by full qualified name and binding parameter type.
+     *
+     * @param actionName must not be null
+     * @param bindingParameterTypeName may be null if it is an unbound action
+     * @param isBindingParameterCollection may be null if it is an unbound action
+     * @return {@link EdmAction}
+     */
+    EdmAction getAction(FullQualifiedName actionName, FullQualifiedName bindingParameterTypeName,
+            Boolean isBindingParameterCollection);
 
-  /**
-   * Get service metadata.
-   * <br/>
-   * See {@link EdmServiceMetadata} for more information.
-   *
-   * @return {@link EdmServiceMetadata}
-   */
-  EdmServiceMetadata getServiceMetadata();
+    /**
+     * Get Function by full qualified name and binding parameter type and binding parameter names.
+     *
+     * @param functionName
+     * @param bindingParameterTypeName may be null if it is an unbound function
+     * @param isBindingParameterCollection may be null if it is an unbound function
+     * @param parameterNames may be null if it is an unbound function
+     * @return {@link EdmFunction}
+     */
+    EdmFunction getFunction(FullQualifiedName functionName, FullQualifiedName bindingParameterTypeName,
+            Boolean isBindingParameterCollection, List<String> parameterNames);
+
+    /**
+     * Get service metadata.
+     * <br/>
+     * See {@link EdmServiceMetadata} for more information.
+     *
+     * @return {@link EdmServiceMetadata}
+     */
+    EdmServiceMetadata getServiceMetadata();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmActionImport.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmActionImport.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmActionImport.java
index 428fbdf..a302b9e 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmActionImport.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/EdmActionImport.java
@@ -23,5 +23,5 @@ package org.apache.olingo.commons.api.edm;
  */
 public interface EdmActionImport extends EdmOperationImport {
 
-  EdmAction getAction();
+    EdmAction getAction();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/constants/ODataServiceVersion.java
----------------------------------------------------------------------
diff --git a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/constants/ODataServiceVersion.java b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/constants/ODataServiceVersion.java
index f50d400..d637814 100644
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/constants/ODataServiceVersion.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/edm/constants/ODataServiceVersion.java
@@ -40,8 +40,6 @@ public enum ODataServiceVersion {
 
   public static final String NS_METADATA = "metadata";
 
-  public static final String NS_DATA = "data";
-
   public static final String NS_SCHEME = "scheme";
 
   public static final String NAVIGATION_LINK_REL = "navigationLinkRel";
@@ -70,8 +68,11 @@ public enum ODataServiceVersion {
 
     {
       put(NS_METADATA, "http://docs.oasis-open.org/odata/ns/metadata");
-      put(NS_DATA, "http://docs.oasis-open.org/odata/ns/data");
+      put(NS_DATASERVICES, "http://docs.oasis-open.org/odata/ns/data");
       put(NS_SCHEME, "http://docs.oasis-open.org/odata/ns/scheme");
+      put(NAVIGATION_LINK_REL, "http://docs.oasis-open.org/odata/ns/related/");
+      put(ASSOCIATION_LINK_REL, "http://docs.oasis-open.org/odata/ns/relatedlinks/");
+      put(MEDIA_EDIT_LINK_REL, "http://docs.oasis-open.org/odata/ns/edit-media/");
     }
   });
 

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmComplexType.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmComplexType.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmComplexType.java
index 346eb2e..732f29f 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmComplexType.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmComplexType.java
@@ -27,24 +27,29 @@ import org.apache.olingo.commons.api.edm.constants.EdmTypeKind;
 
 public abstract class AbstractEdmComplexType extends AbstractEdmStructuredType implements EdmComplexType {
 
-  public AbstractEdmComplexType(final Edm edm, final FullQualifiedName fqn, final FullQualifiedName baseTypeName) {
-    super(edm, fqn, EdmTypeKind.COMPLEX, baseTypeName);
-  }
+    public AbstractEdmComplexType(
+            final Edm edm,
+            final FullQualifiedName fqn,
+            final FullQualifiedName baseTypeName) {
+        super(edm, fqn, EdmTypeKind.COMPLEX, baseTypeName);
+    }
 
-  @Override
-  protected EdmStructuredType buildBaseType(final FullQualifiedName baseTypeName) {
-    EdmComplexType baseType = null;
-    if (baseTypeName != null) {
-      baseType = edm.getComplexType(baseTypeName);
-      if (baseType == null) {
-        throw new EdmException("Can't find base type with name: " + baseTypeName + " for complex type: " + getName());
-      }
+    @Override
+    protected EdmStructuredType buildBaseType(final FullQualifiedName baseTypeName) {
+        // TODO: check for comment
+        EdmComplexType baseType = null;
+        if (baseTypeName != null) {
+            baseType = edm.getComplexType(baseTypeName);
+            if (baseType == null) {
+                throw new EdmException("Can't find base type with name: " + baseTypeName + " for complex type: "
+                        + getName());
+            }
+        }
+        return baseType;
     }
-    return baseType;
-  }
 
-  @Override
-  public EdmComplexType getBaseType() {
-    return (EdmComplexType) baseType;
-  }
+    @Override
+    public EdmComplexType getBaseType() {
+        return (EdmComplexType) baseType;
+    }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/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 aba62ba..41eb368 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
@@ -33,119 +33,123 @@ import org.apache.olingo.commons.api.edm.FullQualifiedName;
 
 public abstract class AbstractEdmEntityContainer extends EdmNamedImpl implements EdmEntityContainer {
 
-  protected final FullQualifiedName entityContainerName;
+    protected final FullQualifiedName entityContainerName;
 
-  protected final Map<String, EdmSingleton> singletons = new HashMap<String, EdmSingleton>();
-  private boolean allSingletonsLoaded = false;
+    protected final Map<String, EdmSingleton> singletons = new HashMap<String, EdmSingleton>();
 
-  protected final Map<String, EdmEntitySet> entitySets = new HashMap<String, EdmEntitySet>();
-  private boolean allEntitySetsLoaded = false;
+    private boolean allSingletonsLoaded = false;
 
-  protected final Map<String, EdmActionImport> actionImports = new HashMap<String, EdmActionImport>();
-  private boolean allActionImportsLoaded = false;
+    protected final Map<String, EdmEntitySet> entitySets = new HashMap<String, EdmEntitySet>();
 
-  protected final Map<String, EdmFunctionImport> functionImports = new HashMap<String, EdmFunctionImport>();
-  private boolean allFunctionImportsLoaded = false;
+    private boolean allEntitySetsLoaded = false;
 
-  public AbstractEdmEntityContainer(final Edm edm, final FullQualifiedName entityContainerName) {
-    super(edm, entityContainerName.getName());
-    this.entityContainerName = entityContainerName;
-  }
+    protected final Map<String, EdmActionImport> actionImports = new HashMap<String, EdmActionImport>();
 
-  @Override
-  public String getNamespace() {
-    return entityContainerName.getNamespace();
-  }
+    private boolean allActionImportsLoaded = false;
 
-  protected abstract EdmSingleton createSingleton(String singletonName);
+    protected final Map<String, EdmFunctionImport> functionImports = new HashMap<String, EdmFunctionImport>();
 
-  @Override
-  public EdmSingleton getSingleton(final String singletonName) {
-    EdmSingleton singleton = singletons.get(singletonName);
-    if (singleton == null) {
-      singleton = createSingleton(singletonName);
-      singletons.put(singletonName, singleton);
+    private boolean allFunctionImportsLoaded = false;
+
+    public AbstractEdmEntityContainer(final Edm edm, final FullQualifiedName entityContainerName) {
+        super(edm, entityContainerName.getName());
+        this.entityContainerName = entityContainerName;
+    }
+
+    @Override
+    public String getNamespace() {
+        return entityContainerName.getNamespace();
     }
-    return singleton;
-  }
 
-  protected abstract EdmEntitySet createEntitySet(String entitySetName);
+    protected abstract EdmSingleton createSingleton(String singletonName);
 
-  @Override
-  public EdmEntitySet getEntitySet(final String entitySetName) {
-    EdmEntitySet entitySet = entitySets.get(entitySetName);
-    if (entitySet == null) {
-      entitySet = createEntitySet(entitySetName);
-      entitySets.put(entitySetName, entitySet);
+    @Override
+    public EdmSingleton getSingleton(final String singletonName) {
+        EdmSingleton singleton = singletons.get(singletonName);
+        if (singleton == null) {
+            singleton = createSingleton(singletonName);
+            singletons.put(singletonName, singleton);
+        }
+        return singleton;
     }
-    return entitySet;
-  }
 
-  protected abstract EdmActionImport createActionImport(String actionImportName);
+    protected abstract EdmEntitySet createEntitySet(String entitySetName);
 
-  @Override
-  public EdmActionImport getActionImport(final String actionImportName) {
-    EdmActionImport actionImport = actionImports.get(actionImportName);
-    if (actionImport == null) {
-      actionImport = createActionImport(actionImportName);
-      actionImports.put(actionImportName, actionImport);
+    @Override
+    public EdmEntitySet getEntitySet(final String entitySetName) {
+        EdmEntitySet entitySet = entitySets.get(entitySetName);
+        if (entitySet == null) {
+            entitySet = createEntitySet(entitySetName);
+            entitySets.put(entitySetName, entitySet);
+        }
+        return entitySet;
     }
-    return actionImport;
-  }
 
-  protected abstract EdmFunctionImport createFunctionImport(String functionImportName);
+    protected abstract EdmActionImport createActionImport(String actionImportName);
 
-  @Override
-  public EdmFunctionImport getFunctionImport(final String functionImportName) {
-    EdmFunctionImport functionImport = functionImports.get(functionImportName);
-    if (functionImport == null) {
-      functionImport = createFunctionImport(functionImportName);
-      functionImports.put(functionImportName, functionImport);
+    @Override
+    public EdmActionImport getActionImport(final String actionImportName) {
+        EdmActionImport actionImport = actionImports.get(actionImportName);
+        if (actionImport == null) {
+            actionImport = createActionImport(actionImportName);
+            actionImports.put(actionImportName, actionImport);
+        }
+        return actionImport;
     }
-    return functionImport;
-  }
-
-  @Override
-  public List<EdmEntitySet> getEntitySets() {
-    if (!allEntitySetsLoaded) {
-      loadAllEntitySets();
-      allEntitySetsLoaded = true;
+
+    protected abstract EdmFunctionImport createFunctionImport(String functionImportName);
+
+    @Override
+    public EdmFunctionImport getFunctionImport(final String functionImportName) {
+        EdmFunctionImport functionImport = functionImports.get(functionImportName);
+        if (functionImport == null) {
+            functionImport = createFunctionImport(functionImportName);
+            functionImports.put(functionImportName, functionImport);
+        }
+        return functionImport;
+    }
+
+    @Override
+    public List<EdmEntitySet> getEntitySets() {
+        if (!allEntitySetsLoaded) {
+            loadAllEntitySets();
+            allEntitySetsLoaded = true;
+        }
+        return new ArrayList<EdmEntitySet>(entitySets.values());
     }
-    return new ArrayList<EdmEntitySet>(entitySets.values());
-  }
 
-  protected abstract void loadAllEntitySets();
+    protected abstract void loadAllEntitySets();
 
-  @Override
-  public List<EdmFunctionImport> getFunctionImports() {
-    if (!allFunctionImportsLoaded) {
-      loadAllFunctionImports();
-      allFunctionImportsLoaded = true;
+    @Override
+    public List<EdmFunctionImport> getFunctionImports() {
+        if (!allFunctionImportsLoaded) {
+            loadAllFunctionImports();
+            allFunctionImportsLoaded = true;
+        }
+        return new ArrayList<EdmFunctionImport>(functionImports.values());
     }
-    return new ArrayList<EdmFunctionImport>(functionImports.values());
-  }
 
-  protected abstract void loadAllFunctionImports();
+    protected abstract void loadAllFunctionImports();
 
-  @Override
-  public List<EdmSingleton> getSingletons() {
-    if (!allSingletonsLoaded) {
-      loadAllSingletons();
-      allSingletonsLoaded = true;
+    @Override
+    public List<EdmSingleton> getSingletons() {
+        if (!allSingletonsLoaded) {
+            loadAllSingletons();
+            allSingletonsLoaded = true;
+        }
+        return new ArrayList<EdmSingleton>(singletons.values());
     }
-    return new ArrayList<EdmSingleton>(singletons.values());
-  }
 
-  protected abstract void loadAllSingletons();
+    protected abstract void loadAllSingletons();
 
-  @Override
-  public List<EdmActionImport> getActionImports() {
-    if (!allActionImportsLoaded) {
-      loadAllActionImports();
-      allActionImportsLoaded = true;
+    @Override
+    public List<EdmActionImport> getActionImports() {
+        if (!allActionImportsLoaded) {
+            loadAllActionImports();
+            allActionImportsLoaded = true;
+        }
+        return new ArrayList<EdmActionImport>(actionImports.values());
     }
-    return new ArrayList<EdmActionImport>(actionImports.values());
-  }
 
-  protected abstract void loadAllActionImports();
+    protected abstract void loadAllActionImports();
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/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 b848540..3c2f894 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,80 +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 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 void setParameters(final List<EdmParameter> _parameters) {
-    for (EdmParameter parameter : _parameters) {
-      parameters.put(parameter.getName(), parameter);
+    protected void setReturnType(final EdmReturnType returnType) {
+        this.returnType = returnType;
     }
-  }
-
-  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 EdmParameter getParameter(final String name) {
+        return parameters.get(name);
     }
-    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");
-      }
+
+    @Override
+    public List<String> getParameterNames() {
+        if (parameterNames == null) {
+            parameterNames = new ArrayList<String>(parameters.size());
+            for (String parameterName : parameters.keySet()) {
+                parameterNames.add(parameterName);
+            }
+        }
+        return parameterNames;
     }
-    return returnedEntitySet;
-  }
 
-  @Override
-  public EdmReturnType getReturnType() {
-    return returnType;
-  }
+    @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 boolean isBound() {
-    return isBound;
-  }
+    @Override
+    public EdmReturnType getReturnType() {
+        return returnType;
+    }
 
+    @Override
+    public boolean isBound() {
+        return isBound;
+    }
 }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/9aefb959/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmOperationImport.java
----------------------------------------------------------------------
diff --git a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmOperationImport.java b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmOperationImport.java
index 96aa49f..fe81533 100644
--- a/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmOperationImport.java
+++ b/lib/commons-core/src/main/java/org/apache/olingo/commons/core/edm/AbstractEdmOperationImport.java
@@ -27,37 +27,40 @@ import org.apache.olingo.commons.api.edm.Target;
 
 public abstract class AbstractEdmOperationImport extends EdmNamedImpl implements EdmOperationImport {
 
-  protected final EdmEntityContainer container;
-
-  private final Target entitySet;
-
-  private EdmEntitySet returnedEntitySet;
-
-  public AbstractEdmOperationImport(final Edm edm, final EdmEntityContainer container, final String name,
-          final Target entitySet) {
-
-    super(edm, name);
-    this.container = container;
-    this.entitySet = entitySet;
-  }
-
-  @Override
-  public EdmEntitySet getReturnedEntitySet() {
-    if (entitySet != null && returnedEntitySet == null) {
-      EdmEntityContainer entityContainer = edm.getEntityContainer(entitySet.getEntityContainer());
-      if (entityContainer == null) {
-        throw new EdmException("Can´t find entity container with name: " + entitySet.getEntityContainer());
-      }
-      returnedEntitySet = entityContainer.getEntitySet(entitySet.getTargetName());
-      if (returnedEntitySet == null) {
-        throw new EdmException("Can´t find entity set with name: " + entitySet.getTargetName());
-      }
+    protected final EdmEntityContainer container;
+
+    private final Target entitySet;
+
+    private EdmEntitySet returnedEntitySet;
+
+    public AbstractEdmOperationImport(
+            final Edm edm,
+            final EdmEntityContainer container,
+            final String name,
+            final Target entitySet) {
+
+        super(edm, name);
+        this.container = container;
+        this.entitySet = entitySet;
     }
-    return returnedEntitySet;
-  }
 
-  @Override
-  public EdmEntityContainer getEntityContainer() {
-    return container;
-  }
+    @Override
+    public EdmEntitySet getReturnedEntitySet() {
+        if (entitySet != null && returnedEntitySet == null) {
+            EdmEntityContainer entityContainer = edm.getEntityContainer(entitySet.getEntityContainer());
+            if (entityContainer == null) {
+                throw new EdmException("Can´t find entity container with name: " + entitySet.getEntityContainer());
+            }
+            returnedEntitySet = entityContainer.getEntitySet(entitySet.getTargetName());
+            if (returnedEntitySet == null) {
+                throw new EdmException("Can´t find entity set with name: " + entitySet.getTargetName());
+            }
+        }
+        return returnedEntitySet;
+    }
+
+    @Override
+    public EdmEntityContainer getEntityContainer() {
+        return container;
+    }
 }