private void validateODataVersion(final ODataRequest request) throws ODataHandlerException { final String maxVersion = request.getHeader(HttpHeader.ODATA_MAX_VERSION); if (maxVersion != null && ODataServiceVersion.isBiggerThan(ODataServiceVersion.V40.toString(), maxVersion)) { throw new ODataHandlerException( "ODataVersion not supported: " + maxVersion, ODataHandlerException.MessageKeys.ODATA_VERSION_NOT_SUPPORTED, maxVersion); } }
private void processInternal(final ODataRequest request, final ODataResponse response) throws ODataApplicationException, ODataLibraryException { final int measurementHandle = debugger.startRuntimeMeasurement("ODataHandler", "processInternal"); response.setHeader(HttpHeader.ODATA_VERSION, ODataServiceVersion.V40.toString()); try { validateODataVersion(request); } catch (final ODataHandlerException e) { debugger.stopRuntimeMeasurement(measurementHandle); throw e; } final int measurementUriParser = debugger.startRuntimeMeasurement("UriParser", "parseUri"); try { uriInfo = new Parser() .parseUri( request.getRawODataPath(), request.getRawQueryPath(), null, serviceMetadata.getEdm()); } catch (final ODataLibraryException e) { debugger.stopRuntimeMeasurement(measurementUriParser); debugger.stopRuntimeMeasurement(measurementHandle); throw e; } debugger.stopRuntimeMeasurement(measurementUriParser); final int measurementUriValidator = debugger.startRuntimeMeasurement("UriValidator", "validate"); final HttpMethod method = request.getMethod(); try { new UriValidator().validate(uriInfo, method); } catch (final UriValidationException e) { debugger.stopRuntimeMeasurement(measurementUriValidator); debugger.stopRuntimeMeasurement(measurementHandle); throw e; } debugger.stopRuntimeMeasurement(measurementUriValidator); final int measurementDispatcher = debugger.startRuntimeMeasurement("ODataDispatcher", "dispatch"); try { new ODataDispatcher(uriInfo, this).dispatch(request, response); } finally { debugger.stopRuntimeMeasurement(measurementDispatcher); debugger.stopRuntimeMeasurement(measurementHandle); } }