use of com.atlassian.oai.validator.report.ValidationReport in project easy-tests by malinink.
the class SwaggerValidationInterceptor method preHandle.
/**
* Validates the given requests. If a request is defined but invalid against the Swagger schema
* an {@link InvalidRequestException} will be thrown leading to an error response.
* <p>
* Only {@link ResettableRequestServletWrapper} can be validated. Wrapping is done within the
* {@link SwaggerValidationFilter}.
*
* @param servletRequest the {@link HttpServletRequest} to validate
* @param servletResponse the servlet response
* @param handler a handler
* @return {@code true} if the request is valid against or not defined in the Swagger schema or
* the servlet is not a {@link ResettableRequestServletWrapper}
* @throws Exception if the request is invalid against the Swagger schema or the requests body
* can't be read
*/
@Override
public boolean preHandle(final HttpServletRequest servletRequest, final HttpServletResponse servletResponse, final Object handler) throws Exception {
// only wrapped servlet requests can be validated - see: SwaggerValidationFilter
if (!(servletRequest instanceof ResettableRequestServletWrapper)) {
return true;
}
// validate the request
final ResettableRequestServletWrapper resettableRequest = (ResettableRequestServletWrapper) servletRequest;
final String requestLoggingKey = servletRequest.getMethod() + "#" + servletRequest.getRequestURI();
LOG.debug("Swagger request validation: {}", requestLoggingKey);
final Request request = swaggerRequestValidationService.buildRequest(resettableRequest);
final ValidationReport validationReport = swaggerRequestValidationService.validateRequest(request);
if (!validationReport.hasErrors()) {
LOG.debug("Swagger validation: {} - The request is valid.", requestLoggingKey);
} else if (!swaggerRequestValidationService.isDefinedSwaggerRequest(validationReport)) {
LOG.info("Swagger validation: {} - The request is not defined in the Swagger schema. Ignoring it.", requestLoggingKey);
} else {
final InvalidRequestException invalidRequestException = new InvalidRequestException(validationReport);
LOG.info("Swagger validation: {} - The REST request is invalid: {}", requestLoggingKey, invalidRequestException.getMessage());
throw invalidRequestException;
}
// reset the requests servlet input stream after reading it on former step
resettableRequest.resetInputStream();
return true;
}
use of com.atlassian.oai.validator.report.ValidationReport in project easy-tests by malinink.
the class SwaggerValidationInterceptor method postHandle.
@Override
public void postHandle(HttpServletRequest servletRequest, HttpServletResponse servletResponse, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
// only wrapped servlet requests can be validated - see: SwaggerValidationFilter
if (!(servletRequest instanceof ResettableRequestServletWrapper) || !(servletResponse instanceof ContentCachingResponseWrapper)) {
return;
}
// validate the request
final ResettableRequestServletWrapper resettableRequest = (ResettableRequestServletWrapper) servletRequest;
final ContentCachingResponseWrapper cachingResponse = (ContentCachingResponseWrapper) servletResponse;
final Request request = swaggerRequestValidationService.buildRequest(resettableRequest);
final Response response = swaggerRequestValidationService.buildResponse(cachingResponse);
final String requestLoggingKey = servletRequest.getMethod() + "#" + servletRequest.getRequestURI() + "#" + response.getStatus();
LOG.info("Swagger response validation: {}", requestLoggingKey);
final ValidationReport validationReport = swaggerRequestValidationService.validateResponse(request.getPath(), request.getMethod(), response);
if (!validationReport.hasErrors()) {
LOG.debug("Swagger validation: {} - The response is valid.", requestLoggingKey);
} else if (!swaggerRequestValidationService.isDefinedSwaggerRequest(validationReport)) {
LOG.info("Swagger validation: {} - The request/response is not defined in the Swagger schema. Ignoring it.", requestLoggingKey);
} else {
final InvalidResponseException invalidReponseException = new InvalidResponseException(validationReport);
LOG.warn("Swagger validation: {} - The REST response is invalid: {}", requestLoggingKey, invalidReponseException.getMessage());
throw invalidReponseException;
}
}
Aggregations