/** * Builds error response from exception without group by. * * @param status the response status * @param cause exception * @param writer The Writer to use for writing errors * * @return Response */ public static javax.ws.rs.core.Response makeErrorResponse( StatusType status, Throwable cause, ObjectWriter writer ) { return makeErrorResponse(status, null, cause, writer); }
/** * Builds error response from exception. * * @param status the response status * @param druidQuery failed Druid Query if available or null * @param cause exception * @param writer The Writer to use for writing errors * * @return Response */ public static Response makeErrorResponse( StatusType status, DruidQuery<?> druidQuery, Throwable cause, ObjectWriter writer ) { String reason = null; String description = null; // do not return JAX-RS processing exception, only the cause if (cause instanceof ProcessingException && cause.getCause() != null) { cause = cause.getCause(); } if (cause != null) { reason = cause.getClass().getName(); description = String.valueOf(cause.getMessage()); } return makeErrorResponse(status.getStatusCode(), reason, description, druidQuery, writer); }
/** * Prepare Response object from error details with reason and description. * * @param statusCode Error status code * @param reason Brief reason about the error * @param description Description of the error * @param druidQuery Druid query associated with the an error * * @return Publishable Response object */ public javax.ws.rs.core.Response buildErrorResponse( int statusCode, String reason, String description, DruidQuery<?> druidQuery ) { return RequestHandlerUtils.makeErrorResponse( statusCode, reason, description, druidQuery, objectMappers.getMapper().writer() ); }
@Override public void handleThrowable( Throwable e, AsyncResponse asyncResponse, Optional<DataApiRequest> apiRequest, ContainerRequestContext containerRequestContext, ObjectWriter writer ) { if (e instanceof RequestValidationException) { LOG.debug(e.getMessage(), e); RequestValidationException rve = (RequestValidationException) e; asyncResponse.resume(RequestHandlerUtils.makeErrorResponse(rve.getStatus(), rve, writer)); } else if (e instanceof NoMatchFoundException) { LOG.info("Exception processing request", e); asyncResponse.resume(RequestHandlerUtils.makeErrorResponse(INTERNAL_SERVER_ERROR, e, writer)); } else if (e instanceof TimeoutException) { LOG.info("Exception processing request", e); asyncResponse.resume(RequestHandlerUtils.makeErrorResponse(GATEWAY_TIMEOUT, e, writer)); } else { LOG.info("Exception processing request", e); asyncResponse.resume(RequestHandlerUtils.makeErrorResponse(BAD_REQUEST, e, writer)); } } }
@Override public Response handleThrowable( Throwable e, Optional<? extends ApiRequest> request, ContainerRequestContext requestContext ) { if (e instanceof RequestValidationException) { LOG.debug(e.getMessage(), e); RequestValidationException rve = (RequestValidationException) e; return RequestHandlerUtils.makeErrorResponse(rve.getStatus(), rve, mappers.getMapper().writer()); } else { String msg = ErrorMessageFormat.REQUEST_PROCESSING_EXCEPTION.format(e.getMessage()); LOG.info(msg, e); return Response.status(INTERNAL_SERVER_ERROR).entity(e.getMessage()).build(); } } }
/** * Prepare Response object from error details with reason and description. * * @param responseException The error that needs to be transmitted to the user * * @return Publishable Response object */ private javax.ws.rs.core.Response buildErrorResponse(ResponseException responseException) { return RequestHandlerUtils.makeErrorResponse( responseException.getStatusCode(), responseException.getReason(), responseException.getDescription(), responseException.getDruidQuery(), writer ); } }
RequestHandlerUtils.makeErrorResponse( Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), e.getClass().getName(),