/** * There are situations that the downstream service returns an error status response and we just * want to bubble up to the caller and eventually to the original caller. * * @param exchange HttpServerExchange * @param status error status */ default void setExchangeStatus(HttpServerExchange exchange, Status status) { exchange.setStatusCode(status.getStatusCode()); exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "application/json"); status.setDescription(status.getDescription().replaceAll("\\\\", "\\\\\\\\")); exchange.getResponseSender().send(status.toString()); StackTraceElement[] elements = Thread.currentThread().getStackTrace(); logger.error(status.toString() + " at " + elements[2].getClassName() + "." + elements[2].getMethodName() + "(" + elements[2].getFileName() + ":" + elements[2].getLineNumber() + ")"); } }
/** * This method is used to construct a standard error status in JSON format from an error code. * * @param exchange HttpServerExchange * @param code error code * @param args arguments for error description */ default void setExchangeStatus(HttpServerExchange exchange, String code, final Object... args) { Status status = new Status(code, args); if(status.getStatusCode() == 0) { // There is no entry in status.yml for this particular error code. status = new Status(ERROR_NOT_DEFINED, code); } exchange.setStatusCode(status.getStatusCode()); exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "application/json"); status.setDescription(status.getDescription().replaceAll("\\\\", "\\\\\\\\")); exchange.getResponseSender().send(status.toString()); StackTraceElement[] elements = Thread.currentThread().getStackTrace(); logger.error(status.toString() + " at " + elements[2].getClassName() + "." + elements[2].getMethodName() + "(" + elements[2].getFileName() + ":" + elements[2].getLineNumber() + ")"); }
/** * There are situations that the downstream service returns an error status response and we just * want to bubble up to the caller and eventually to the original caller. * * @param exchange HttpServerExchange * @param status error status */ default void setExchangeStatus(HttpServerExchange exchange, Status status) { exchange.setStatusCode(status.getStatusCode()); exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "application/json"); status.setDescription(status.getDescription().replaceAll("\\\\", "\\\\\\\\")); exchange.getResponseSender().send(status.toString()); StackTraceElement[] elements = Thread.currentThread().getStackTrace(); logger.error(status.toString() + " at " + elements[2].getClassName() + "." + elements[2].getMethodName() + "(" + elements[2].getFileName() + ":" + elements[2].getLineNumber() + ")"); } }
/** * This method is used to construct a standard error status in JSON format from an error code. * * @param exchange HttpServerExchange * @param code error code * @param args arguments for error description */ default void setExchangeStatus(HttpServerExchange exchange, String code, final Object... args) { Status status = new Status(code, args); if(status.getStatusCode() == 0) { // There is no entry in status.yml for this particular error code. status = new Status(ERROR_NOT_DEFINED, code); } exchange.setStatusCode(status.getStatusCode()); exchange.getResponseHeaders().put(Headers.CONTENT_TYPE, "application/json"); status.setDescription(status.getDescription().replaceAll("\\\\", "\\\\\\\\")); exchange.getResponseSender().send(status.toString()); StackTraceElement[] elements = Thread.currentThread().getStackTrace(); logger.error(status.toString() + " at " + elements[2].getClassName() + "." + elements[2].getMethodName() + "(" + elements[2].getFileName() + ":" + elements[2].getLineNumber() + ")"); }
@Override public void handleRequest(final HttpServerExchange exchange) throws Exception { final NormalisedPath requestPath = new ApiNormalisedPath(exchange.getRequestURI()); SwaggerOperation swaggerOperation = null; Map<String, Object> auditInfo = exchange.getAttachment(AuditHandler.AUDIT_INFO); if(auditInfo != null) { swaggerOperation = (SwaggerOperation)auditInfo.get(Constants.SWAGGER_OPERATION_STRING); } if(swaggerOperation == null) { setExchangeStatus(exchange, STATUS_MISSING_SWAGGER_OPERATION); return; } Status status = requestValidator.validateRequest(requestPath, exchange, swaggerOperation); if(status != null) { exchange.setStatusCode(status.getStatusCode()); status.setDescription(status.getDescription().replaceAll("\\\\", "\\\\\\\\")); exchange.getResponseSender().send(status.toString()); if(config.isLogError()) logger.error("ValidationError:" + status.toString()); return; } Handler.next(exchange, next); }
@Override public void handleRequest(final HttpServerExchange exchange) throws Exception { final NormalisedPath requestPath = new ApiNormalisedPath(exchange.getRequestURI()); OpenApiOperation openApiOperation = null; Map<String, Object> auditInfo = exchange.getAttachment(AuditHandler.AUDIT_INFO); if(auditInfo != null) { openApiOperation = (OpenApiOperation)auditInfo.get(Constants.OPENAPI_OPERATION_STRING); } if(openApiOperation == null) { setExchangeStatus(exchange, STATUS_MISSING_OPENAPI_OPERATION); return; } Status status = requestValidator.validateRequest(requestPath, exchange, openApiOperation); if(status != null) { exchange.setStatusCode(status.getStatusCode()); status.setDescription(status.getDescription().replaceAll("\\\\", "\\\\\\\\")); exchange.getResponseSender().send(status.toString()); if(config.logError) logger.error("ValidationError:" + status.toString()); return; } Handler.next(exchange, next); }