This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch camel-4.10.x in repository https://gitbox.apache.org/repos/asf/camel.git
commit 15995e4cf738243255200061a0324dad6bf92697 Author: Claus Ibsen <claus.ib...@gmail.com> AuthorDate: Tue Jun 3 13:48:10 2025 +0200 CAMEL-22116: Fix camel-openapi-validator to better support base-path such as SB war apps that are seperated by context-path --- components/camel-openapi-validator/pom.xml | 4 +++ .../client/OpenApiRestClientRequestValidator.java | 29 +++++++++++++++++----- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/components/camel-openapi-validator/pom.xml b/components/camel-openapi-validator/pom.xml index 02eedc2c9e6..e7e4b405ea5 100644 --- a/components/camel-openapi-validator/pom.xml +++ b/components/camel-openapi-validator/pom.xml @@ -42,6 +42,10 @@ <groupId>org.apache.camel</groupId> <artifactId>camel-rest-openapi</artifactId> </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-http-base</artifactId> + </dependency> <dependency> <groupId>com.atlassian.oai</groupId> diff --git a/components/camel-openapi-validator/src/main/java/org/apache/camel/component/rest/openapi/validator/client/OpenApiRestClientRequestValidator.java b/components/camel-openapi-validator/src/main/java/org/apache/camel/component/rest/openapi/validator/client/OpenApiRestClientRequestValidator.java index e0dcb1d4bf8..9a97f9838cc 100644 --- a/components/camel-openapi-validator/src/main/java/org/apache/camel/component/rest/openapi/validator/client/OpenApiRestClientRequestValidator.java +++ b/components/camel-openapi-validator/src/main/java/org/apache/camel/component/rest/openapi/validator/client/OpenApiRestClientRequestValidator.java @@ -24,6 +24,7 @@ import com.atlassian.oai.validator.report.ValidationReport; import io.swagger.v3.oas.models.OpenAPI; import org.apache.camel.Exchange; import org.apache.camel.component.rest.openapi.RestOpenApiHelper; +import org.apache.camel.http.base.HttpHeaderFilterStrategy; import org.apache.camel.spi.RestClientRequestValidator; import org.apache.camel.spi.annotations.JdkService; import org.apache.camel.support.ExchangeHelper; @@ -32,6 +33,18 @@ import org.apache.camel.support.MessageHelper; @JdkService(RestClientRequestValidator.FACTORY) public class OpenApiRestClientRequestValidator implements RestClientRequestValidator { + private final HttpHeaderFilterStrategy filter = new HttpHeaderFilterStrategy(); + + public OpenApiRestClientRequestValidator() { + // add extra additional HTTP request headers to skip + filter.getOutFilter().add("accept"); + filter.getOutFilter().add("authorization"); + filter.getOutFilter().add("content-encoding"); + filter.getOutFilter().add("cookie"); + filter.getOutFilter().add("origin"); + filter.getOutFilter().add("user-agent"); + } + @Override public ValidationError validate(Exchange exchange, ValidationContext validationContent) { OpenAPI openAPI = exchange.getProperty(Exchange.REST_OPENAPI, OpenAPI.class); @@ -62,11 +75,14 @@ public class OpenApiRestClientRequestValidator implements RestClientRequestValid if (body != null) { builder.withBody(body); } - // Use all non-Camel headers - for (String header : exchange.getMessage().getHeaders().keySet()) { - // TODO: should skip standard HTTP headers like: Host, User-Agent - if (!startsWithIgnoreCase(header, "Camel")) { - builder.withHeader(header, exchange.getMessage().getHeader(header, String.class)); + // Use all non-Camel/non-HTTP headers + for (var header : exchange.getMessage().getHeaders().entrySet()) { + String key = header.getKey(); + Object value = header.getValue(); + boolean customHeader + = !startsWithIgnoreCase(key, "Camel") && !filter.applyFilterToCamelHeaders(key, value, exchange); + if (customHeader) { + builder.withHeader(key, exchange.getMessage().getHeader(key, String.class)); } } // Use query parameters, if present @@ -94,10 +110,11 @@ public class OpenApiRestClientRequestValidator implements RestClientRequestValid } return new ValidationError(400, msg); } + return null; } - boolean startsWithIgnoreCase(String s, String prefix) { + private static boolean startsWithIgnoreCase(String s, String prefix) { return s.regionMatches(true, 0, prefix, 0, prefix.length()); } }