You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by fm...@apache.org on 2014/07/16 11:27:20 UTC

[57/58] [abbrv] git commit: [OLINGO-353] fixed + merge

[OLINGO-353] fixed + merge


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

Branch: refs/heads/master
Commit: 5b3c3d34031c464fa614778539171f0278c85917
Parents: 87c87cb 44c4772
Author: fmartelli <fa...@gmail.com>
Authored: Wed Jul 16 11:24:30 2014 +0200
Committer: fmartelli <fa...@gmail.com>
Committed: Wed Jul 16 11:24:30 2014 +0200

----------------------------------------------------------------------
 LICENSE                                         |  202 ++++
 NOTICE                                          |    8 +
 README                                          |   64 ++
 dist/android-lib/pom.xml                        |  103 ++
 .../src/main/assembly/lib-assembly.xml          |   44 +
 dist/android-lib/src/main/resources/LICENSE     |    1 +
 dist/client-lib/pom.xml                         |  123 ++
 .../src/main/assembly/lib-assembly.xml          |   47 +
 dist/client-lib/src/main/resources/LICENSE      |  271 +++++
 dist/javadoc/pom.xml                            |   96 ++
 .../src/main/assembly/javadoc-assembly.xml      |   35 +
 dist/pom.xml                                    |   58 +
 dist/server-lib/pom.xml                         |  115 ++
 .../src/main/assembly/lib-assembly.xml          |   46 +
 dist/server-lib/src/main/resources/LICENSE      |  337 ++++++
 ext/client-core-android/pom.xml                 |    8 +-
 .../android/http/AndroidHttpClientFactory.java  |   43 +
 ext/client-proxy-android/pom.xml                |   28 +-
 .../apache/olingo/ext/proxy/api/AsyncCall.java  |    4 +-
 .../TransactionalPersistenceManagerImpl.java    |    5 +-
 fit/pom.xml                                     |   46 +-
 .../org/apache/olingo/fit/AbstractServices.java |   22 +-
 .../fit/UnsupportedMediaTypeException.java      |   12 +-
 .../apache/olingo/fit/V3ActionOverloading.java  |   59 +-
 .../org/apache/olingo/fit/V3KeyAsSegment.java   |    6 +-
 .../java/org/apache/olingo/fit/V3OpenType.java  |   49 +-
 .../org/apache/olingo/fit/V3PrimitiveKeys.java  |   10 +-
 .../java/org/apache/olingo/fit/V3Services.java  |  188 ++--
 .../main/java/org/apache/olingo/fit/V4Demo.java |   87 +-
 .../org/apache/olingo/fit/V4KeyAsSegment.java   |    3 +-
 .../java/org/apache/olingo/fit/V4NorthWind.java |    5 +-
 .../org/apache/olingo/fit/V4NorthWindExt.java   |    9 +-
 .../java/org/apache/olingo/fit/V4OAuth2.java    |   37 +
 .../java/org/apache/olingo/fit/V4OpenType.java  |   47 +-
 .../java/org/apache/olingo/fit/V4Services.java  |    8 +-
 .../org/apache/olingo/fit/V4Vocabularies.java   |   25 +-
 .../olingo/fit/rest/OAuth2InInterceptor.java    |   97 ++
 .../apache/olingo/fit/rest/OAuth2Provider.java  |  133 +++
 .../rest/ResolvingReferencesInterceptor.java    |   59 +
 .../fit/rest/ServiceNameResponseFilter.java     |   55 +
 .../fit/rest/StaticSecurityInterceptor.java     |   85 ++
 .../olingo/fit/rest/XHTTPMethodInterceptor.java |   47 +
 .../olingo/fit/utils/AbstractUtilities.java     |    2 +-
 .../apache/olingo/fit/utils/JSONUtilities.java  |   16 +-
 .../utils/ResolvingReferencesInterceptor.java   |   57 -
 .../fit/utils/XHTTPMethodInterceptor.java       |   45 -
 .../apache/olingo/fit/utils/XMLUtilities.java   |    3 +-
 fit/src/main/resources/META-INF/LICENSE         | 1047 ++++++++++++++++++
 .../main/webapp/WEB-INF/applicationContext.xml  |   37 +-
 .../fit/CXFOAuth2HttpUriRequestFactory.java     |  130 +++
 .../apache/olingo/fit/v3/ErrorTestITCase.java   |   13 +-
 .../olingo/fit/v4/AbstractTestITCase.java       |   29 +-
 .../olingo/fit/v4/EntityCreateTestITCase.java   |    4 +-
 .../olingo/fit/v4/KeyAsSegmentTestITCase.java   |   14 +-
 .../apache/olingo/fit/v4/OAuth2TestITCase.java  |  107 ++
 .../olingo/client/api/CommonConfiguration.java  |  261 -----
 .../olingo/client/api/CommonODataClient.java    |    2 +-
 .../apache/olingo/client/api/Configuration.java |  261 +++++
 .../request/batch/ODataBatchResponseItem.java   |    4 +-
 .../client/api/http/HttpClientFactory.java      |    4 +-
 .../client/api/http/HttpUriRequestFactory.java  |    2 +-
 .../olingo/client/api/v3/ODataClient.java       |    4 -
 .../olingo/client/api/v4/Configuration.java     |   26 -
 .../olingo/client/api/v4/ODataClient.java       |    4 -
 .../olingo/client/core/AbstractODataClient.java |    8 +
 .../olingo/client/core/Configuration.java       |  221 ----
 .../olingo/client/core/ConfigurationImpl.java   |  221 ++++
 .../olingo/client/core/ODataClientFactory.java  |    1 -
 .../request/AbstractODataRequest.java           |   37 +-
 .../communication/request/AbstractRequest.java  |   24 +-
 .../batch/AbstractODataBatchRequest.java        |   12 +-
 .../batch/AbstractODataBatchResponseItem.java   |    8 +-
 .../batch/ODataChangesetResponseItem.java       |    4 +-
 .../request/batch/ODataSingleRequestImpl.java   |    3 +-
 .../request/batch/ODataSingleResponseItem.java  |   14 +-
 .../request/batch/v3/ODataBatchRequestImpl.java |   25 +-
 .../request/batch/v4/ODataBatchRequestImpl.java |   27 +-
 .../request/cud/ODataDeleteRequestImpl.java     |   29 +-
 .../cud/ODataEntityCreateRequestImpl.java       |   27 +-
 .../cud/ODataEntityUpdateRequestImpl.java       |   47 +-
 .../cud/ODataPropertyUpdateRequestImpl.java     |   26 +-
 .../cud/ODataValueUpdateRequestImpl.java        |   25 +-
 .../cud/v3/ODataLinkCreateRequestImpl.java      |   20 +-
 .../cud/v3/ODataLinkUpdateRequestImpl.java      |   16 +-
 .../invoke/AbstractODataInvokeRequest.java      |   47 +-
 .../retrieve/AbstractMetadataRequestImpl.java   |    6 +-
 .../retrieve/AbstractODataRetrieveRequest.java  |   20 +-
 .../retrieve/EdmMetadataRequestImpl.java        |    3 +-
 .../retrieve/ODataEntityRequestImpl.java        |   27 +-
 .../ODataEntitySetIteratorRequestImpl.java      |   14 +-
 .../retrieve/ODataEntitySetRequestImpl.java     |   25 +-
 .../request/retrieve/ODataMediaRequestImpl.java |   21 +-
 .../retrieve/ODataPropertyRequestImpl.java      |   24 +-
 .../request/retrieve/ODataRawRequestImpl.java   |   23 +-
 .../ODataServiceDocumentRequestImpl.java        |   26 +-
 .../request/retrieve/ODataValueRequestImpl.java |   27 +-
 .../v3/ODataLinkCollectionRequestImpl.java      |   25 +-
 .../retrieve/v3/XMLMetadataRequestImpl.java     |   25 +-
 .../retrieve/v4/ODataDeltaRequestImpl.java      |   22 +-
 .../retrieve/v4/XMLMetadataRequestImpl.java     |   18 +-
 .../streamed/AbstractODataStreamedRequest.java  |    6 +-
 .../ODataMediaEntityCreateRequestImpl.java      |   23 +-
 .../ODataMediaEntityUpdateRequestImpl.java      |   21 +-
 .../streamed/ODataStreamUpdateRequestImpl.java  |   20 +-
 .../request/v4/AsyncRequestWrapperImpl.java     |    6 +-
 .../response/AbstractODataResponse.java         |   30 +-
 .../response/batch/ODataBatchErrorResponse.java |    8 +-
 .../batch/ODataBatchResponseManager.java        |    4 +-
 .../response/v4/AsyncResponseImpl.java          |   23 +-
 .../core/http/AbstractHttpClientFactory.java    |   50 +
 .../AbstractOAuth2HttpUriRequestFactory.java    |   52 +
 .../core/http/BasicAuthHttpClientFactory.java   |    4 +-
 .../core/http/DefaultHttpClientFactory.java     |   40 +-
 .../core/http/DefaultHttpUriRequestFactory.java |    2 +-
 .../core/http/NTLMAuthHttpClientFactory.java    |    4 +-
 .../client/core/http/OAuth2Exception.java       |   29 +
 .../http/ProxyWrapperHttpClientFactory.java     |    9 +-
 .../client/core/uri/AbstractURIBuilder.java     |    6 +-
 .../apache/olingo/client/core/uri/URIUtils.java |   69 +-
 .../client/core/uri/v3/URIBuilderImpl.java      |    4 +-
 .../client/core/uri/v4/URIBuilderImpl.java      |    4 +-
 .../olingo/client/core/v3/ODataClientImpl.java  |   13 +-
 .../olingo/client/core/v4/ODataClientImpl.java  |   12 +-
 .../olingo/client/core/uri/URIEscapeTest.java   |   12 +
 .../client/core/uri/v4/FilterFactoryTest.java   |   27 +-
 lib/commons-api/pom.xml                         |   10 +-
 .../apache/olingo/commons/api/Constants.java    |   16 +-
 .../commons/api/ODataApplicationException.java  |   37 -
 .../api/ODataNotImplementedException.java       |   33 -
 .../olingo/commons/api/data/ContextURL.java     |  138 ++-
 .../api/edm/constants/ODataServiceVersion.java  |   30 +-
 .../olingo/commons/api/format/ContentType.java  |  106 +-
 .../olingo/commons/api/data/ContextURLTest.java |   90 ++
 lib/commons-core/pom.xml                        |    4 +-
 .../server/api/ODataApplicationException.java   |   68 ++
 .../server/api/ODataTranslatedException.java    |   25 +
 .../server/api/serializer/ODataSerializer.java  |    5 +-
 .../expression/ExpressionVisitor.java           |    2 +-
 .../expression/VisitableExpression.java         |    2 +-
 lib/server-core/pom.xml                         |    4 +-
 .../core/serializer/ODataXmlSerializerImpl.java |    3 +-
 .../serializer/json/ODataJsonSerializer.java    |   30 +-
 .../uri/queryoption/expression/AliasImpl.java   |    2 +-
 .../uri/queryoption/expression/BinaryImpl.java  |    2 +-
 .../queryoption/expression/EnumerationImpl.java |    2 +-
 .../queryoption/expression/LambdaRefImpl.java   |    2 +-
 .../uri/queryoption/expression/LiteralImpl.java |    2 +-
 .../uri/queryoption/expression/MemberImpl.java  |    2 +-
 .../uri/queryoption/expression/MethodImpl.java  |    2 +-
 .../queryoption/expression/TypeLiteralImpl.java |    2 +-
 .../uri/queryoption/expression/UnaryImpl.java   |    2 +-
 lib/server-tecsvc/pom.xml                       |    3 +
 .../tecsvc/processor/TechnicalProcessor.java    |   11 +-
 .../src/main/resources/META-INF/LICENSE         |  331 ++++++
 .../tecsvc/data/JsonDataProviderTest.java       |    8 +-
 .../json/ODataJsonSerializerTest.java           |   25 +-
 .../core/uri/antlr/TestFullResourcePath.java    |    2 +-
 .../queryoption/expression/ExpressionTest.java  |    2 +-
 .../core/uri/testutil/ExpandValidator.java      |    2 +-
 .../core/uri/testutil/FilterTreeToText.java     |    2 +-
 .../core/uri/testutil/FilterValidator.java      |    2 +-
 .../core/uri/testutil/ResourceValidator.java    |    2 +-
 pom.xml                                         |  307 +++--
 163 files changed, 5790 insertions(+), 1953 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5b3c3d34/ext/client-proxy/src/main/java/org/apache/olingo/ext/proxy/commons/TransactionalPersistenceManagerImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5b3c3d34/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java
----------------------------------------------------------------------
diff --cc fit/src/main/java/org/apache/olingo/fit/AbstractServices.java
index 3b46eba,999ec1d..756e1af
--- a/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java
+++ b/fit/src/main/java/org/apache/olingo/fit/AbstractServices.java
@@@ -263,8 -262,8 +262,7 @@@ public abstract class AbstractServices 
      // just for non nullable property test into PropertyTestITCase
      return xml.createFaultResponse(Accept.JSON_FULLMETA.toString(version), new Exception("Non nullable properties"));
    }
 -
    // ----------------------------------------------
- 
    protected Response bodyPartRequest(final MimeBodyPart body) throws Exception {
      return bodyPartRequest(body, Collections.<String, String>emptyMap());
    }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5b3c3d34/fit/src/main/java/org/apache/olingo/fit/V3ActionOverloading.java
----------------------------------------------------------------------
diff --cc fit/src/main/java/org/apache/olingo/fit/V3ActionOverloading.java
index 01ba3bf,0132a00..8b05094
--- a/fit/src/main/java/org/apache/olingo/fit/V3ActionOverloading.java
+++ b/fit/src/main/java/org/apache/olingo/fit/V3ActionOverloading.java
@@@ -153,11 -154,11 +154,11 @@@ public class V3ActionOverloading extend
    }
  
    @POST
 -  @Path("/Product({entityId})/RetrieveProduct")
 +  @Path("/Product({entityId})/{path:.*RetrieveProduct}")
    public Response productBoundRetrieveProduct(
-       @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
-       @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format,
-       @HeaderParam("Content-Type") @DefaultValue(StringUtils.EMPTY) final String contentType) {
+           @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
+           @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format,
+           @HeaderParam("Content-Type") @DefaultValue(StringUtils.EMPTY) final String contentType) {
  
      return unboundRetrieveProduct(accept, format, contentType);
    }
@@@ -197,11 -198,11 +198,11 @@@
    }
  
    @POST
 -  @Path("/OrderLine(OrderId={orderId},ProductId={productId})/RetrieveProduct")
 +  @Path("/OrderLine(OrderId={orderId},ProductId={productId})/{path:.*RetrieveProduct}")
    public Response orderLineBoundRetrieveProduct(
-       @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
-       @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format,
-       @HeaderParam("Content-Type") @DefaultValue(StringUtils.EMPTY) final String contentType) {
+           @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
+           @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format,
+           @HeaderParam("Content-Type") @DefaultValue(StringUtils.EMPTY) final String contentType) {
  
      return unboundRetrieveProduct(accept, format, contentType);
    }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5b3c3d34/fit/src/main/java/org/apache/olingo/fit/V3KeyAsSegment.java
----------------------------------------------------------------------
diff --cc fit/src/main/java/org/apache/olingo/fit/V3KeyAsSegment.java
index 2c90bbc,01d9086..1d8aa56
--- a/fit/src/main/java/org/apache/olingo/fit/V3KeyAsSegment.java
+++ b/fit/src/main/java/org/apache/olingo/fit/V3KeyAsSegment.java
@@@ -47,10 -48,12 +48,10 @@@ import org.springframework.stereotype.S
  
  @Service
  @Path("/V30/KeyAsSegment.svc")
 -public class V3KeyAsSegment {
 -
 -  private final V3Services services;
 +public class V3KeyAsSegment extends V3Services {
  
-   public V3KeyAsSegment() throws Exception {
+   public V3KeyAsSegment() throws IOException {
 -    services = new V3Services();
 +    super();
    }
  
    private Response replaceServiceName(final Response response) {
@@@ -109,7 -110,6 +110,8 @@@
    @Path("/{entitySetName}/{entityId}")
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_ATOM_XML, MediaType.APPLICATION_JSON})
    @Consumes({MediaType.APPLICATION_ATOM_XML, MediaType.APPLICATION_JSON})
++
 +  @Override
    public Response mergeEntity(
            @Context final UriInfo uriInfo,
            @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
@@@ -128,7 -128,6 +130,8 @@@
    @Path("/{entitySetName}/{entityId}")
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_ATOM_XML, MediaType.APPLICATION_JSON})
    @Consumes({MediaType.APPLICATION_ATOM_XML, MediaType.APPLICATION_JSON})
++
 +  @Override
    public Response patchEntity(
            @Context final UriInfo uriInfo,
            @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
@@@ -164,7 -163,6 +167,8 @@@
    @Path("/{entitySetName}")
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_ATOM_XML, MediaType.APPLICATION_JSON})
    @Consumes({MediaType.APPLICATION_ATOM_XML, MediaType.APPLICATION_JSON, MediaType.APPLICATION_OCTET_STREAM})
++
 +  @Override
    public Response postNewEntity(
            @Context final UriInfo uriInfo,
            @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5b3c3d34/fit/src/main/java/org/apache/olingo/fit/V3OpenType.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5b3c3d34/fit/src/main/java/org/apache/olingo/fit/V3Services.java
----------------------------------------------------------------------
diff --cc fit/src/main/java/org/apache/olingo/fit/V3Services.java
index 57afd6d,975b3d3..69fbc84
--- a/fit/src/main/java/org/apache/olingo/fit/V3Services.java
+++ b/fit/src/main/java/org/apache/olingo/fit/V3Services.java
@@@ -213,17 -213,17 +213,17 @@@ public class V3Services extends Abstrac
    }
  
    @GET
 -  @Path("/Car/{type:.*}")
 +  @Path("/Car/{type:[a-zA-Z].*}")
    public Response filterCar(
-       @Context final UriInfo uriInfo,
-       @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
-       @QueryParam("$top") @DefaultValue(StringUtils.EMPTY) final String top,
-       @QueryParam("$skip") @DefaultValue(StringUtils.EMPTY) final String skip,
-       @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format,
-       @QueryParam("$inlinecount") @DefaultValue(StringUtils.EMPTY) final String count,
-       @QueryParam("$filter") @DefaultValue(StringUtils.EMPTY) final String filter,
-       @QueryParam("$orderby") @DefaultValue(StringUtils.EMPTY) final String orderby,
-       @QueryParam("$skiptoken") @DefaultValue(StringUtils.EMPTY) final String skiptoken) {
+           @Context final UriInfo uriInfo,
+           @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
+           @QueryParam("$top") @DefaultValue(StringUtils.EMPTY) final String top,
+           @QueryParam("$skip") @DefaultValue(StringUtils.EMPTY) final String skip,
+           @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format,
+           @QueryParam("$inlinecount") @DefaultValue(StringUtils.EMPTY) final String count,
+           @QueryParam("$filter") @DefaultValue(StringUtils.EMPTY) final String filter,
+           @QueryParam("$orderby") @DefaultValue(StringUtils.EMPTY) final String orderby,
+           @QueryParam("$skiptoken") @DefaultValue(StringUtils.EMPTY) final String skiptoken) {
  
      return super.getEntitySet(uriInfo, accept, "Car", top, skip, format, count, filter, orderby, skiptoken);
    }
@@@ -231,15 -231,15 +231,15 @@@
    @GET
    @Path("/Login({entityId})")
    public Response getLogin(
-       @Context final UriInfo uriInfo,
-       @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
-       @PathParam("entityId") final String entityId,
-       @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format,
-       @QueryParam("$expand") @DefaultValue(StringUtils.EMPTY) final String expand,
-       @QueryParam("$select") @DefaultValue(StringUtils.EMPTY) final String select) {
+           @Context final UriInfo uriInfo,
+           @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
+           @PathParam("entityId") final String entityId,
+           @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format,
+           @QueryParam("$expand") @DefaultValue(StringUtils.EMPTY) final String expand,
+           @QueryParam("$select") @DefaultValue(StringUtils.EMPTY) final String select) {
  
      return super.getEntityInternal(uriInfo.getRequestUri().toASCIIString(), accept,
 -            "Login", StringUtils.remove(entityId, "'"), format, expand, select, false);
 +        "Login", StringUtils.remove(entityId, "'"), format, expand, select);
    }
  
    @POST

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5b3c3d34/fit/src/main/java/org/apache/olingo/fit/V4Demo.java
----------------------------------------------------------------------
diff --cc fit/src/main/java/org/apache/olingo/fit/V4Demo.java
index 1016118,18e7deb..d98dedb
--- a/fit/src/main/java/org/apache/olingo/fit/V4Demo.java
+++ b/fit/src/main/java/org/apache/olingo/fit/V4Demo.java
@@@ -97,16 -98,16 +98,16 @@@ public class V4Demo extends V4Services 
    @Path("/{entitySetName}({entityId})")
    @Override
    public Response getEntity(
-       @Context final UriInfo uriInfo,
-       @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
-       @PathParam("entitySetName") final String entitySetName,
-       @PathParam("entityId") final String entityId,
-       @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format,
-       @QueryParam("$expand") @DefaultValue(StringUtils.EMPTY) final String expand,
-       @QueryParam("$select") @DefaultValue(StringUtils.EMPTY) final String select) {
+           @Context final UriInfo uriInfo,
+           @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
+           @PathParam("entitySetName") final String entitySetName,
+           @PathParam("entityId") final String entityId,
+           @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format,
+           @QueryParam("$expand") @DefaultValue(StringUtils.EMPTY) final String expand,
+           @QueryParam("$select") @DefaultValue(StringUtils.EMPTY) final String select) {
  
      return replaceServiceName(super.getEntityInternal(uriInfo.getRequestUri().toASCIIString(),
 -            accept, entitySetName, entityId, format, expand, select, false));
 +        accept, entitySetName, entityId, format, expand, select));
    }
  
    @GET

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5b3c3d34/fit/src/main/java/org/apache/olingo/fit/V4KeyAsSegment.java
----------------------------------------------------------------------
diff --cc fit/src/main/java/org/apache/olingo/fit/V4KeyAsSegment.java
index 0c16697,858bc01..adfcdae
--- a/fit/src/main/java/org/apache/olingo/fit/V4KeyAsSegment.java
+++ b/fit/src/main/java/org/apache/olingo/fit/V4KeyAsSegment.java
@@@ -48,7 -47,10 +49,7 @@@ import org.springframework.stereotype.S
  @Path("/V40/KeyAsSegment.svc")
  public class V4KeyAsSegment extends V4Services {
  
-   public V4KeyAsSegment() throws Exception {
 -  @Context
 -  private UriInfo uriInfo;
 -
+   public V4KeyAsSegment() throws IOException {
      super();
    }
  

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5b3c3d34/fit/src/main/java/org/apache/olingo/fit/V4OpenType.java
----------------------------------------------------------------------
diff --cc fit/src/main/java/org/apache/olingo/fit/V4OpenType.java
index 30bc109,b19916b..feb53c8
--- a/fit/src/main/java/org/apache/olingo/fit/V4OpenType.java
+++ b/fit/src/main/java/org/apache/olingo/fit/V4OpenType.java
@@@ -101,16 -102,16 +102,16 @@@ public class V4OpenType extends V4Servi
    @Path("/{entitySetName}({entityId})")
    @Override
    public Response getEntity(
-       @Context final UriInfo uriInfo,
-       @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
-       @PathParam("entitySetName") final String entitySetName,
-       @PathParam("entityId") final String entityId,
-       @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format,
-       @QueryParam("$expand") @DefaultValue(StringUtils.EMPTY) final String expand,
-       @QueryParam("$select") @DefaultValue(StringUtils.EMPTY) final String select) {
+           @Context final UriInfo uriInfo,
+           @HeaderParam("Accept") @DefaultValue(StringUtils.EMPTY) final String accept,
+           @PathParam("entitySetName") final String entitySetName,
+           @PathParam("entityId") final String entityId,
+           @QueryParam("$format") @DefaultValue(StringUtils.EMPTY) final String format,
+           @QueryParam("$expand") @DefaultValue(StringUtils.EMPTY) final String expand,
+           @QueryParam("$select") @DefaultValue(StringUtils.EMPTY) final String select) {
  
      return replaceServiceName(super.getEntityInternal(
 -            uriInfo.getRequestUri().toASCIIString(), accept, entitySetName, entityId, format, expand, select, false));
 +        uriInfo.getRequestUri().toASCIIString(), accept, entitySetName, entityId, format, expand, select));
    }
  
    @POST

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5b3c3d34/fit/src/main/java/org/apache/olingo/fit/V4Services.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5b3c3d34/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java
----------------------------------------------------------------------
diff --cc fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java
index 7aef97a,baf2fac..7de4656
--- a/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java
+++ b/fit/src/main/java/org/apache/olingo/fit/utils/AbstractUtilities.java
@@@ -87,20 -87,14 +87,20 @@@ public abstract class AbstractUtilitie
    public static final String BOUNDARY = "boundary";
  
    protected final ODataServiceVersion version;
 +
    protected final Metadata metadata;
 +
    protected final FSManager fsManager;
 +
    protected final ODataDeserializer atomDeserializer;
 +
    protected final ODataDeserializer jsonDeserializer;
 +
    protected final ODataSerializer atomSerializer;
 +
    protected final ODataSerializer jsonSerializer;
  
-   public AbstractUtilities(final ODataServiceVersion version, final Metadata metadata) throws Exception {
+   public AbstractUtilities(final ODataServiceVersion version, final Metadata metadata) throws IOException {
      this.version = version;
      this.metadata = metadata;
      fsManager = FSManager.instance(version);

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5b3c3d34/fit/src/main/java/org/apache/olingo/fit/utils/XMLUtilities.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/5b3c3d34/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/ContextURL.java
----------------------------------------------------------------------
diff --cc lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/ContextURL.java
index bbe2216,2628ebd..e18739f
--- a/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/ContextURL.java
+++ b/lib/commons-api/src/main/java/org/apache/olingo/commons/api/data/ContextURL.java
@@@ -34,27 -36,31 +36,38 @@@ public class ContextURL 
    private URI uri;
  
    private URI serviceRoot;
 +
    private String entitySetOrSingletonOrType;
 +
    private String derivedEntity;
 +
    private String selectList;
 +
    private String navOrPropertyPath;
  
-   private boolean entity;
+   public enum Suffix {
 +
-   private boolean delta;
+     ENTITY("$entity"),
+     REFERENCE("$ref"),
+     DELTA("$delta"),
+     DELTA_DELETED_ENTITY("$deletedEntity"),
+     DELTA_LINK("$link"),
+     DELTA_DELETED_LINK("$deletedLink");
  
-   private boolean deltaDeletedEntity;
+     private final String representation;
 +
-   private boolean deltaLink;
+     private Suffix(final String representation) {
+       this.representation = representation;
+     }
 +
-   private boolean deltaDeletedLink;
+     public String getRepresentation() {
+       return representation;
+     }
+   }
 -
+   private Suffix suffix;
  
 -  private ContextURL() {}
 +  private ContextURL() {
 +  }
  
    public static ContextURL getInstance(final URI contextURL) {
      final ContextURL instance = new ContextURL();
@@@ -62,21 -68,31 +75,30 @@@
  
      String contextURLasString = instance.uri.toASCIIString();
  
-     instance.entity = contextURLasString.endsWith("/$entity") || contextURLasString.endsWith("/@Element");
-     contextURLasString = contextURLasString.
-             replace("/$entity", StringUtils.EMPTY).replace("/@Element", StringUtils.EMPTY);
- 
-     instance.delta = contextURLasString.endsWith("/$delta");
-     contextURLasString = contextURLasString.replace("/$delta", StringUtils.EMPTY);
- 
-     instance.deltaDeletedEntity = contextURLasString.endsWith("/$deletedEntity");
-     contextURLasString = contextURLasString.replace("/$deletedEntity", StringUtils.EMPTY);
- 
-     instance.deltaLink = contextURLasString.endsWith("/$link");
-     contextURLasString = contextURLasString.replace("/$link", StringUtils.EMPTY);
- 
-     instance.deltaDeletedLink = contextURLasString.endsWith("/$deletedLink");
-     contextURLasString = contextURLasString.replace("/$deletedLink", StringUtils.EMPTY);
+     if (contextURLasString.endsWith("/$entity") || contextURLasString.endsWith("/@Element")) {
+       instance.suffix = Suffix.ENTITY;
+       contextURLasString = contextURLasString.replace("/$entity", StringUtils.EMPTY)
 -          .replace("/@Element", StringUtils.EMPTY);
 -
++              .replace("/@Element", StringUtils.EMPTY);
+     } else if (contextURLasString.endsWith("/$ref")) {
+       instance.suffix = Suffix.REFERENCE;
+       contextURLasString = contextURLasString.replace("/$ref", StringUtils.EMPTY);
+ 
+     } else if (contextURLasString.endsWith("/$delta")) {
+       instance.suffix = Suffix.DELTA;
+       contextURLasString = contextURLasString.replace("/$delta", StringUtils.EMPTY);
+ 
+     } else if (contextURLasString.endsWith("/$deletedEntity")) {
+       instance.suffix = Suffix.DELTA_DELETED_ENTITY;
+       contextURLasString = contextURLasString.replace("/$deletedEntity", StringUtils.EMPTY);
+ 
+     } else if (contextURLasString.endsWith("/$link")) {
+       instance.suffix = Suffix.DELTA_LINK;
+       contextURLasString = contextURLasString.replace("/$link", StringUtils.EMPTY);
+ 
+     } else if (contextURLasString.endsWith("/$deletedLink")) {
+       instance.suffix = Suffix.DELTA_DELETED_LINK;
+       contextURLasString = contextURLasString.replace("/$deletedLink", StringUtils.EMPTY);
+     }
  
      instance.serviceRoot = URI.create(StringUtils.substringBefore(contextURLasString, Constants.METADATA));
  
@@@ -169,7 -189,67 +195,69 @@@
    }
  
    public boolean isDeltaDeletedLink() {
-     return deltaDeletedLink;
+     return suffix == Suffix.DELTA_DELETED_LINK;
+   }
+ 
+   public static final class ContextURLBuilder {
++
+     private ContextURL contextURL = new ContextURL();
+ 
 -    private ContextURLBuilder() {}
++    private ContextURLBuilder() {
++    }
+ 
+     public ContextURLBuilder serviceRoot(final URI serviceRoot) {
+       contextURL.serviceRoot = serviceRoot;
+       return this;
+     }
+ 
+     public ContextURLBuilder entitySet(final EdmEntitySet entitySet) {
+       contextURL.entitySetOrSingletonOrType = entitySet.getName();
+       return this;
+     }
+ 
+     public ContextURLBuilder derived(final EdmEntityType derivedType) {
+       contextURL.derivedEntity = derivedType.getFullQualifiedName().getFullQualifiedNameAsString();
+       return this;
+     }
+ 
+     public ContextURLBuilder suffix(final Suffix suffix) {
+       contextURL.suffix = suffix;
+       return this;
+     }
+ 
+     public ContextURL build() {
+       StringBuilder result = new StringBuilder();
+       if (contextURL.serviceRoot != null) {
+         result.append(contextURL.serviceRoot);
+       }
+       result.append(Constants.METADATA);
+       if (contextURL.entitySetOrSingletonOrType != null) {
+         result.append('#').append(contextURL.entitySetOrSingletonOrType);
+       }
+       if (contextURL.derivedEntity != null) {
+         if (contextURL.entitySetOrSingletonOrType == null) {
+           throw new IllegalArgumentException("ContextURL: Derived Type without anything to derive from!");
+         }
+         result.append('/').append(contextURL.derivedEntity);
+       }
+       if (contextURL.suffix == Suffix.REFERENCE) {
+         if (contextURL.entitySetOrSingletonOrType != null) {
+           throw new IllegalArgumentException("ContextURL: $ref with Entity Set");
+         }
+         result.append('#').append(contextURL.suffix.getRepresentation());
+       } else if (contextURL.suffix != null) {
+         if (contextURL.entitySetOrSingletonOrType == null) {
+           throw new IllegalArgumentException("ContextURL: Suffix without preceding Entity Set!");
+         }
+         result.append('/').append(contextURL.suffix.getRepresentation());
+       }
+       contextURL.uri = URI.create(result.toString());
+       return contextURL;
+     }
+   }
+ 
+   public static final ContextURLBuilder create() {
+     return new ContextURLBuilder();
    }
  
    @Override