You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@olingo.apache.org by mi...@apache.org on 2015/02/17 10:53:42 UTC

[28/35] olingo-odata4 git commit: [OLINGO-575] Removed V4 server code

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f7a7b484/lib/server-core/src/main/java/org/apache/olingo/server/core/ContentNegotiatorException.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/ContentNegotiatorException.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/ContentNegotiatorException.java
deleted file mode 100644
index e2ee866..0000000
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/ContentNegotiatorException.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * 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.server.core;
-
-import org.apache.olingo.server.api.ODataTranslatedException;
-
-public class ContentNegotiatorException extends ODataTranslatedException {
-  private static final long serialVersionUID = -8112658467394158700L;
-
-  public static enum MessageKeys implements MessageKey {
-    /** parameters: HTTP header name, HTTP header value */
-    WRONG_CHARSET_IN_HEADER,
-    /** parameter: list of content-type ranges */
-    UNSUPPORTED_CONTENT_TYPES,
-    /** parameter: content type */
-    UNSUPPORTED_CONTENT_TYPE,
-    /** no parameter */
-    NO_CONTENT_TYPE_SUPPORTED,
-    /** parameter: format string */
-    UNSUPPORTED_FORMAT_OPTION;
-
-    @Override
-    public String getKey() {
-      return name();
-    }
-  }
-
-  public ContentNegotiatorException(String developmentMessage, MessageKey messageKey, String... parameters) {
-    super(developmentMessage, messageKey, parameters);
-  }
-
-  public ContentNegotiatorException(String developmentMessage, Throwable cause, MessageKey messageKey,
-      String... parameters) {
-    super(developmentMessage, cause, messageKey, parameters);
-  }
-
-  @Override
-  protected String getBundleName() {
-    return DEFAULT_SERVER_BUNDLE_NAME;
-  }
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f7a7b484/lib/server-core/src/main/java/org/apache/olingo/server/core/DefaultRedirectProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/DefaultRedirectProcessor.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/DefaultRedirectProcessor.java
deleted file mode 100644
index 23e539b..0000000
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/DefaultRedirectProcessor.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * 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.server.core;
-
-import org.apache.olingo.commons.api.http.HttpHeader;
-import org.apache.olingo.commons.api.http.HttpStatusCode;
-import org.apache.olingo.server.api.OData;
-import org.apache.olingo.server.api.ODataRequest;
-import org.apache.olingo.server.api.ODataResponse;
-import org.apache.olingo.server.api.ServiceMetadata;
-
-public class DefaultRedirectProcessor implements RedirectProcessor {
-
-  @Override
-  public void init(final OData odata, final ServiceMetadata serviceMetadata) {}
-
-  @Override
-  public void redirect(final ODataRequest request, final ODataResponse response) {
-    response.setStatusCode(HttpStatusCode.TEMPORARY_REDIRECT.getStatusCode());
-
-    String location;
-
-    String rawUri = request.getRawRequestUri();
-    String rawQueryPath = request.getRawQueryPath();
-    if (rawQueryPath == null) {
-      location = request.getRawRequestUri() + "/";
-    } else {
-      location = rawUri.substring(0, rawUri.indexOf(rawQueryPath) - 1) + "/?" + rawQueryPath;
-    }
-
-    response.setHeader(HttpHeader.LOCATION, location);
-  }
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f7a7b484/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataExceptionHelper.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataExceptionHelper.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataExceptionHelper.java
deleted file mode 100644
index be3e7ec..0000000
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataExceptionHelper.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * 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.server.core;
-
-import java.util.Locale;
-
-import org.apache.olingo.commons.api.http.HttpStatusCode;
-import org.apache.olingo.server.api.ODataApplicationException;
-import org.apache.olingo.server.api.ODataServerError;
-import org.apache.olingo.server.api.ODataTranslatedException;
-import org.apache.olingo.server.api.ODataTranslatedException.ODataErrorMessage;
-import org.apache.olingo.server.api.batch.exception.BatchDeserializerException;
-import org.apache.olingo.server.api.serializer.SerializerException;
-import org.apache.olingo.server.core.uri.parser.UriParserException;
-import org.apache.olingo.server.core.uri.parser.UriParserSemanticException;
-import org.apache.olingo.server.core.uri.parser.UriParserSyntaxException;
-import org.apache.olingo.server.core.uri.validator.UriValidationException;
-
-public class ODataExceptionHelper {
-
-  public static ODataServerError createServerErrorObject(UriValidationException e, Locale requestedLocale) {
-    ODataServerError serverError = basicTranslatedError(e, requestedLocale);
-    serverError.setStatusCode(HttpStatusCode.BAD_REQUEST.getStatusCode());
-    return serverError;
-  }
-
-  public static ODataServerError createServerErrorObject(UriParserSemanticException e, Locale requestedLocale) {
-    ODataServerError serverError = basicTranslatedError(e, requestedLocale);
-    if (UriParserSemanticException.MessageKeys.RESOURCE_NOT_FOUND.equals(e.getMessageKey())
-        || UriParserSemanticException.MessageKeys.FUNCTION_NOT_FOUND.equals(e.getMessageKey())
-        || UriParserSemanticException.MessageKeys.PROPERTY_NOT_IN_TYPE.equals(e.getMessageKey())) {
-      serverError.setStatusCode(HttpStatusCode.NOT_FOUND.getStatusCode());
-    } else {
-      serverError.setStatusCode(HttpStatusCode.BAD_REQUEST.getStatusCode());
-    }
-    return serverError;
-  }
-
-  public static ODataServerError createServerErrorObject(UriParserSyntaxException e, Locale requestedLocale) {
-    ODataServerError serverError = basicTranslatedError(e, requestedLocale);
-    serverError.setStatusCode(
-        UriParserSyntaxException.MessageKeys.WRONG_VALUE_FOR_SYSTEM_QUERY_OPTION_FORMAT.equals(e.getMessageKey()) ?
-            HttpStatusCode.NOT_ACCEPTABLE.getStatusCode() :
-            HttpStatusCode.BAD_REQUEST.getStatusCode());
-    return serverError;
-  }
-
-  public static ODataServerError createServerErrorObject(UriParserException e, Locale requestedLocale) {
-    ODataServerError serverError = basicTranslatedError(e, requestedLocale);
-    serverError.setStatusCode(HttpStatusCode.BAD_REQUEST.getStatusCode());
-    return serverError;
-  }
-
-  public static ODataServerError createServerErrorObject(ContentNegotiatorException e, Locale requestedLocale) {
-    ODataServerError serverError = basicTranslatedError(e, requestedLocale);
-    serverError.setStatusCode(HttpStatusCode.NOT_ACCEPTABLE.getStatusCode());
-    return serverError;
-  }
-
-  public static ODataServerError createServerErrorObject(ODataHandlerException e, Locale requestedLocale) {
-    ODataServerError serverError = basicTranslatedError(e, requestedLocale);
-    if (ODataHandlerException.MessageKeys.FUNCTIONALITY_NOT_IMPLEMENTED.equals(e.getMessageKey())
-        || ODataHandlerException.MessageKeys.PROCESSOR_NOT_IMPLEMENTED.equals(e.getMessageKey())) {
-      serverError.setStatusCode(HttpStatusCode.NOT_IMPLEMENTED.getStatusCode());
-    } else if (ODataHandlerException.MessageKeys.ODATA_VERSION_NOT_SUPPORTED.equals(e.getMessageKey())
-        || ODataHandlerException.MessageKeys.INVALID_HTTP_METHOD.equals(e.getMessageKey())
-        || ODataHandlerException.MessageKeys.AMBIGUOUS_XHTTP_METHOD.equals(e.getMessageKey())) {
-      serverError.setStatusCode(HttpStatusCode.BAD_REQUEST.getStatusCode());
-    } else if (ODataHandlerException.MessageKeys.HTTP_METHOD_NOT_ALLOWED.equals(e.getMessageKey())) {
-      serverError.setStatusCode(HttpStatusCode.METHOD_NOT_ALLOWED.getStatusCode());
-    }
-
-    return serverError;
-  }
-
-  public static ODataServerError createServerErrorObject(SerializerException e, Locale requestedLocale) {
-    ODataServerError serverError = basicTranslatedError(e, requestedLocale);
-    serverError.setStatusCode(HttpStatusCode.BAD_REQUEST.getStatusCode());
-    return serverError;
-  }
-  
-  public static ODataServerError createServerErrorObject(BatchDeserializerException e, Locale requestedLocale) {
-    ODataServerError serverError = basicTranslatedError(e, requestedLocale);
-    serverError.setStatusCode(HttpStatusCode.BAD_REQUEST.getStatusCode());
-    return serverError;
-  }
-  
-  public static ODataServerError createServerErrorObject(ODataTranslatedException e, Locale requestedLocale) {
-    return basicTranslatedError(e, requestedLocale);
-  }
-
-  public static ODataServerError createServerErrorObject(ODataApplicationException e) {
-    ODataServerError serverError = basicServerError(e);
-    serverError.setStatusCode(e.getStatusCode());
-    serverError.setLocale(e.getLocale());
-    serverError.setCode(e.getODataErrorCode());
-    return serverError;
-  }
-
-  public static ODataServerError createServerErrorObject(Exception e) {
-    ODataServerError serverError = basicServerError(e);
-    serverError.setStatusCode(HttpStatusCode.INTERNAL_SERVER_ERROR.getStatusCode());
-    serverError.setLocale(Locale.ENGLISH);
-    return serverError;
-  }
-
-  private static ODataServerError basicServerError(Exception e) {
-    ODataServerError serverError = new ODataServerError().setException(e).setMessage(e.getMessage());
-    return serverError;
-  }
-
-  private static ODataServerError basicTranslatedError(ODataTranslatedException e, Locale requestedLocale) {
-    ODataServerError serverError = basicServerError(e);
-    ODataErrorMessage translatedMessage = e.getTranslatedMessage(requestedLocale);
-    serverError.setMessage(translatedMessage.getMessage());
-    serverError.setLocale(translatedMessage.getLocale());
-    serverError.setStatusCode(HttpStatusCode.INTERNAL_SERVER_ERROR.getStatusCode());
-    return serverError;
-  }
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f7a7b484/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandler.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandler.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandler.java
deleted file mode 100644
index 4528d3a..0000000
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandler.java
+++ /dev/null
@@ -1,699 +0,0 @@
-/*
- * 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.server.core;
-
-import java.util.LinkedList;
-import java.util.List;
-
-import org.apache.olingo.commons.api.edm.EdmAction;
-import org.apache.olingo.commons.api.edm.EdmActionImport;
-import org.apache.olingo.commons.api.edm.EdmEntityType;
-import org.apache.olingo.commons.api.edm.EdmFunction;
-import org.apache.olingo.commons.api.edm.EdmFunctionImport;
-import org.apache.olingo.commons.api.edm.EdmPrimitiveTypeKind;
-import org.apache.olingo.commons.api.edm.EdmReturnType;
-import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
-import org.apache.olingo.commons.api.format.ContentType;
-import org.apache.olingo.commons.api.format.ODataFormat;
-import org.apache.olingo.commons.api.http.HttpHeader;
-import org.apache.olingo.commons.api.http.HttpMethod;
-import org.apache.olingo.commons.core.edm.primitivetype.EdmPrimitiveTypeFactory;
-import org.apache.olingo.server.api.OData;
-import org.apache.olingo.server.api.ODataApplicationException;
-import org.apache.olingo.server.api.ODataRequest;
-import org.apache.olingo.server.api.ODataResponse;
-import org.apache.olingo.server.api.ODataServerError;
-import org.apache.olingo.server.api.ServiceMetadata;
-import org.apache.olingo.server.api.batch.exception.BatchDeserializerException;
-import org.apache.olingo.server.api.deserializer.DeserializerException;
-import org.apache.olingo.server.api.processor.ActionComplexCollectionProcessor;
-import org.apache.olingo.server.api.processor.ActionComplexProcessor;
-import org.apache.olingo.server.api.processor.ActionEntityCollectionProcessor;
-import org.apache.olingo.server.api.processor.ActionEntityProcessor;
-import org.apache.olingo.server.api.processor.ActionPrimitiveCollectionProcessor;
-import org.apache.olingo.server.api.processor.ActionPrimitiveProcessor;
-import org.apache.olingo.server.api.processor.BatchProcessor;
-import org.apache.olingo.server.api.processor.ComplexCollectionProcessor;
-import org.apache.olingo.server.api.processor.ComplexProcessor;
-import org.apache.olingo.server.api.processor.CountComplexCollectionProcessor;
-import org.apache.olingo.server.api.processor.CountEntityCollectionProcessor;
-import org.apache.olingo.server.api.processor.CountPrimitiveCollectionProcessor;
-import org.apache.olingo.server.api.processor.DefaultProcessor;
-import org.apache.olingo.server.api.processor.EntityCollectionProcessor;
-import org.apache.olingo.server.api.processor.EntityProcessor;
-import org.apache.olingo.server.api.processor.ErrorProcessor;
-import org.apache.olingo.server.api.processor.MediaEntityProcessor;
-import org.apache.olingo.server.api.processor.MetadataProcessor;
-import org.apache.olingo.server.api.processor.PrimitiveCollectionProcessor;
-import org.apache.olingo.server.api.processor.PrimitiveProcessor;
-import org.apache.olingo.server.api.processor.PrimitiveValueProcessor;
-import org.apache.olingo.server.api.processor.Processor;
-import org.apache.olingo.server.api.processor.ReferenceCollectionProcessor;
-import org.apache.olingo.server.api.processor.ReferenceProcessor;
-import org.apache.olingo.server.api.processor.ServiceDocumentProcessor;
-import org.apache.olingo.server.api.serializer.CustomContentTypeSupport;
-import org.apache.olingo.server.api.serializer.RepresentationType;
-import org.apache.olingo.server.api.serializer.SerializerException;
-import org.apache.olingo.server.api.uri.UriInfo;
-import org.apache.olingo.server.api.uri.UriResource;
-import org.apache.olingo.server.api.uri.UriResourceAction;
-import org.apache.olingo.server.api.uri.UriResourceEntitySet;
-import org.apache.olingo.server.api.uri.UriResourceFunction;
-import org.apache.olingo.server.api.uri.UriResourceNavigation;
-import org.apache.olingo.server.api.uri.UriResourcePartTyped;
-import org.apache.olingo.server.api.uri.UriResourcePrimitiveProperty;
-import org.apache.olingo.server.api.uri.UriResourceProperty;
-import org.apache.olingo.server.core.batchhandler.BatchHandler;
-import org.apache.olingo.server.core.uri.parser.Parser;
-import org.apache.olingo.server.core.uri.parser.UriParserException;
-import org.apache.olingo.server.core.uri.parser.UriParserSemanticException;
-import org.apache.olingo.server.core.uri.parser.UriParserSyntaxException;
-import org.apache.olingo.server.core.uri.validator.UriValidationException;
-import org.apache.olingo.server.core.uri.validator.UriValidator;
-
-public class ODataHandler {
-
-  private final OData odata;
-  private final ServiceMetadata serviceMetadata;
-  private List<Processor> processors = new LinkedList<Processor>();
-  private CustomContentTypeSupport customContentTypeSupport = null;
-
-  private UriInfo uriInfo;
-
-  public ODataHandler(final OData server, final ServiceMetadata serviceMetadata) {
-    odata = server;
-    this.serviceMetadata = serviceMetadata;
-
-    register(new DefaultProcessor());
-    register(new DefaultRedirectProcessor());
-  }
-
-  public ODataResponse process(final ODataRequest request) {
-    ODataResponse response = new ODataResponse();
-    try {
-
-      processInternal(request, response);
-
-    } catch (final UriValidationException e) {
-      ODataServerError serverError = ODataExceptionHelper.createServerErrorObject(e, null);
-      handleException(request, response, serverError);
-    } catch (final UriParserSemanticException e) {
-      ODataServerError serverError = ODataExceptionHelper.createServerErrorObject(e, null);
-      handleException(request, response, serverError);
-    } catch (final UriParserSyntaxException e) {
-      ODataServerError serverError = ODataExceptionHelper.createServerErrorObject(e, null);
-      handleException(request, response, serverError);
-    } catch (final UriParserException e) {
-      ODataServerError serverError = ODataExceptionHelper.createServerErrorObject(e, null);
-      handleException(request, response, serverError);
-    } catch (ContentNegotiatorException e) {
-      ODataServerError serverError = ODataExceptionHelper.createServerErrorObject(e, null);
-      handleException(request, response, serverError);
-    } catch (SerializerException e) {
-      ODataServerError serverError = ODataExceptionHelper.createServerErrorObject(e, null);
-      handleException(request, response, serverError);
-    } catch (BatchDeserializerException e) {
-      ODataServerError serverError = ODataExceptionHelper.createServerErrorObject(e, null);
-      handleException(request, response, serverError);
-    } catch (DeserializerException e) {
-      ODataServerError serverError = ODataExceptionHelper.createServerErrorObject(e, null);
-      handleException(request, response, serverError);
-    } catch (ODataHandlerException e) {
-      ODataServerError serverError = ODataExceptionHelper.createServerErrorObject(e, null);
-      handleException(request, response, serverError);
-    } catch (ODataApplicationException e) {
-      ODataServerError serverError = ODataExceptionHelper.createServerErrorObject(e);
-      handleException(request, response, serverError);
-    } catch (Exception e) {
-      ODataServerError serverError = ODataExceptionHelper.createServerErrorObject(e);
-      handleException(request, response, serverError);
-    }
-    return response;
-  }
-
-  private void processInternal(final ODataRequest request, final ODataResponse response)
-          throws ODataHandlerException, UriParserException, UriValidationException, ContentNegotiatorException,
-          ODataApplicationException, SerializerException, DeserializerException {
-    validateODataVersion(request, response);
-
-    uriInfo = new Parser().parseUri(request.getRawODataPath(), request.getRawQueryPath(), null,
-            serviceMetadata.getEdm());
-
-    final HttpMethod method = request.getMethod();
-    new UriValidator().validate(uriInfo, method);
-
-    switch (uriInfo.getKind()) {
-      case metadata:
-        if (method == HttpMethod.GET) {
-          final ContentType requestedContentType = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
-                  request, customContentTypeSupport, RepresentationType.METADATA);
-          selectProcessor(MetadataProcessor.class)
-                  .readMetadata(request, response, uriInfo, requestedContentType);
-        } else {
-          throw new ODataHandlerException("HttpMethod " + method + " not allowed for metadata document",
-                  ODataHandlerException.MessageKeys.HTTP_METHOD_NOT_ALLOWED, method.toString());
-        }
-        break;
-
-      case service:
-        if (method == HttpMethod.GET) {
-          if ("".equals(request.getRawODataPath())) {
-            selectProcessor(RedirectProcessor.class).redirect(request, response);
-          } else {
-            final ContentType requestedContentType = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
-                    request, customContentTypeSupport, RepresentationType.SERVICE);
-
-            selectProcessor(ServiceDocumentProcessor.class)
-                    .readServiceDocument(request, response, uriInfo, requestedContentType);
-          }
-        } else {
-          throw new ODataHandlerException("HttpMethod " + method + " not allowed for service document",
-                  ODataHandlerException.MessageKeys.HTTP_METHOD_NOT_ALLOWED, method.toString());
-        }
-        break;
-
-      case resource:
-        handleResourceDispatching(request, response);
-        break;
-
-      case batch:
-        if (method == HttpMethod.POST) {
-          final BatchProcessor bp = selectProcessor(BatchProcessor.class);
-          final BatchHandler handler = new BatchHandler(this, bp);
-          handler.process(request, response, true);
-        } else {
-          throw new ODataHandlerException("HTTP method " + method + " is not allowed.",
-                  ODataHandlerException.MessageKeys.HTTP_METHOD_NOT_ALLOWED, method.toString());
-        }
-        break;
-
-      default:
-        throw new ODataHandlerException("not implemented",
-                ODataHandlerException.MessageKeys.FUNCTIONALITY_NOT_IMPLEMENTED);
-    }
-  }
-
-  public void handleException(final ODataRequest request, final ODataResponse response,
-                              final ODataServerError serverError) {
-
-    ErrorProcessor exceptionProcessor;
-    try {
-      exceptionProcessor = selectProcessor(ErrorProcessor.class);
-    } catch (ODataHandlerException e) {
-      // This cannot happen since there is always an ExceptionProcessor registered.
-      exceptionProcessor = new DefaultProcessor();
-    }
-    ContentType requestedContentType;
-    try {
-      requestedContentType = ContentNegotiator.doContentNegotiation(
-              uriInfo == null ? null : uriInfo.getFormatOption(), request, customContentTypeSupport,
-              RepresentationType.ERROR);
-    } catch (final ContentNegotiatorException e) {
-      requestedContentType = ODataFormat.JSON.getContentType(ODataServiceVersion.V40);
-    }
-    exceptionProcessor.processError(request, response, serverError, requestedContentType);
-  }
-
-  private void handleResourceDispatching(final ODataRequest request, final ODataResponse response)
-          throws ODataHandlerException, ContentNegotiatorException, ODataApplicationException,
-          SerializerException, DeserializerException {
-
-    final int lastPathSegmentIndex = uriInfo.getUriResourceParts().size() - 1;
-    final UriResource lastPathSegment = uriInfo.getUriResourceParts().get(lastPathSegmentIndex);
-
-    switch (lastPathSegment.getKind()) {
-      case action:
-        handleActionDispatching(request, response, (UriResourceAction) lastPathSegment);
-        break;
-
-      case function:
-        handleFunctionDispatching(request, response, (UriResourceFunction) lastPathSegment);
-        break;
-
-      case entitySet:
-      case navigationProperty:
-        handleEntityDispatching(request, response, (UriResourcePartTyped) lastPathSegment);
-        break;
-
-      case count:
-        handleCountDispatching(request, response, lastPathSegmentIndex);
-        break;
-
-      case primitiveProperty:
-        handlePrimitivePropertyDispatching(request, response, false,
-                ((UriResourceProperty) lastPathSegment).isCollection());
-        break;
-
-      case complexProperty:
-        handleComplexPropertyDispatching(request, response, false,
-                ((UriResourceProperty) lastPathSegment).isCollection());
-        break;
-
-      case value:
-        handleValueDispatching(request, response, lastPathSegmentIndex);
-        break;
-
-      case ref:
-        handleReferenceDispatching(request, response, lastPathSegmentIndex);
-        break;
-
-      default:
-        throw new ODataHandlerException("not implemented",
-                ODataHandlerException.MessageKeys.FUNCTIONALITY_NOT_IMPLEMENTED);
-    }
-  }
-
-  private void handleFunctionDispatching(final ODataRequest request, final ODataResponse response,
-                                         final UriResourceFunction uriResourceFunction)
-          throws ODataHandlerException, SerializerException, ContentNegotiatorException,
-          ODataApplicationException, DeserializerException {
-    final HttpMethod method = request.getMethod();
-    if(method != HttpMethod.GET) {
-      throw new ODataHandlerException("HTTP method " + method + " is not allowed.",
-              ODataHandlerException.MessageKeys.HTTP_METHOD_NOT_ALLOWED, method.toString());
-    }
-
-    EdmFunctionImport functionImport = uriResourceFunction.getFunctionImport();
-    // could be null for bound functions
-    if(functionImport == null) {
-      throw new ODataHandlerException("Bound functions are not implemented yet",
-              ODataHandlerException.MessageKeys.FUNCTIONALITY_NOT_IMPLEMENTED);
-    }
-
-    List<EdmFunction> unboundFunctions = functionImport.getUnboundFunctions();
-    if(unboundFunctions == null || unboundFunctions.isEmpty()) {
-      throw new ODataHandlerException("No unbound function defined for function import",
-              ODataHandlerException.MessageKeys.FUNCTIONALITY_NOT_IMPLEMENTED);
-    }
-    EdmReturnType returnType = unboundFunctions.get(0).getReturnType();
-    handleOperationDispatching(request, response, false, returnType);
-  }
-
-  private void handleActionDispatching(final ODataRequest request, final ODataResponse response,
-                                       final UriResourceAction uriResourceAction)
-          throws ODataHandlerException, SerializerException, ContentNegotiatorException,
-          ODataApplicationException, DeserializerException {
-
-    final HttpMethod method = request.getMethod();
-    if(request.getMethod() != HttpMethod.POST) {
-      throw new ODataHandlerException("HTTP method " + method + " is not allowed.",
-              ODataHandlerException.MessageKeys.HTTP_METHOD_NOT_ALLOWED, method.toString());
-    }
-
-    EdmActionImport actionImport = uriResourceAction.getActionImport();
-    // could be null for bound actions
-    if(actionImport == null) {
-      throw new ODataHandlerException("Bound actions are not implemented yet",
-              ODataHandlerException.MessageKeys.FUNCTIONALITY_NOT_IMPLEMENTED);
-    }
-
-    EdmAction unboundActions = actionImport.getUnboundAction();
-    if(unboundActions == null) {
-      throw new ODataHandlerException("No unbound function defined for function import",
-              ODataHandlerException.MessageKeys.FUNCTIONALITY_NOT_IMPLEMENTED);
-    }
-    EdmReturnType returnType = unboundActions.getReturnType();
-    handleOperationDispatching(request, response, true, returnType);
-  }
-
-
-  private void handleOperationDispatching(final ODataRequest request, final ODataResponse response,
-                                          final boolean isAction, final EdmReturnType edmReturnTypeKind)
-          throws ODataHandlerException, SerializerException, ContentNegotiatorException,
-          ODataApplicationException, DeserializerException {
-
-    switch (edmReturnTypeKind.getType().getKind()) {
-      case ENTITY:
-        handleEntityDispatching(request, response, edmReturnTypeKind.isCollection(), false, isAction);
-        break;
-      case PRIMITIVE:
-        handlePrimitivePropertyDispatching(request, response, isAction, edmReturnTypeKind.isCollection());
-        break;
-      case COMPLEX:
-        handleComplexPropertyDispatching(request, response, isAction, edmReturnTypeKind.isCollection());
-        break;
-      default:
-        throw new ODataHandlerException("not implemented",
-                ODataHandlerException.MessageKeys.FUNCTIONALITY_NOT_IMPLEMENTED);
-    }
-  }
-
-
-  private void handleReferenceDispatching(final ODataRequest request, final ODataResponse response,
-                                          final int lastPathSegmentIndex)
-          throws ContentNegotiatorException, ODataApplicationException, SerializerException, ODataHandlerException,
-          DeserializerException {
-    final HttpMethod method = request.getMethod();
-    if (((UriResourcePartTyped) uriInfo.getUriResourceParts().get(lastPathSegmentIndex - 1)).isCollection()) {
-      if (method == HttpMethod.GET) {
-        final ContentType responseFormat = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
-                request, customContentTypeSupport, RepresentationType.COLLECTION_REFERENCE);
-        selectProcessor(ReferenceCollectionProcessor.class)
-                .readReferenceCollection(request, response, uriInfo, responseFormat);
-      } else if (method == HttpMethod.POST) {
-        final ContentType requestFormat = ContentType.parse(request.getHeader(HttpHeader.CONTENT_TYPE));
-        checkContentTypeSupport(requestFormat, RepresentationType.REFERENCE);
-        selectProcessor(ReferenceProcessor.class)
-                .createReference(request, response, uriInfo, requestFormat);
-      } else {
-        throw new ODataHandlerException("HTTP method " + method + " is not allowed.",
-                ODataHandlerException.MessageKeys.HTTP_METHOD_NOT_ALLOWED, method.toString());
-      }
-    } else {
-      if (method == HttpMethod.GET) {
-        final ContentType responseFormat = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
-                request, customContentTypeSupport, RepresentationType.REFERENCE);
-        selectProcessor(ReferenceProcessor.class).readReference(request, response, uriInfo, responseFormat);
-      } else if (method == HttpMethod.PUT || method == HttpMethod.PATCH) {
-        final ContentType requestFormat = ContentType.parse(request.getHeader(HttpHeader.CONTENT_TYPE));
-        checkContentTypeSupport(requestFormat, RepresentationType.REFERENCE);
-        selectProcessor(ReferenceProcessor.class)
-                .updateReference(request, response, uriInfo, requestFormat);
-      } else if (method == HttpMethod.DELETE) {
-        selectProcessor(ReferenceProcessor.class)
-                .deleteReference(request, response, uriInfo);
-      } else {
-        throw new ODataHandlerException("HTTP method " + method + " is not allowed.",
-                ODataHandlerException.MessageKeys.HTTP_METHOD_NOT_ALLOWED, method.toString());
-      }
-    }
-  }
-
-  private void handleValueDispatching(final ODataRequest request, final ODataResponse response,
-                                      final int lastPathSegmentIndex)
-          throws ContentNegotiatorException, ODataApplicationException, SerializerException, ODataHandlerException,
-          DeserializerException {
-    final HttpMethod method = request.getMethod();
-    final UriResource resource = uriInfo.getUriResourceParts().get(lastPathSegmentIndex - 1);
-    if (resource instanceof UriResourceProperty) {
-      final RepresentationType valueRepresentationType =
-              ((UriResourceProperty) resource).getType() ==
-                      EdmPrimitiveTypeFactory.getInstance(EdmPrimitiveTypeKind.Binary) ?
-                      RepresentationType.BINARY : RepresentationType.VALUE;
-      if (method == HttpMethod.GET) {
-        final ContentType requestedContentType = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
-                request, customContentTypeSupport, valueRepresentationType);
-
-        selectProcessor(PrimitiveValueProcessor.class)
-                .readPrimitiveValue(request, response, uriInfo, requestedContentType);
-      } else if (method == HttpMethod.PUT) {
-        final ContentType requestFormat = ContentType.parse(request.getHeader(HttpHeader.CONTENT_TYPE));
-        checkContentTypeSupport(requestFormat, valueRepresentationType);
-        final ContentType responseFormat = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
-                request, customContentTypeSupport, valueRepresentationType);
-        selectProcessor(PrimitiveValueProcessor.class)
-                .updatePrimitive(request, response, uriInfo, requestFormat, responseFormat);
-      } else if (method == HttpMethod.DELETE) {
-        selectProcessor(PrimitiveValueProcessor.class).deletePrimitive(request, response, uriInfo);
-      } else {
-        throw new ODataHandlerException("HTTP method " + method + " is not allowed.",
-                ODataHandlerException.MessageKeys.HTTP_METHOD_NOT_ALLOWED, method.toString());
-      }
-    } else {
-      if (method == HttpMethod.GET) {
-        final ContentType requestedContentType = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
-                request, customContentTypeSupport, RepresentationType.MEDIA);
-        selectProcessor(MediaEntityProcessor.class)
-                .readMediaEntity(request, response, uriInfo, requestedContentType);
-      } else if (method == HttpMethod.PUT) {
-        final ContentType requestFormat = ContentType.parse(request.getHeader(HttpHeader.CONTENT_TYPE));
-        final ContentType responseFormat = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
-                request, customContentTypeSupport, RepresentationType.ENTITY);
-        selectProcessor(MediaEntityProcessor.class)
-                .updateMediaEntity(request, response, uriInfo, requestFormat, responseFormat);
-      } else if (method == HttpMethod.DELETE) {
-        selectProcessor(MediaEntityProcessor.class).deleteEntity(request, response, uriInfo);
-      } else {
-        throw new ODataHandlerException("HTTP method " + method + " is not allowed.",
-                ODataHandlerException.MessageKeys.HTTP_METHOD_NOT_ALLOWED, method.toString());
-      }
-    }
-  }
-
-  private void handleComplexPropertyDispatching(final ODataRequest request, final ODataResponse response,
-                                                final boolean isAction, final boolean isCollection)
-          throws ContentNegotiatorException, ODataApplicationException, SerializerException, ODataHandlerException,
-          DeserializerException {
-
-    final HttpMethod method = request.getMethod();
-    final RepresentationType complexRepresentationType = isCollection ?
-            RepresentationType.COLLECTION_COMPLEX : RepresentationType.COMPLEX;
-    if (method == HttpMethod.GET) {
-      final ContentType requestedContentType = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
-              request, customContentTypeSupport, complexRepresentationType);
-      if (complexRepresentationType == RepresentationType.COMPLEX) {
-        selectProcessor(ComplexProcessor.class)
-                .readComplex(request, response, uriInfo, requestedContentType);
-      } else {
-        selectProcessor(ComplexCollectionProcessor.class)
-                .readComplexCollection(request, response, uriInfo, requestedContentType);
-      }
-    } else if (method == HttpMethod.PUT || method == HttpMethod.PATCH) {
-      final ContentType requestFormat = ContentType.parse(request.getHeader(HttpHeader.CONTENT_TYPE));
-      checkContentTypeSupport(requestFormat, complexRepresentationType);
-      final ContentType responseFormat = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
-              request, customContentTypeSupport, complexRepresentationType);
-      if (complexRepresentationType == RepresentationType.COMPLEX) {
-        selectProcessor(ComplexProcessor.class)
-                .updateComplex(request, response, uriInfo, requestFormat, responseFormat);
-      } else {
-        selectProcessor(ComplexCollectionProcessor.class)
-                .updateComplexCollection(request, response, uriInfo, requestFormat, responseFormat);
-      }
-    } else if (method == HttpMethod.POST && isAction) {
-      final ContentType requestFormat = ContentType.parse(request.getHeader(HttpHeader.CONTENT_TYPE));
-      checkContentTypeSupport(requestFormat, complexRepresentationType);
-      final ContentType responseFormat = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
-              request, customContentTypeSupport, complexRepresentationType);
-      if (complexRepresentationType == RepresentationType.COMPLEX) {
-        selectProcessor(ActionComplexProcessor.class)
-                .processActionComplex(request, response, uriInfo, requestFormat, responseFormat);
-      } else {
-        selectProcessor(ActionComplexCollectionProcessor.class)
-                .processActionComplexCollection(request, response, uriInfo, requestFormat, responseFormat);
-      }
-    } else if (method == HttpMethod.DELETE) {
-      if (complexRepresentationType == RepresentationType.COMPLEX) {
-        selectProcessor(ComplexProcessor.class).deleteComplex(request, response, uriInfo);
-      } else {
-        selectProcessor(ComplexCollectionProcessor.class).deleteComplexCollection(request, response, uriInfo);
-      }
-    } else {
-      throw new ODataHandlerException("HTTP method " + method + " is not allowed.",
-              ODataHandlerException.MessageKeys.HTTP_METHOD_NOT_ALLOWED, method.toString());
-    }
-  }
-
-  private void handlePrimitivePropertyDispatching(final ODataRequest request, final ODataResponse response,
-                                                  boolean isAction, final boolean isCollection)
-          throws ContentNegotiatorException, ODataApplicationException, SerializerException, ODataHandlerException,
-          DeserializerException {
-
-    final HttpMethod method = request.getMethod();
-    final RepresentationType representationType = isCollection ?
-            RepresentationType.COLLECTION_PRIMITIVE : RepresentationType.PRIMITIVE;
-    if (method == HttpMethod.GET) {
-      final ContentType requestedContentType = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
-              request, customContentTypeSupport, representationType);
-      if (representationType == RepresentationType.PRIMITIVE) {
-        selectProcessor(PrimitiveProcessor.class).readPrimitive(request, response, uriInfo, requestedContentType);
-      } else {
-        selectProcessor(PrimitiveCollectionProcessor.class)
-                .readPrimitiveCollection(request, response, uriInfo, requestedContentType);
-      }
-    } else if (method == HttpMethod.PUT || method == HttpMethod.PATCH) {
-      final ContentType requestFormat = ContentType.parse(request.getHeader(HttpHeader.CONTENT_TYPE));
-      checkContentTypeSupport(requestFormat, representationType);
-      final ContentType responseFormat = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
-              request, customContentTypeSupport, representationType);
-      if (representationType == RepresentationType.PRIMITIVE) {
-        selectProcessor(PrimitiveProcessor.class)
-                .updatePrimitive(request, response, uriInfo, requestFormat, responseFormat);
-      } else {
-        selectProcessor(PrimitiveCollectionProcessor.class)
-                .updatePrimitiveCollection(request, response, uriInfo, requestFormat, responseFormat);
-      }
-    } else if (method == HttpMethod.DELETE) {
-      if (representationType == RepresentationType.PRIMITIVE) {
-        selectProcessor(PrimitiveProcessor.class).deletePrimitive(request, response, uriInfo);
-      } else {
-        selectProcessor(PrimitiveCollectionProcessor.class).deletePrimitiveCollection(request, response, uriInfo);
-      }
-    } else if (method == HttpMethod.POST && isAction) {
-      final ContentType requestFormat = ContentType.parse(request.getHeader(HttpHeader.CONTENT_TYPE));
-      checkContentTypeSupport(requestFormat, representationType);
-      final ContentType responseFormat = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
-              request, customContentTypeSupport, representationType);
-      if (representationType == RepresentationType.PRIMITIVE) {
-        selectProcessor(ActionPrimitiveProcessor.class)
-                .processActionPrimitive(request, response, uriInfo, requestFormat, responseFormat);
-      } else {
-        selectProcessor(ActionPrimitiveCollectionProcessor.class)
-                .processActionPrimitiveCollection(request, response, uriInfo, requestFormat, responseFormat);
-      }
-    } else {
-      throw new ODataHandlerException("HTTP method " + method + " is not allowed.",
-              ODataHandlerException.MessageKeys.HTTP_METHOD_NOT_ALLOWED, method.toString());
-    }
-  }
-
-  private void handleCountDispatching(final ODataRequest request, final ODataResponse response,
-                                      final int lastPathSegmentIndex)
-          throws ODataApplicationException, SerializerException, ODataHandlerException {
-
-    final HttpMethod method = request.getMethod();
-    if (method == HttpMethod.GET) {
-      final UriResource resource = uriInfo.getUriResourceParts().get(lastPathSegmentIndex - 1);
-      if (resource instanceof UriResourceEntitySet || resource instanceof UriResourceNavigation) {
-        selectProcessor(CountEntityCollectionProcessor.class)
-                .countEntityCollection(request, response, uriInfo);
-      } else if (resource instanceof UriResourcePrimitiveProperty) {
-        selectProcessor(CountPrimitiveCollectionProcessor.class)
-                .countPrimitiveCollection(request, response, uriInfo);
-      } else {
-        selectProcessor(CountComplexCollectionProcessor.class)
-                .countComplexCollection(request, response, uriInfo);
-      }
-    } else {
-      throw new ODataHandlerException("HTTP method " + method + " is not allowed for count.",
-              ODataHandlerException.MessageKeys.HTTP_METHOD_NOT_ALLOWED, method.toString());
-    }
-  }
-
-  private void handleEntityDispatching(final ODataRequest request, final ODataResponse response,
-                                       final UriResourcePartTyped uriResourcePart)
-          throws ContentNegotiatorException, ODataApplicationException, SerializerException, ODataHandlerException,
-          DeserializerException {
-    handleEntityDispatching(request, response, uriResourcePart.isCollection(), isMedia(uriResourcePart), false);
-  }
-
-  private void handleEntityDispatching(final ODataRequest request, final ODataResponse response,
-                                       final boolean isCollection, final boolean isMedia, boolean isAction)
-          throws ContentNegotiatorException, ODataApplicationException, SerializerException, ODataHandlerException,
-          DeserializerException {
-
-    final HttpMethod method = request.getMethod();
-    if (isCollection) {
-      if (method == HttpMethod.GET) {
-        final ContentType requestedContentType = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
-                request, customContentTypeSupport, RepresentationType.COLLECTION_ENTITY);
-
-        selectProcessor(EntityCollectionProcessor.class)
-                .readEntityCollection(request, response, uriInfo, requestedContentType);
-      } else if (method == HttpMethod.POST) {
-          final ContentType requestFormat = ContentType.parse(request.getHeader(HttpHeader.CONTENT_TYPE));
-        if (isMedia) {
-          final ContentType responseFormat = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
-                  request, customContentTypeSupport, RepresentationType.ENTITY);
-          selectProcessor(MediaEntityProcessor.class)
-                  .createMediaEntity(request, response, uriInfo, requestFormat, responseFormat);
-        } else if(isAction) {
-          checkContentTypeSupport(requestFormat, RepresentationType.ENTITY);
-          final ContentType responseFormat = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
-                  request, customContentTypeSupport, RepresentationType.ENTITY);
-          selectProcessor(ActionEntityCollectionProcessor.class)
-                  .processActionEntityCollection(request, response, uriInfo, requestFormat, responseFormat);
-        } else {
-          checkContentTypeSupport(requestFormat, RepresentationType.ENTITY);
-          final ContentType responseFormat = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
-                  request, customContentTypeSupport, RepresentationType.ENTITY);
-          selectProcessor(EntityProcessor.class)
-                  .createEntity(request, response, uriInfo, requestFormat, responseFormat);
-        }
-      } else {
-        throw new ODataHandlerException("HTTP method " + method + " is not allowed.",
-                ODataHandlerException.MessageKeys.HTTP_METHOD_NOT_ALLOWED, method.toString());
-      }
-    } else {
-      if (method == HttpMethod.GET) {
-        final ContentType requestedContentType = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
-                request, customContentTypeSupport, RepresentationType.ENTITY);
-
-        selectProcessor(EntityProcessor.class).readEntity(request, response, uriInfo, requestedContentType);
-      } else if (method == HttpMethod.PUT || method == HttpMethod.PATCH) {
-        final ContentType requestFormat = ContentType.parse(request.getHeader(HttpHeader.CONTENT_TYPE));
-        checkContentTypeSupport(requestFormat, RepresentationType.ENTITY);
-        final ContentType responseFormat = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
-                request, customContentTypeSupport, RepresentationType.ENTITY);
-        selectProcessor(EntityProcessor.class).updateEntity(request, response, uriInfo, requestFormat, responseFormat);
-      } else if (method == HttpMethod.POST && isAction) {
-        final ContentType requestFormat = ContentType.parse(request.getHeader(HttpHeader.CONTENT_TYPE));
-        checkContentTypeSupport(requestFormat, RepresentationType.ENTITY);
-        final ContentType responseFormat = ContentNegotiator.doContentNegotiation(uriInfo.getFormatOption(),
-                request, customContentTypeSupport, RepresentationType.ENTITY);
-        selectProcessor(ActionEntityProcessor.class).processActionEntity(
-                request, response, uriInfo, requestFormat, responseFormat);
-      } else if (method == HttpMethod.DELETE) {
-        selectProcessor(isMedia ? MediaEntityProcessor.class : EntityProcessor.class)
-                .deleteEntity(request, response, uriInfo);
-      } else {
-        throw new ODataHandlerException("HTTP method " + method + " is not allowed.",
-                ODataHandlerException.MessageKeys.HTTP_METHOD_NOT_ALLOWED, method.toString());
-      }
-    }
-  }
-
-  private void checkContentTypeSupport(ContentType requestFormat, RepresentationType representationType)
-          throws ODataHandlerException, ContentNegotiatorException {
-    if (!ContentNegotiator.isSupported(requestFormat, customContentTypeSupport, representationType)) {
-      final String contentTypeString = requestFormat.toContentTypeString();
-      throw new ODataHandlerException("ContentType " + contentTypeString + " is not supported.",
-              ODataHandlerException.MessageKeys.UNSUPPORTED_CONTENT_TYPE, contentTypeString);
-    }
-  }
-
-  private void validateODataVersion(final ODataRequest request, final ODataResponse response)
-          throws ODataHandlerException {
-    final String maxVersion = request.getHeader(HttpHeader.ODATA_MAX_VERSION);
-    response.setHeader(HttpHeader.ODATA_VERSION, ODataServiceVersion.V40.toString());
-
-    if (maxVersion != null) {
-      if (ODataServiceVersion.isBiggerThan(ODataServiceVersion.V40.toString(), maxVersion)) {
-        throw new ODataHandlerException("ODataVersion not supported: " + maxVersion,
-                ODataHandlerException.MessageKeys.ODATA_VERSION_NOT_SUPPORTED, maxVersion);
-      }
-    }
-  }
-
-  private boolean isMedia(final UriResource pathSegment) {
-    return pathSegment instanceof UriResourceEntitySet
-            && ((UriResourceEntitySet) pathSegment).getEntityType().hasStream()
-            || pathSegment instanceof UriResourceNavigation
-            && ((EdmEntityType) ((UriResourceNavigation) pathSegment).getType()).hasStream();
-  }
-
-  private <T extends Processor> T selectProcessor(final Class<T> cls) throws ODataHandlerException {
-    for (final Processor processor : processors) {
-      if (cls.isAssignableFrom(processor.getClass())) {
-        processor.init(odata, serviceMetadata);
-        return cls.cast(processor);
-      }
-    }
-    throw new ODataHandlerException("Processor: " + cls.getSimpleName() + " not registered.",
-            ODataHandlerException.MessageKeys.PROCESSOR_NOT_IMPLEMENTED, cls.getSimpleName());
-  }
-
-  public void register(final Processor processor) {
-    processors.add(0, processor);
-  }
-
-  public void register(final CustomContentTypeSupport customContentTypeSupport) {
-    this.customContentTypeSupport = customContentTypeSupport;
-  }
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f7a7b484/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandlerException.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandlerException.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandlerException.java
deleted file mode 100644
index 8ebbc26..0000000
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHandlerException.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * 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.server.core;
-
-import org.apache.olingo.server.api.ODataTranslatedException;
-
-/** Exception thrown during basic request handling. */
-public class ODataHandlerException extends ODataTranslatedException {
-  private static final long serialVersionUID = -907752788975531134L;
-
-  public static enum MessageKeys implements MessageKey {
-    /** parameters: HTTP method, HTTP method */ AMBIGUOUS_XHTTP_METHOD,
-    /** parameter: HTTP method */ INVALID_HTTP_METHOD,
-    /** parameter: HTTP method */ HTTP_METHOD_NOT_ALLOWED,
-    /** parameter: processor interface */ PROCESSOR_NOT_IMPLEMENTED,
-    /** no parameter */ FUNCTIONALITY_NOT_IMPLEMENTED,
-    /** parameter: content type */ UNSUPPORTED_CONTENT_TYPE,
-    /** parameter: version */ ODATA_VERSION_NOT_SUPPORTED;
-
-    @Override
-    public String getKey() {
-      return name();
-    }
-  }
-
-  public ODataHandlerException(final String developmentMessage, final MessageKey messageKey,
-      final String... parameters) {
-    super(developmentMessage, messageKey, parameters);
-  }
-
-  @Override
-  protected String getBundleName() {
-    return DEFAULT_SERVER_BUNDLE_NAME;
-  }
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f7a7b484/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHttpHandlerImpl.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHttpHandlerImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHttpHandlerImpl.java
deleted file mode 100644
index 36cbd18..0000000
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataHttpHandlerImpl.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * 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.server.core;
-
-import java.io.Closeable;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.Map.Entry;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.apache.olingo.commons.api.ODataRuntimeException;
-import org.apache.olingo.commons.api.http.HttpHeader;
-import org.apache.olingo.commons.api.http.HttpMethod;
-import org.apache.olingo.server.api.OData;
-import org.apache.olingo.server.api.ODataHttpHandler;
-import org.apache.olingo.server.api.ODataRequest;
-import org.apache.olingo.server.api.ODataResponse;
-import org.apache.olingo.server.api.ODataServerError;
-import org.apache.olingo.server.api.ODataTranslatedException;
-import org.apache.olingo.server.api.ServiceMetadata;
-import org.apache.olingo.server.api.processor.Processor;
-import org.apache.olingo.server.api.serializer.CustomContentTypeSupport;
-import org.apache.olingo.server.api.serializer.SerializerException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-public class ODataHttpHandlerImpl implements ODataHttpHandler {
-
-  private static final Logger LOG = LoggerFactory.getLogger(ODataHttpHandlerImpl.class);
-
-  private ODataHandler handler;
-  private int split = 0;
-
-  public ODataHttpHandlerImpl(final OData odata, final ServiceMetadata serviceMetadata) {
-    handler = new ODataHandler(odata, serviceMetadata);
-  }
-
-  @Override
-  public void process(final HttpServletRequest request, final HttpServletResponse response) {
-    ODataRequest odRequest = null;
-    ODataResponse odResponse;
-    try {
-      odRequest = createODataRequest(request, split);
-      odResponse = handler.process(odRequest);
-      // ALL future methods after process must not throw exceptions!
-    } catch (Exception e) {
-      odResponse = handleException(odRequest, e);
-    }
-
-    convertToHttp(response, odResponse);
-  }
-
-  @Override
-  public void setSplit(int split) {
-    this.split = split;
-  }
-
-  private ODataResponse handleException(ODataRequest odRequest, Exception e) {
-    ODataResponse resp = new ODataResponse();
-    ODataServerError serverError;
-    if (e instanceof ODataHandlerException) {
-      serverError = ODataExceptionHelper.createServerErrorObject((ODataHandlerException) e, null);
-    } else if (e instanceof ODataTranslatedException) {
-      serverError = ODataExceptionHelper.createServerErrorObject((ODataTranslatedException) e, null);
-    } else {
-      serverError = ODataExceptionHelper.createServerErrorObject(e);
-    }
-    handler.handleException(odRequest, resp, serverError);
-    return resp;
-  }
-
-  static void convertToHttp(final HttpServletResponse response, final ODataResponse odResponse) {
-    response.setStatus(odResponse.getStatusCode());
-
-    for (Entry<String, String> entry : odResponse.getHeaders().entrySet()) {
-      response.setHeader(entry.getKey(), entry.getValue());
-    }
-
-    InputStream input = odResponse.getContent();
-    if (input != null) {
-      OutputStream output = null;
-      try {
-        output = response.getOutputStream();
-        byte[] buffer = new byte[1024];
-        int n;
-        while (-1 != (n = input.read(buffer))) {
-          output.write(buffer, 0, n);
-        }
-      } catch (IOException e) {
-        LOG.error(e.getMessage(), e);
-        throw new ODataRuntimeException(e);
-      } finally {
-        closeStream(output);
-        closeStream(input);
-      }
-    }
-  }
-
-  private static void closeStream(Closeable closeable) {
-    if(closeable != null) {
-      try {
-        closeable.close();
-      } catch (IOException e) {
-        LOG.error(e.getMessage(), e);
-      }
-    }
-  }
-
-  private ODataRequest createODataRequest(final HttpServletRequest httpRequest, final int split)
-      throws ODataTranslatedException {
-    try {
-      ODataRequest odRequest = new ODataRequest();
-
-      odRequest.setBody(httpRequest.getInputStream());
-      extractHeaders(odRequest, httpRequest);
-      extractMethod(odRequest, httpRequest);
-      extractUri(odRequest, httpRequest, split);
-
-      return odRequest;
-    } catch (final IOException e) {
-      throw new SerializerException("An I/O exception occurred.", e,
-          SerializerException.MessageKeys.IO_EXCEPTION);
-    }
-  }
-
-  static void extractMethod(final ODataRequest odRequest, final HttpServletRequest httpRequest)
-      throws ODataTranslatedException {
-    try {
-      HttpMethod httpRequestMethod = HttpMethod.valueOf(httpRequest.getMethod());
-
-      if (httpRequestMethod == HttpMethod.POST) {
-        String xHttpMethod = httpRequest.getHeader(HttpHeader.X_HTTP_METHOD);
-        String xHttpMethodOverride = httpRequest.getHeader(HttpHeader.X_HTTP_METHOD_OVERRIDE);
-
-        if (xHttpMethod == null && xHttpMethodOverride == null) {
-          odRequest.setMethod(httpRequestMethod);
-        } else if (xHttpMethod == null) {
-          odRequest.setMethod(HttpMethod.valueOf(xHttpMethodOverride));
-        } else if (xHttpMethodOverride == null) {
-          odRequest.setMethod(HttpMethod.valueOf(xHttpMethod));
-        } else {
-          if (!xHttpMethod.equalsIgnoreCase(xHttpMethodOverride)) {
-            throw new ODataHandlerException("Ambiguous X-HTTP-Methods",
-                ODataHandlerException.MessageKeys.AMBIGUOUS_XHTTP_METHOD, xHttpMethod, xHttpMethodOverride);
-          }
-          odRequest.setMethod(HttpMethod.valueOf(xHttpMethod));
-        }
-      } else {
-        odRequest.setMethod(httpRequestMethod);
-      }
-    } catch (IllegalArgumentException e) {
-      throw new ODataHandlerException("Invalid HTTP method" + httpRequest.getMethod(),
-          ODataHandlerException.MessageKeys.INVALID_HTTP_METHOD, httpRequest.getMethod());
-    }
-  }
-
-  static void extractUri(final ODataRequest odRequest, final HttpServletRequest httpRequest, final int split) {
-    String rawRequestUri = httpRequest.getRequestURL().toString();
-
-    String rawODataPath;
-    if (!"".equals(httpRequest.getServletPath())) {
-      int beginIndex;
-      beginIndex = rawRequestUri.indexOf(httpRequest.getServletPath());
-      beginIndex += httpRequest.getServletPath().length();
-      rawODataPath = rawRequestUri.substring(beginIndex);
-    } else if (!"".equals(httpRequest.getContextPath())) {
-      int beginIndex;
-      beginIndex = rawRequestUri.indexOf(httpRequest.getContextPath());
-      beginIndex += httpRequest.getContextPath().length();
-      rawODataPath = rawRequestUri.substring(beginIndex);
-    } else {
-      rawODataPath = httpRequest.getRequestURI();
-    }
-
-    String rawServiceResolutionUri;
-    if (split > 0) {
-      rawServiceResolutionUri = rawODataPath;
-      for (int i = 0; i < split; i++) {
-        int e = rawODataPath.indexOf("/", 1);
-        if (-1 == e) {
-          rawODataPath = "";
-        } else {
-          rawODataPath = rawODataPath.substring(e);
-        }
-      }
-      int end = rawServiceResolutionUri.length() - rawODataPath.length();
-      rawServiceResolutionUri = rawServiceResolutionUri.substring(0, end);
-    } else {
-      rawServiceResolutionUri = null;
-    }
-
-    String rawBaseUri = rawRequestUri.substring(0, rawRequestUri.length() - rawODataPath.length());
-
-    odRequest.setRawQueryPath(httpRequest.getQueryString());
-    odRequest.setRawRequestUri(rawRequestUri
-        + (httpRequest.getQueryString() == null ? "" : "?" + httpRequest.getQueryString()));
-    odRequest.setRawODataPath(rawODataPath);
-    odRequest.setRawBaseUri(rawBaseUri);
-    odRequest.setRawServiceResolutionUri(rawServiceResolutionUri);
-  }
-
-  static void extractHeaders(final ODataRequest odRequest, final HttpServletRequest req) {
-    for (Enumeration<?> headerNames = req.getHeaderNames(); headerNames.hasMoreElements();) {
-      String headerName = (String) headerNames.nextElement();
-      List<String> headerValues = new ArrayList<String>();
-      for (Enumeration<?> headers = req.getHeaders(headerName); headers.hasMoreElements();) {
-        String value = (String) headers.nextElement();
-        headerValues.add(value);
-      }
-      odRequest.addHeader(headerName, headerValues);
-    }
-  }
-
-  @Override
-  public void register(final Processor processor) {
-    handler.register(processor);
-  }
-
-  @Override
-  public void register(final CustomContentTypeSupport customContentTypeSupport) {
-    handler.register(customContentTypeSupport);
-  }
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f7a7b484/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataImpl.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataImpl.java
deleted file mode 100644
index 1551461..0000000
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/ODataImpl.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * 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.server.core;
-
-import java.util.List;
-
-import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
-import org.apache.olingo.commons.api.format.ODataFormat;
-import org.apache.olingo.server.api.OData;
-import org.apache.olingo.server.api.ODataHttpHandler;
-import org.apache.olingo.server.api.ServiceMetadata;
-import org.apache.olingo.server.api.deserializer.DeserializerException;
-import org.apache.olingo.server.api.deserializer.FixedFormatDeserializer;
-import org.apache.olingo.server.api.deserializer.ODataDeserializer;
-import org.apache.olingo.server.api.edm.provider.EdmProvider;
-import org.apache.olingo.server.api.edmx.EdmxReference;
-import org.apache.olingo.server.api.serializer.FixedFormatSerializer;
-import org.apache.olingo.server.api.serializer.ODataSerializer;
-import org.apache.olingo.server.api.serializer.SerializerException;
-import org.apache.olingo.server.api.uri.UriHelper;
-import org.apache.olingo.server.core.deserializer.FixedFormatDeserializerImpl;
-import org.apache.olingo.server.core.deserializer.json.ODataJsonDeserializer;
-import org.apache.olingo.server.core.serializer.FixedFormatSerializerImpl;
-import org.apache.olingo.server.core.serializer.json.ODataJsonSerializer;
-import org.apache.olingo.server.core.serializer.xml.ODataXmlSerializerImpl;
-import org.apache.olingo.server.core.uri.UriHelperImpl;
-
-public class ODataImpl extends OData {
-
-  @Override
-  public ODataSerializer createSerializer(final ODataFormat format) throws SerializerException {
-    ODataSerializer serializer;
-    switch (format) {
-    case JSON:
-    case JSON_NO_METADATA:
-    case JSON_FULL_METADATA:
-      serializer = new ODataJsonSerializer(format);
-      break;
-    case XML:
-      serializer = new ODataXmlSerializerImpl();
-      break;
-    default:
-      throw new SerializerException("Unsupported format: " + format,
-          SerializerException.MessageKeys.UNSUPPORTED_FORMAT, format.toString());
-    }
-
-    return serializer;
-  }
-
-  @Override
-  public FixedFormatSerializer createFixedFormatSerializer() {
-    return new FixedFormatSerializerImpl();
-  }
-
-  @Override
-  public ODataHttpHandler createHandler(final ServiceMetadata edm) {
-    return new ODataHttpHandlerImpl(this, edm);
-  }
-
-  @Override
-  public ServiceMetadata createServiceMetadata(EdmProvider edmProvider, List<EdmxReference> references) {
-    return new ServiceMetadataImpl(ODataServiceVersion.V40, edmProvider, references);
-  }
-
-  @Override
-  public FixedFormatDeserializer createFixedFormatDeserializer() {
-    return new FixedFormatDeserializerImpl();
-  }
-
-  @Override
-  public UriHelper createUriHelper() {
-    return new UriHelperImpl();
-  }
-
-  @Override
-  public ODataDeserializer createDeserializer(ODataFormat format) throws DeserializerException{
-    ODataDeserializer serializer;
-    switch (format) {
-    case JSON:
-    case JSON_NO_METADATA:
-    case JSON_FULL_METADATA:
-      serializer = new ODataJsonDeserializer();
-      break;
-    case XML:
-      //We do not support xml deserialization right now so this mus lead to an error
-    default:
-      throw new DeserializerException("Unsupported format: " + format,
-          SerializerException.MessageKeys.UNSUPPORTED_FORMAT, format.toString());
-    }
-
-    return serializer;
-  }
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f7a7b484/lib/server-core/src/main/java/org/apache/olingo/server/core/RedirectProcessor.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/RedirectProcessor.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/RedirectProcessor.java
deleted file mode 100644
index 4e99d31..0000000
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/RedirectProcessor.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * 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.server.core;
-
-import org.apache.olingo.server.api.ODataRequest;
-import org.apache.olingo.server.api.ODataResponse;
-import org.apache.olingo.server.api.processor.Processor;
-
-public interface RedirectProcessor extends Processor {
-
-  void redirect(ODataRequest request, ODataResponse response);
-
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f7a7b484/lib/server-core/src/main/java/org/apache/olingo/server/core/ServiceMetadataImpl.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/ServiceMetadataImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/ServiceMetadataImpl.java
deleted file mode 100644
index 5008092..0000000
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/ServiceMetadataImpl.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * 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.server.core;
-
-import org.apache.olingo.commons.api.edm.Edm;
-import org.apache.olingo.commons.api.edm.constants.ODataServiceVersion;
-import org.apache.olingo.server.api.edmx.EdmxReference;
-import org.apache.olingo.server.api.ServiceMetadata;
-import org.apache.olingo.server.api.edm.provider.EdmProvider;
-import org.apache.olingo.server.core.edm.provider.EdmProviderImpl;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
-
-/**
- */
-public class ServiceMetadataImpl implements ServiceMetadata {
-
-  private final EdmProviderImpl edm;
-  private final ODataServiceVersion version;
-  private final List<EdmxReference> references = new ArrayList<EdmxReference>();
-
-  public ServiceMetadataImpl(ODataServiceVersion version, EdmProvider edmProvider, List<EdmxReference> references) {
-    this.edm = new EdmProviderImpl(edmProvider);
-    this.version = version;
-    this.references.addAll(references);
-  }
-
-  @Override
-  public Edm getEdm() {
-    return edm;
-  }
-
-  @Override
-  public ODataServiceVersion getDataServiceVersion() {
-    return version;
-  }
-
-  @Override
-  public List<EdmxReference> getReferences() {
-    return Collections.unmodifiableList(references);
-  }
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f7a7b484/lib/server-core/src/main/java/org/apache/olingo/server/core/batchhandler/BatchFascadeImpl.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/batchhandler/BatchFascadeImpl.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/batchhandler/BatchFascadeImpl.java
deleted file mode 100644
index 6b2ee39..0000000
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/batchhandler/BatchFascadeImpl.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * 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.server.core.batchhandler;
-
-import org.apache.olingo.server.api.ODataRequest;
-import org.apache.olingo.server.api.ODataResponse;
-import org.apache.olingo.server.api.batch.BatchFacade;
-import org.apache.olingo.server.api.batch.exception.BatchDeserializerException;
-import org.apache.olingo.server.api.deserializer.batch.BatchRequestPart;
-import org.apache.olingo.server.api.deserializer.batch.ODataResponsePart;
-import org.apache.olingo.server.api.processor.BatchProcessor;
-import org.apache.olingo.server.core.ODataHandler;
-import org.apache.olingo.server.core.deserializer.batch.BatchParserCommon;
-
-public class BatchFascadeImpl implements BatchFacade {
-  private final BatchPartHandler partHandler;
-
-  public BatchFascadeImpl(ODataHandler oDataHandler, ODataRequest request, BatchProcessor batchProcessor,
-      final boolean isStrict) {
-    partHandler = new BatchPartHandler(oDataHandler, batchProcessor, this);
-  }
-
-  @Override
-  public ODataResponse handleODataRequest(ODataRequest request) throws BatchDeserializerException {
-    return partHandler.handleODataRequest(request);
-  }
-
-  @Override
-  public ODataResponsePart handleBatchRequest(BatchRequestPart request) throws BatchDeserializerException {
-    return partHandler.handleBatchRequest(request);
-  }
-
-  @Override
-  public String extractBoundaryFromContentType(String contentType) throws BatchDeserializerException {
-    return BatchParserCommon.getBoundary(contentType, 0);
-  }
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f7a7b484/lib/server-core/src/main/java/org/apache/olingo/server/core/batchhandler/BatchHandler.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/batchhandler/BatchHandler.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/batchhandler/BatchHandler.java
deleted file mode 100644
index e8fe1db..0000000
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/batchhandler/BatchHandler.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * 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.server.core.batchhandler;
-
-import org.apache.olingo.commons.api.http.HttpHeader;
-import org.apache.olingo.commons.api.http.HttpMethod;
-import org.apache.olingo.server.api.ODataRequest;
-import org.apache.olingo.server.api.ODataResponse;
-import org.apache.olingo.server.api.batch.BatchFacade;
-import org.apache.olingo.server.api.batch.exception.BatchDeserializerException;
-import org.apache.olingo.server.api.batch.exception.BatchDeserializerException.MessageKeys;
-import org.apache.olingo.server.api.deserializer.DeserializerException;
-import org.apache.olingo.server.api.processor.BatchProcessor;
-import org.apache.olingo.server.api.serializer.SerializerException;
-import org.apache.olingo.server.core.ODataHandler;
-import org.apache.olingo.server.core.deserializer.batch.BatchParserCommon;
-
-public class BatchHandler {
-  private final BatchProcessor batchProcessor;
-  private final ODataHandler oDataHandler;
-  
-  public BatchHandler(final ODataHandler oDataHandler, final BatchProcessor batchProcessor) {
-
-    this.batchProcessor = batchProcessor;
-    this.oDataHandler = oDataHandler;
-  }
-
-  public void process(final ODataRequest request, final ODataResponse response, final boolean isStrict)
-      throws DeserializerException, SerializerException {
-    validateRequest(request);
-    
-    final BatchFacade operation = new BatchFascadeImpl(oDataHandler, request, batchProcessor, isStrict);
-    batchProcessor.processBatch(operation, request, response);
-  }
-
-  private void validateRequest(final ODataRequest request) throws BatchDeserializerException {
-    validateHttpMethod(request);
-    validateContentType(request);
-  }
-
-  private void validateContentType(final ODataRequest request) throws BatchDeserializerException {
-    final String contentType = request.getHeader(HttpHeader.CONTENT_TYPE);
-
-    if (contentType == null || !BatchParserCommon.PATTERN_MULTIPART_BOUNDARY.matcher(contentType).matches()) {
-      throw new BatchDeserializerException("Invalid content type", MessageKeys.INVALID_CONTENT_TYPE, 0);
-    }
-  }
-
-  private void validateHttpMethod(final ODataRequest request) throws BatchDeserializerException {
-    if (request.getMethod() != HttpMethod.POST) {
-      throw new BatchDeserializerException("Invalid HTTP method", MessageKeys.INVALID_METHOD, 0);
-    }
-  }
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f7a7b484/lib/server-core/src/main/java/org/apache/olingo/server/core/batchhandler/BatchPartHandler.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/batchhandler/BatchPartHandler.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/batchhandler/BatchPartHandler.java
deleted file mode 100644
index b140b0b..0000000
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/batchhandler/BatchPartHandler.java
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * 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.server.core.batchhandler;
-
-import org.apache.olingo.server.api.ODataRequest;
-import org.apache.olingo.server.api.ODataResponse;
-import org.apache.olingo.server.api.batch.BatchFacade;
-import org.apache.olingo.server.api.batch.exception.BatchDeserializerException;
-import org.apache.olingo.server.api.deserializer.batch.BatchRequestPart;
-import org.apache.olingo.server.api.deserializer.batch.ODataResponsePart;
-import org.apache.olingo.server.api.processor.BatchProcessor;
-import org.apache.olingo.server.core.ODataHandler;
-import org.apache.olingo.server.core.batchhandler.referenceRewriting.BatchReferenceRewriter;
-import org.apache.olingo.server.core.deserializer.batch.BatchParserCommon;
-
-public class BatchPartHandler {
-  private final ODataHandler oDataHandler;
-  private final BatchProcessor batchProcessor;
-  private final BatchFacade batchFascade;
-  private final BatchReferenceRewriter rewriter;
-
-  public BatchPartHandler(final ODataHandler oDataHandler, final BatchProcessor processor,
-      final BatchFacade batchFascade) {
-    this.oDataHandler = oDataHandler;
-    this.batchProcessor = processor;
-    this.batchFascade = batchFascade;
-    this.rewriter = new BatchReferenceRewriter();
-  }
-
-  public ODataResponse handleODataRequest(ODataRequest request) throws BatchDeserializerException {
-    return handle(request, true);
-  }
-
-  public ODataResponsePart handleBatchRequest(BatchRequestPart request) throws BatchDeserializerException {
-    if (request.isChangeSet()) {
-      return handleChangeSet(request);
-    } else {
-      final ODataResponse response = handle(request.getRequests().get(0), false);
-
-      return new ODataResponsePart(response, false);
-    }
-  }
-
-  public ODataResponse handle(ODataRequest request, boolean isChangeSet)
-      throws BatchDeserializerException {
-    final ODataResponse response;
-
-    if (isChangeSet) {
-      rewriter.replaceReference(request);
-
-      response = oDataHandler.process(request);
-
-      rewriter.addMapping(request, response);
-    } else {
-      response = oDataHandler.process(request);
-    }
-
-    // Add content id to response
-    final String contentId = request.getHeader(BatchParserCommon.HTTP_CONTENT_ID);
-    if (contentId != null) {
-      response.setHeader(BatchParserCommon.HTTP_CONTENT_ID, contentId);
-    }
-
-    return response;
-  }
-
-  private ODataResponsePart handleChangeSet(BatchRequestPart request) throws BatchDeserializerException {
-    return batchProcessor.processChangeSet(batchFascade, request.getRequests());
-  }
-
-}

http://git-wip-us.apache.org/repos/asf/olingo-odata4/blob/f7a7b484/lib/server-core/src/main/java/org/apache/olingo/server/core/batchhandler/referenceRewriting/BatchReferenceRewriter.java
----------------------------------------------------------------------
diff --git a/lib/server-core/src/main/java/org/apache/olingo/server/core/batchhandler/referenceRewriting/BatchReferenceRewriter.java b/lib/server-core/src/main/java/org/apache/olingo/server/core/batchhandler/referenceRewriting/BatchReferenceRewriter.java
deleted file mode 100644
index 772fd9d..0000000
--- a/lib/server-core/src/main/java/org/apache/olingo/server/core/batchhandler/referenceRewriting/BatchReferenceRewriter.java
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * 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.server.core.batchhandler.referenceRewriting;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.apache.olingo.commons.api.ODataRuntimeException;
-import org.apache.olingo.commons.api.http.HttpHeader;
-import org.apache.olingo.commons.api.http.HttpMethod;
-import org.apache.olingo.server.api.ODataRequest;
-import org.apache.olingo.server.api.ODataResponse;
-import org.apache.olingo.server.api.batch.exception.BatchDeserializerException;
-import org.apache.olingo.server.api.batch.exception.BatchDeserializerException.MessageKeys;
-import org.apache.olingo.server.core.deserializer.batch.BatchParserCommon;
-
-public class BatchReferenceRewriter {
-  private static final String REG_EX_REFERENCE = "\\$(.*)(/.*)?";
-  private static final Pattern REFERENCE_PATTERN = Pattern.compile(REG_EX_REFERENCE);
-
-  private Map<String, String> contentIdMapping = new HashMap<String, String>();
-
-  public String getReferenceInURI(ODataRequest request) {
-    Matcher matcher = REFERENCE_PATTERN.matcher(removeSlash(removeSlash(request.getRawODataPath(), true), false));
-
-    return (matcher.matches()) ? matcher.group(1) : null;
-  }
-
-  public void replaceReference(ODataRequest request) {
-    final String reference = getReferenceInURI(request);
-
-    if (reference != null) {
-      final String replacement = contentIdMapping.get(reference);
-
-      if (replacement != null) {
-        replaceContentIdReference(request, reference, replacement);
-      } else {
-        throw new ODataRuntimeException("Required Content-Id for reference \"" + reference + "\" not found.");
-      }
-    }
-  }
-
-  private void replaceContentIdReference(ODataRequest request, String contentId, String resourceUri) {
-    final String newUri = request.getRawODataPath().replace("/$" + contentId, resourceUri);
-    request.setRawODataPath(newUri);
-    request.setRawRequestUri(request.getRawBaseUri() + "/" + newUri);
-  }
-
-  public void addMapping(ODataRequest request, ODataResponse response)
-      throws BatchDeserializerException {
-    final String resourceUri = getODataPath(request, response);
-    final String contentId = request.getHeader(BatchParserCommon.HTTP_CONTENT_ID);
-
-    contentIdMapping.put(contentId, resourceUri);
-  }
-
-  private String getODataPath(ODataRequest request, ODataResponse response) throws BatchDeserializerException {
-    String resourceUri = null;
-
-    if (request.getMethod() == HttpMethod.POST) {
-      // Create entity
-      // The URI of the new resource will be generated by the server and published in the location header
-      resourceUri = parseODataPath(response.getHeaders().get(HttpHeader.LOCATION), request.getRawBaseUri());
-    } else {
-      // Update, Upsert (PUT, PATCH, Delete)
-      // These methods still addresses a given resource, so we use the URI given by the request
-      resourceUri = request.getRawODataPath();
-    }
-
-    return resourceUri;
-  }
-
-  private String parseODataPath(String uri, String rawBaseUri) throws BatchDeserializerException {
-    int index = uri.indexOf(rawBaseUri);
-    
-    if(index == 0) {
-      return uri.substring(rawBaseUri.length());
-    } else {
-      throw new BatchDeserializerException("Invalid base uri or uri", MessageKeys.INVALID_URI, 0);
-    }
-  }
-
-  private String removeSlash(String rawODataPath, boolean first) {
-    final int indexOfSlash = rawODataPath.indexOf("/");
-    if (first) {
-      return (indexOfSlash == 0) ? rawODataPath.substring(1) : rawODataPath;
-    } else {
-      return (indexOfSlash != -1) ? rawODataPath.substring(0, indexOfSlash) : rawODataPath;
-    }
-  }
-}