@Nonnull private ValidationReport validatePathParameters(final ApiOperation apiOperation) { ValidationReport validationReport = empty(); final NormalisedPath requestPath = apiOperation.getRequestPath(); for (int i = 0; i < apiOperation.getApiPath().numberOfParts(); i++) { if (!apiOperation.getApiPath().hasParams(i)) { continue; } final ValidationReport pathPartValidation = apiOperation .getApiPath() .paramValues(i, requestPath.part(i)) .entrySet() .stream() .map(param -> validatePathParameter(apiOperation, param.getKey(), param.getValue())) .reduce(empty(), ValidationReport::merge); validationReport = validationReport.merge(pathPartValidation); } return validationReport; }
/** * Validate the request against the given API operation * * @param request The request to validate * @param apiOperation The operation to validate the request against * * @return A validation report containing validation errors */ @Nonnull public ValidationReport validateRequest(final Request request, final ApiOperation apiOperation) { requireNonNull(request, "A request is required"); requireNonNull(apiOperation, "An API operation is required"); final MessageContext context = MessageContext.create() .in(REQUEST) .withApiOperation(apiOperation) .withRequestPath(apiOperation.getRequestPath().original()) .withRequestMethod(request.getMethod()) .build(); return securityValidator.validateSecurity(request, apiOperation) .merge(validateContentType(request, apiOperation)) .merge(validateAccepts(request, apiOperation)) .merge(validateHeaders(request, apiOperation)) .merge(validatePathParameters(apiOperation)) .merge(requestBodyValidator.validateRequestBody(request, apiOperation.getOperation().getRequestBody())) .merge(validateQueryParameters(request, apiOperation)) .withAdditionalContext(context); }