public void handleException( final ODataRequest request, final ODataResponse response, final ODataServerError serverError, final Exception exception) { lastThrownException = exception; 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, getCustomContentTypeSupport(), RepresentationType.ERROR); } catch (final ContentNegotiatorException e) { requestedContentType = ContentType.JSON; } final int measurementHandle = debugger.startRuntimeMeasurement("ErrorProcessor", "processError"); exceptionProcessor.processError(request, response, serverError, requestedContentType); debugger.stopRuntimeMeasurement(measurementHandle); }
public ODataResponse process(final ODataRequest request) { ODataResponse response = new ODataResponse(); final int responseHandle = debugger.startRuntimeMeasurement("ODataHandler", "process"); try { processInternal(request, response); } catch (final UriValidationException e) { ODataServerError serverError = ODataExceptionHelper.createServerErrorObject(e, null); handleException(request, response, serverError, e); } catch (final UriParserSemanticException e) { ODataServerError serverError = ODataExceptionHelper.createServerErrorObject(e, null); handleException(request, response, serverError, e); } catch (final UriParserSyntaxException e) { ODataServerError serverError = ODataExceptionHelper.createServerErrorObject(e, null); handleException(request, response, serverError, e); } catch (final UriParserException e) { ODataServerError serverError = ODataExceptionHelper.createServerErrorObject(e, null); handleException(request, response, serverError, e); } catch (ContentNegotiatorException e) { ODataServerError serverError = ODataExceptionHelper.createServerErrorObject(e, null); handleException(request, response, serverError, e); } catch (SerializerException e) { ODataServerError serverError = ODataExceptionHelper.createServerErrorObject(e, null); handleException(request, response, serverError, e); } catch (DeserializerException e) { ODataServerError serverError = ODataExceptionHelper.createServerErrorObject(e, null); handleException(request, response, serverError, e); } catch (PreconditionException e) { ODataServerError serverError = ODataExceptionHelper.createServerErrorObject(e, null); handleException(request, response, serverError, e); } catch (ODataHandlerException e) { ODataServerError serverError = ODataExceptionHelper.createServerErrorObject(e, null); handleException(request, response, serverError, e); } catch (ODataApplicationException e) { ODataServerError serverError = ODataExceptionHelper.createServerErrorObject(e); handleException(request, response, serverError, e); } catch (Exception e) { ODataServerError serverError = ODataExceptionHelper.createServerErrorObject(e); handleException(request, response, serverError, e); } debugger.stopRuntimeMeasurement(responseHandle); return response; }
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); } }