You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by ch...@apache.org on 2015/08/04 16:57:45 UTC

[09/13] olingo-odata4 git commit: Merge branch 'master' into olingo640

Merge branch 'master' into olingo640

Conflicts:
	fit/src/test/java/org/apache/olingo/fit/tecsvc/client/NavigationITCase.java
	lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java


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

Branch: refs/heads/master
Commit: 366597070f08f7435eca9b2394c3f53612efd1d5
Parents: 5b99eb7 9558233
Author: Christian Amend <ch...@sap.com>
Authored: Tue Aug 4 14:38:01 2015 +0200
Committer: Christian Amend <ch...@sap.com>
Committed: Tue Aug 4 14:38:01 2015 +0200

----------------------------------------------------------------------
 .../fit/tecsvc/client/AsyncSupportITCase.java   | 104 +++++++
 .../fit/tecsvc/client/NavigationITCase.java     |  39 ++-
 .../fit/tecsvc/http/BasicAsyncITCase.java       | 238 ++++++++++++++++
 .../apache/olingo/fit/util/StringHelper.java    | 214 +++++++++++++++
 fit/src/test/resources/basicBatchPost.batch     |  33 +++
 .../olingo/client/api/data/ServiceDocument.java |   4 +-
 .../client/core/data/ServiceDocumentImpl.java   |  53 +++-
 .../core/data/ServiceDocumentItemImpl.java      |  32 ++-
 .../client/core/domain/ClientPropertyImpl.java  |  39 ++-
 .../client/core/domain/ClientValuableImpl.java  |  27 +-
 .../olingo/commons/api/data/ContextURL.java     |  15 +-
 .../commons/api/edm/FullQualifiedName.java      |  32 ++-
 .../apache/olingo/commons/api/edm/geo/SRID.java |  54 +++-
 .../apache/olingo/server/api/ODataRequest.java  |  22 +-
 .../apache/olingo/server/api/ODataResponse.java |   2 +-
 .../server/api/debug/DebugInformation.java      | 118 ++++++++
 .../server/api/debug/DebugResponseHelper.java   |   6 +-
 .../olingo/server/api/debug/DebugSupport.java   |   7 +-
 .../server/api/debug/DefaultDebugSupport.java   |  13 +-
 .../server/api/debug/RuntimeMeasurement.java    | 106 +++++++
 .../olingo/server/core/ServiceHandler.java      |  15 +
 .../core/legacy/ProcessorServiceHandler.java    |   7 +
 .../server/core/requests/DataRequest.java       |   2 +-
 .../olingo/server/example/TripPinHandler.java   |  12 +
 lib/server-core/pom.xml                         |  10 +-
 .../apache/olingo/server/core/ODataHandler.java |  53 ++--
 .../server/core/ODataHttpHandlerImpl.java       |  68 +++--
 .../apache/olingo/server/core/ODataImpl.java    |   2 +-
 .../core/debug/DebugResponseHelperImpl.java     | 247 ++++++++++++++++-
 .../olingo/server/core/debug/DebugTab.java      |  50 ++++
 .../olingo/server/core/debug/DebugTabBody.java  | 154 +++++++++++
 .../server/core/debug/DebugTabException.java    | 136 +++++++++
 .../server/core/debug/DebugTabRequest.java      | 128 +++++++++
 .../server/core/debug/DebugTabResponse.java     |  99 +++++++
 .../server/core/debug/DebugTabRuntime.java      | 181 ++++++++++++
 .../server/core/debug/DebugTabServer.java       |  63 +++++
 .../olingo/server/core/debug/DebugTabUri.java   | 232 ++++++++++++++++
 .../server/core/debug/ServerCoreDebugger.java   | 142 ++++++++++
 .../json/ODataJsonDeserializer.java             | 275 +++++++++++--------
 .../serializer/BatchResponseSerializer.java     |   1 -
 .../serializer/utils/ContextURLBuilder.java     |   9 +
 .../core/serializer/utils/ContextURLHelper.java |  30 ++
 .../serializer/utils/ExpandSelectHelper.java    |  11 +-
 .../core/uri/parser/UriParseTreeVisitor.java    |  29 +-
 .../server/core/debug/AbstractDebugTabTest.java |  58 ++++
 .../server/core/debug/DebugTabBodyTest.java     |  37 +++
 .../server/core/debug/DebugTabRequestTest.java  | 155 +++++++++++
 .../server/core/debug/DebugTabResponseTest.java |  79 ++++++
 .../server/core/debug/DebugTabServerTest.java   |  84 ++++++
 .../core/debug/ServerCoreDebuggerTest.java      | 121 ++++++++
 lib/server-tecsvc/pom.xml                       |   1 -
 .../olingo/server/tecsvc/TechnicalServlet.java  |   1 -
 .../processor/TechnicalBatchProcessor.java      |  17 ++
 .../processor/TechnicalEntityProcessor.java     |  98 ++++---
 lib/server-test/pom.xml                         |   1 -
 .../olingo/server/core/ODataHandlerTest.java    |  10 +-
 .../json/ODataJsonDeserializerEntityTest.java   |  50 ++++
 .../serializer/utils/ContextURLHelperTest.java  |  86 ++++++
 .../core/uri/antlr/TestFullResourcePath.java    |  56 +++-
 samples/tutorials/p5_queryoptions-tis/pom.xml   |  79 ++++++
 .../myservice/mynamespace/data/Storage.java     | 130 +++++++++
 .../mynamespace/service/DemoEdmProvider.java    | 154 +++++++++++
 .../service/DemoEntityCollectionProcessor.java  | 142 ++++++++++
 .../service/DemoEntityProcessor.java            | 118 ++++++++
 .../service/DemoPrimitiveProcessor.java         | 150 ++++++++++
 .../java/myservice/mynamespace/util/Util.java   | 105 +++++++
 .../myservice/mynamespace/web/DemoServlet.java  |  76 +++++
 .../src/main/webapp/WEB-INF/web.xml             |  40 +++
 .../src/main/webapp/index.jsp                   |  26 ++
 samples/tutorials/p6_queryoptions-es/pom.xml    |  80 ++++++
 .../myservice/mynamespace/data/Storage.java     | 252 +++++++++++++++++
 .../mynamespace/service/DemoEdmProvider.java    | 211 ++++++++++++++
 .../service/DemoEntityCollectionProcessor.java  | 160 +++++++++++
 .../service/DemoEntityProcessor.java            | 235 ++++++++++++++++
 .../service/DemoPrimitiveProcessor.java         | 150 ++++++++++
 .../java/myservice/mynamespace/util/Util.java   | 149 ++++++++++
 .../myservice/mynamespace/web/DemoServlet.java  |  75 +++++
 .../src/main/webapp/WEB-INF/web.xml             |  34 +++
 .../src/main/webapp/index.jsp                   |  43 +++
 samples/tutorials/pom.xml                       |   2 +
 80 files changed, 6057 insertions(+), 322 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/36659707/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/NavigationITCase.java
----------------------------------------------------------------------
diff --cc fit/src/test/java/org/apache/olingo/fit/tecsvc/client/NavigationITCase.java
index f129976,40c1de4..a153f06
--- a/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/NavigationITCase.java
+++ b/fit/src/test/java/org/apache/olingo/fit/tecsvc/client/NavigationITCase.java
@@@ -20,7 -20,8 +20,10 @@@ package org.apache.olingo.fit.tecsvc.cl
  
  import static org.junit.Assert.assertEquals;
  import static org.junit.Assert.assertNotNull;
+ import static org.junit.Assert.assertTrue;
+ 
++import java.io.InputStream;
 +
  import org.apache.olingo.client.api.ODataClient;
  import org.apache.olingo.client.api.communication.response.ODataRetrieveResponse;
  import org.apache.olingo.client.api.domain.ClientEntity;
@@@ -31,23 -32,49 +34,57 @@@ import org.apache.olingo.commons.api.fo
  import org.apache.olingo.commons.api.http.HttpStatusCode;
  import org.apache.olingo.fit.AbstractBaseTestITCase;
  import org.apache.olingo.fit.tecsvc.TecSvcConst;
+ import org.apache.olingo.fit.util.StringHelper;
 +import org.junit.Assert;
  import org.junit.Test;
  
- public class NavigationITCase extends AbstractBaseTestITCase {
 -import java.io.InputStream;
 -
+ public final class NavigationITCase extends AbstractBaseTestITCase {
  
    private final ODataClient client = getClient();
  
 +  
 +  void assertShortOrInt(int value, Object n) {
 +    if (n instanceof Number) {
 +      assertEquals(value, ((Number)n).intValue());
 +    } else {
 +      Assert.fail();
 +    }
 +  }
 +  
    @Test
+   public void navigationToEntityWithRelativeContextUrl() throws Exception {
+     // zero navigation
+     final InputStream zeroLevelResponse = client.getRetrieveRequestFactory().getEntityRequest(
+             client.newURIBuilder(TecSvcConst.BASE_URI)
+                     .appendEntitySetSegment("ESAllPrim").
+                     appendKeySegment(32767).build()).rawExecute();
+ 
+     String zeroLevelResponseBody = StringHelper.asString(zeroLevelResponse);
+     assertTrue(zeroLevelResponseBody.contains("\"@odata.context\":\"$metadata#ESAllPrim/$entity\""));
+ 
+     // one navigation
+     final InputStream oneLevelResponse = client.getRetrieveRequestFactory().getEntityRequest(
+                     client.newURIBuilder(TecSvcConst.BASE_URI)
+                             .appendEntitySetSegment("ESAllPrim").appendKeySegment(32767)
+                             .appendNavigationSegment("NavPropertyETTwoPrimOne").build())
+                     .rawExecute();
+ 
+     String oneLevelResponseBody = StringHelper.asString(oneLevelResponse);
+     assertTrue(oneLevelResponseBody.contains("\"@odata.context\":\"../$metadata#ESTwoPrim/$entity\""));
+ 
+     // two navigation
+     final InputStream twoLevelResponse = client.getRetrieveRequestFactory().getEntityRequest(
+                     client.newURIBuilder(TecSvcConst.BASE_URI)
+                             .appendEntitySetSegment("ESTwoPrim").appendKeySegment(32767)
+                             .appendNavigationSegment("NavPropertyETAllPrimOne")
+                             .appendNavigationSegment("NavPropertyETTwoPrimMany").appendKeySegment(-365).build())
+                     .rawExecute();
+ 
+     String twoLevelResponseBody = StringHelper.asString(twoLevelResponse);
+     assertTrue(twoLevelResponseBody.contains("\"@odata.context\":\"../../$metadata#ESTwoPrim/$entity\""));
+   }
+ 
+   @Test
    public void oneLevelToEntity() throws Exception {
      final ODataRetrieveResponse<ClientEntity> response =
          client.getRetrieveRequestFactory().getEntityRequest(

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/36659707/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataImpl.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/36659707/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/TechnicalServlet.java
----------------------------------------------------------------------

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/36659707/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
----------------------------------------------------------------------
diff --cc lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
index 06f450d,a47f367..315623f
--- a/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
+++ b/lib/server-tecsvc/src/main/java/org/apache/olingo/server/tecsvc/processor/TechnicalEntityProcessor.java
@@@ -147,7 -147,7 +147,7 @@@ public class TechnicalEntityProcessor e
      checkRequestFormat(requestFormat);
  
      //
--    if(odata.createPreferences(request.getHeaders(HttpHeader.PREFER)).hasRespondAsync()) {
++    if (odata.createPreferences(request.getHeaders(HttpHeader.PREFER)).hasRespondAsync()) {
        TechnicalAsyncService asyncService = TechnicalAsyncService.getInstance();
        TechnicalEntityProcessor processor = new TechnicalEntityProcessor(dataProvider, serviceMetadata);
        processor.init(odata, serviceMetadata);
@@@ -161,7 -161,7 +161,6 @@@
      }
      //
  
--
      final UriResourceEntitySet resourceEntitySet = (UriResourceEntitySet) uriInfo.getUriResourceParts().get(0);
      final EdmEntitySet edmEntitySet = resourceEntitySet.getEntitySet();
      final EdmEntityType edmEntityType = edmEntitySet.getEntityType();
@@@ -173,7 -173,7 +172,7 @@@
        dataProvider.setMedia(entity, odata.createFixedFormatDeserializer().binary(request.getBody()),
            requestFormat.toContentTypeString());
      } else {
--      final DeserializerResult deserializerResult = 
++      final DeserializerResult deserializerResult =
            odata.createDeserializer(requestFormat).entity(request.getBody(), edmEntityType);
        new RequestValidator(dataProvider, request.getRawBaseUri())
            .validate(edmEntitySet, deserializerResult.getEntity());
@@@ -187,8 -187,8 +186,8 @@@
          + odata.createUriHelper().buildCanonicalURL(edmEntitySet, entity);
      final Return returnPreference = odata.createPreferences(request.getHeaders(HttpHeader.PREFER)).getReturn();
      if (returnPreference == null || returnPreference == Return.REPRESENTATION) {
-       response.setContent(serializeEntity(entity, edmEntitySet, edmEntityType, responseFormat, expand, null)
-               .getContent());
+       response.setContent(serializeEntity(request, entity, edmEntitySet, edmEntityType, responseFormat, expand, null)
 -              .getContent());
++          .getContent());
        response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString());
        response.setStatusCode(HttpStatusCode.CREATED.getStatusCode());
      } else {
@@@ -238,13 -238,13 +237,13 @@@
          request.getRawBaseUri()).validate(edmEntitySet, changedEntity);
  
      dataProvider.update(request.getRawBaseUri(), edmEntitySet, entity, changedEntity,
--            request.getMethod() == HttpMethod.PATCH, false);
++        request.getMethod() == HttpMethod.PATCH, false);
  
      final Return returnPreference = odata.createPreferences(request.getHeaders(HttpHeader.PREFER)).getReturn();
      if (returnPreference == null || returnPreference == Return.REPRESENTATION) {
        response.setStatusCode(HttpStatusCode.OK.getStatusCode());
-       response.setContent(serializeEntity(entity, edmEntitySet, edmEntityType, responseFormat, null, null)
-               .getContent());
+       response.setContent(serializeEntity(request, entity, edmEntitySet, edmEntityType, responseFormat)
 -              .getContent());
++          .getContent());
        response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString());
      } else {
        response.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode());
@@@ -275,8 -275,8 +274,8 @@@
  
      final Return returnPreference = odata.createPreferences(request.getHeaders(HttpHeader.PREFER)).getReturn();
      if (returnPreference == null || returnPreference == Return.REPRESENTATION) {
-       response.setContent(serializeEntity(entity, edmEntitySet, edmEntityType, responseFormat, null, null)
+       response.setContent(serializeEntity(request, entity, edmEntitySet, edmEntityType, responseFormat)
 -              .getContent());
 +          .getContent());
        response.setStatusCode(HttpStatusCode.OK.getStatusCode());
        response.setHeader(HttpHeader.CONTENT_TYPE, responseFormat.toContentTypeString());
      } else {
@@@ -360,7 -360,7 +359,7 @@@
      final UriResourceNavigation navigationProperty = getLastNavigation(uriInfo);
      ensureNavigationPropertyNotNull(navigationProperty);
      dataProvider.createReference(entity, navigationProperty.getProperty(), references.getEntityReferences().get(0),
--            request.getRawBaseUri());
++        request.getRawBaseUri());
  
      response.setStatusCode(HttpStatusCode.NO_CONTENT.getStatusCode());
    }
@@@ -371,7 -371,7 +370,7 @@@
  
      final UriResourceNavigation lastNavigation = getLastNavigation(uriInfo);
      final IdOption idOption = uriInfo.getIdOption();
--    
++
      ensureNavigationPropertyNotNull(lastNavigation);
      if (lastNavigation.isCollection() && idOption == null) {
        throw new ODataApplicationException("Id system query option must be provided",
@@@ -393,8 -393,9 +392,9 @@@
    }
  
    @Override
-   public void readReferenceCollection(final ODataRequest request, final ODataResponse response, final UriInfo uriInfo,
-       final ContentType requestedContentType) throws ODataApplicationException, ODataLibraryException {
+   public void readReferenceCollection(final ODataRequest request, final ODataResponse response,
 -                                      final UriInfo uriInfo, final ContentType requestedContentType)
 -          throws ODataApplicationException, ODataLibraryException {
++      final UriInfo uriInfo, final ContentType requestedContentType)
++      throws ODataApplicationException, ODataLibraryException {
      readEntityCollection(request, response, uriInfo, requestedContentType, true);
    }
  
@@@ -402,7 -403,7 +402,7 @@@
        final ContentType requestedFormat, final boolean isReference)
        throws ODataApplicationException, ODataLibraryException {
      //
--    if(odata.createPreferences(request.getHeaders(HttpHeader.PREFER)).hasRespondAsync()) {
++    if (odata.createPreferences(request.getHeaders(HttpHeader.PREFER)).hasRespondAsync()) {
        TechnicalAsyncService asyncService = TechnicalAsyncService.getInstance();
        TechnicalEntityProcessor processor = new TechnicalEntityProcessor(dataProvider, serviceMetadata);
        processor.init(odata, serviceMetadata);
@@@ -454,7 -455,7 +454,7 @@@
        final UriInfo uriInfo, final ContentType requestedContentType, final boolean isReference)
        throws ODataApplicationException, ODataLibraryException {
      //
--    if(odata.createPreferences(request.getHeaders(HttpHeader.PREFER)).hasRespondAsync()) {
++    if (odata.createPreferences(request.getHeaders(HttpHeader.PREFER)).hasRespondAsync()) {
        TechnicalAsyncService asyncService = TechnicalAsyncService.getInstance();
        TechnicalEntityProcessor processor = new TechnicalEntityProcessor(dataProvider, serviceMetadata);
        processor.init(odata, serviceMetadata);
@@@ -513,12 -514,12 +513,12 @@@
      expandHandler.applyExpandQueryOptions(entitySetSerialization, edmEntitySet, expand);
      final CountOption countOption = uriInfo.getCountOption();
  
-     final String id = request.getRawBaseUri()+edmEntitySet.getName();
++    final String id = request.getRawBaseUri() + edmEntitySet.getName();
      // Serialize
--    final SerializerResult serializerResult = (isReference) ? 
++    final SerializerResult serializerResult = (isReference) ?
          serializeReferenceCollection(entitySetSerialization, edmEntitySet, requestedContentType, countOption) :
-         serializeEntityCollection(entitySetSerialization, edmEntitySet, edmEntityType, requestedContentType,
+         serializeEntityCollection(request, entitySetSerialization, edmEntitySet, edmEntityType, requestedContentType,
 -            expand, select, countOption);
 -
 +            expand, select, countOption, id);
      response.setContent(serializerResult.getContent());
      response.setStatusCode(HttpStatusCode.OK.getStatusCode());
      response.setHeader(HttpHeader.CONTENT_TYPE, requestedContentType.toContentTypeString());
@@@ -528,59 -529,74 +528,73 @@@
      }
    }
  
-   private SerializerResult serializeEntityCollection(final EntityCollection entityCollection,
-       final EdmEntitySet edmEntitySet, final EdmEntityType edmEntityType, final ContentType requestedFormat,
-       final ExpandOption expand, final SelectOption select, final CountOption countOption, String id)
-       throws ODataLibraryException {
-     
+   private SerializerResult serializeEntityCollection(final ODataRequest request, final EntityCollection
 -          entityCollection,
 -      final EdmEntitySet edmEntitySet, final EdmEntityType edmEntityType, final ContentType requestedFormat,
 -      final ExpandOption expand, final SelectOption select, final CountOption countOption)
 -      throws ODataLibraryException {
++      entityCollection, final EdmEntitySet edmEntitySet, final EdmEntityType edmEntityType,
++      final ContentType requestedFormat, final ExpandOption expand, final SelectOption select,
++      final CountOption countOption, String id) throws ODataLibraryException {
+ 
      return odata.createSerializer(requestedFormat).entityCollection(
 -            serviceMetadata,
 -            edmEntityType,
 -            entityCollection,
 -            EntityCollectionSerializerOptions.with()
 -                    .contextURL(isODataMetadataNone(requestedFormat) ? null :
 -                            getContextUrl(request.getRawODataPath(), edmEntitySet, edmEntityType, false, expand,
 -                                    select))
 -                    .count(countOption)
 -                    .expand(expand).select(select)
 -                    .build());
 +        serviceMetadata,
 +        edmEntityType,
 +        entityCollection,
 +        EntityCollectionSerializerOptions.with()
 +            .contextURL(isODataMetadataNone(requestedFormat) ? null :
-                 getContextUrl(edmEntitySet, edmEntityType, false, expand, select))
++                getContextUrl(request.getRawODataPath(), edmEntitySet, edmEntityType, false, expand, select))
 +            .count(countOption)
 +            .expand(expand).select(select)
 +            .setId(id)
 +            .build());
    }
  
--  private SerializerResult serializeReferenceCollection(final EntityCollection entityCollection, 
--      final EdmEntitySet edmEntitySet, final ContentType requestedFormat, final CountOption countOption) 
--          throws ODataLibraryException {
++  private SerializerResult serializeReferenceCollection(final EntityCollection entityCollection,
++      final EdmEntitySet edmEntitySet, final ContentType requestedFormat, final CountOption countOption)
++      throws ODataLibraryException {
  
      return odata.createSerializer(requestedFormat)
-         .referenceCollection(serviceMetadata, edmEntitySet, entityCollection,ReferenceCollectionSerializerOptions.with()
-             .contextURL(ContextURL.with().asCollection().suffix(Suffix.REFERENCE).build())
-             .count(countOption).build());
+         .referenceCollection(serviceMetadata, edmEntitySet, entityCollection,
 -                ReferenceCollectionSerializerOptions.with()
 -                        .contextURL(ContextURL.with().asCollection().suffix(Suffix.REFERENCE).build())
 -                        .count(countOption).build());
++            ReferenceCollectionSerializerOptions.with()
++                .contextURL(ContextURL.with().asCollection().suffix(Suffix.REFERENCE).build())
++                .count(countOption).build());
    }
  
    private SerializerResult serializeReference(final Entity entity, final EdmEntitySet edmEntitySet,
        final ContentType requestedFormat) throws ODataLibraryException {
      return odata.createSerializer(requestedFormat)
          .reference(serviceMetadata, edmEntitySet, entity, ReferenceSerializerOptions.with()
 -                .contextURL(ContextURL.with().suffix(Suffix.REFERENCE).build()).build());
 -            
 +            .contextURL(ContextURL.with().suffix(Suffix.REFERENCE).build()).build());
-             
++
    }
  
-   private SerializerResult serializeEntity(final Entity entity,
-       final EdmEntitySet edmEntitySet, final EdmEntityType edmEntityType, final ContentType requestedFormat,
-       final ExpandOption expand, final SelectOption select) throws ODataLibraryException {
+   private SerializerResult serializeEntity(final ODataRequest request, final Entity entity,
 -                                           final EdmEntitySet edmEntitySet, final EdmEntityType edmEntityType,
 -                                           final ContentType requestedFormat) throws ODataLibraryException {
++      final EdmEntitySet edmEntitySet, final EdmEntityType edmEntityType,
++      final ContentType requestedFormat) throws ODataLibraryException {
+     return serializeEntity(request, entity, edmEntitySet, edmEntityType, requestedFormat, null, null);
+   }
+ 
+   private SerializerResult serializeEntity(final ODataRequest request, final Entity entity,
 -                                           final EdmEntitySet edmEntitySet, final EdmEntityType edmEntityType,
 -                                           final ContentType requestedFormat,
 -                                           final ExpandOption expand, final SelectOption select)
 -          throws ODataLibraryException {
++      final EdmEntitySet edmEntitySet, final EdmEntityType edmEntityType,
++      final ContentType requestedFormat,
++      final ExpandOption expand, final SelectOption select)
++      throws ODataLibraryException {
+ 
+     ContextURL contextUrl = isODataMetadataNone(requestedFormat) ? null :
 -          getContextUrl(request.getRawODataPath(), edmEntitySet, edmEntityType, true, expand, null);
++        getContextUrl(request.getRawODataPath(), edmEntitySet, edmEntityType, true, expand, null);
      return odata.createSerializer(requestedFormat).entity(
 -            serviceMetadata,
 -            edmEntityType,
 -            entity,
 -            EntitySerializerOptions.with()
 -                    .contextURL(contextUrl)
 -                    .expand(expand).select(select)
 -                    .build());
 +        serviceMetadata,
 +        edmEntityType,
 +        entity,
 +        EntitySerializerOptions.with()
-             .contextURL(isODataMetadataNone(requestedFormat) ? null :
-                 getContextUrl(edmEntitySet, edmEntityType, true, expand, select))
++            .contextURL(contextUrl)
 +            .expand(expand).select(select)
 +            .build());
    }
  
-   private ContextURL getContextUrl(final EdmEntitySet entitySet, final EdmEntityType entityType,
-       final boolean isSingleEntity, final ExpandOption expand, final SelectOption select) throws ODataLibraryException {
-     Builder builder = ContextURL.with();
+   private ContextURL getContextUrl(String rawODataPath, final EdmEntitySet entitySet, final EdmEntityType entityType,
 -                                   final boolean isSingleEntity, final ExpandOption expand, final SelectOption select)
 -          throws ODataLibraryException {
++      final boolean isSingleEntity, final ExpandOption expand, final SelectOption select)
++      throws ODataLibraryException {
+     //
+     //
+     Builder builder = ContextURL.with().oDataPath(rawODataPath);
      builder = entitySet == null ?
          isSingleEntity ? builder.type(entityType) : builder.asCollection().type(entityType) :
          builder.entitySet(entitySet);
@@@ -589,10 -605,10 +603,10 @@@
          .suffix(isSingleEntity && entitySet != null ? Suffix.ENTITY : null);
      return builder.build();
    }
--  
++
    private void ensureNavigationPropertyNotNull(final UriResourceNavigation navigationProperty)
        throws ODataApplicationException {
--    if(navigationProperty == null) {
++    if (navigationProperty == null) {
        throw new ODataApplicationException("Missing navigation segment", HttpStatusCode.BAD_REQUEST.getStatusCode(),
            Locale.ROOT);
      }

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/36659707/lib/server-test/pom.xml
----------------------------------------------------------------------
diff --cc lib/server-test/pom.xml
index 3173137,f698028..5edc346
--- a/lib/server-test/pom.xml
+++ b/lib/server-test/pom.xml
@@@ -66,13 -66,7 +66,12 @@@
      <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
-       <scope>test</scope>
      </dependency>
 +    <dependency>
 +      <groupId>xmlunit</groupId>
 +      <artifactId>xmlunit</artifactId>
 +      <scope>test</scope>
 +    </dependency>    
    </dependencies>
  
    <build>