This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/main by this push:
     new bd1ca331e03 rest-openapi - validator for producer (#13666)
bd1ca331e03 is described below

commit bd1ca331e03e9920b6b32a6a087ccd9fd9a2ef3b
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Sat Mar 30 12:42:52 2024 +0100

    rest-openapi - validator for producer (#13666)
    
    * CAMEL-20623: camel-rest-openapi - Use same client validation as in 
rest-dsl for producer. Avoid using Atlassian JAR which is not jakarta ee 
compatible and is causing pain and classloading issues.
---
 .../camel/catalog/components/rest-openapi.json     |  37 ++-
 components/camel-rest-openapi/pom.xml              |  24 --
 .../openapi/RestOpenApiComponentConfigurer.java    |   6 -
 .../openapi/RestOpenApiEndpointConfigurer.java     |  21 --
 .../openapi/RestOpenApiEndpointUriFactory.java     |   8 +-
 .../camel/component/rest/openapi/rest-openapi.json |  37 ++-
 .../src/main/docs/rest-openapi-component.adoc      |  66 +-----
 .../DefaultRestOpenapiProcessorStrategy.java       |   9 +-
 .../rest/openapi/RestOpenApiComponent.java         |  16 --
 .../rest/openapi/RestOpenApiEndpoint.java          |  61 +----
 .../rest/openapi/RestOpenApiProcessor.java         |   5 +-
 .../openapi/validator/DefaultRequestValidator.java | 143 ++++++++++++
 .../validator/RequestValidationCustomizer.java     |  51 -----
 .../rest/openapi/validator/RequestValidator.java   | 163 +++-----------
 .../openapi/validator/RestOpenApiOperation.java    |   2 +-
 ...idationCustomizer.java => RestOpenApiPath.java} |  39 +++-
 .../RestOpenApiCustomValidatorCustomizerTest.java  | 135 -----------
 .../openapi/RestOpenApiRequestValidationTest.java  |  72 +-----
 .../ROOT/pages/camel-4x-upgrade-guide-4_6.adoc     |   4 +
 .../dsl/RestOpenapiComponentBuilderFactory.java    |  19 --
 .../dsl/RestOpenApiEndpointBuilderFactory.java     | 247 ---------------------
 .../camel/kotlin/components/RestOpenapiUriDsl.kt   |  18 --
 parent/pom.xml                                     |   1 -
 23 files changed, 267 insertions(+), 917 deletions(-)

diff --git 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/rest-openapi.json
 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/rest-openapi.json
index d5104b9f003..3179dafec36 100644
--- 
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/rest-openapi.json
+++ 
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/rest-openapi.json
@@ -25,23 +25,22 @@
   "componentProperties": {
     "basePath": { "index": 0, "kind": "property", "displayName": "Base Path", 
"group": "common", "label": "common", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "API basePath, for example \/v2. Default is 
unset, if set overrides the value present in OpenApi specification." },
     "specificationUri": { "index": 1, "kind": "property", "displayName": 
"Specification Uri", "group": "common", "label": "common", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "openapi.json", 
"description": "Path to the OpenApi specification file. The scheme, host base 
path are taken from this specification, but these can be overridden with 
properties on the component or endpoint level. If  [...]
-    "requestValidationCustomizer": { "index": 2, "kind": "property", 
"displayName": "Request Validation Customizer", "group": "common (advanced)", 
"label": "common,advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.component.rest.openapi.validator.RequestValidationCustomizer",
 "deprecated": false, "autowired": false, "secret": false, "description": "If 
request validation is enabled, this option provides the capability to customize 
the creation of OpenApiInterac [...]
-    "apiContextPath": { "index": 3, "kind": "property", "displayName": "Api 
Context Path", "group": "consumer", "label": "consumer", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "Sets the context-path to 
use for servicing the OpenAPI specification" },
-    "bridgeErrorHandler": { "index": 4, "kind": "property", "displayName": 
"Bridge Error Handler", "group": "consumer", "label": "consumer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Allows for bridging the consumer to the Camel routing Error Handler, which 
mean any exceptions (if possible) occurred while the Camel consumer is trying 
to pickup incoming messages, or the like [...]
-    "missingOperation": { "index": 5, "kind": "property", "displayName": 
"Missing Operation", "group": "consumer", "label": "consumer", "required": 
false, "type": "string", "javaType": "java.lang.String", "enum": [ "fail", 
"ignore", "mock" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "fail", "description": "Whether the consumer should fail,ignore 
or return a mock response for OpenAPI operations that are not mapped to a 
corresponding route." },
-    "consumerComponentName": { "index": 6, "kind": "property", "displayName": 
"Consumer Component Name", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Name of the Camel component that will service the requests. The 
component must be present in Camel registry and it must implement 
RestOpenApiConsumerFactory service provider interfac [...]
-    "mockIncludePattern": { "index": 7, "kind": "property", "displayName": 
"Mock Include Pattern", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "classpath:camel-mock\/**", "description": "Used for inclusive 
filtering of mock data from directories. The pattern is using Ant-path style 
pattern. Multiple patterns can be specified sepa [...]
-    "restOpenapiProcessorStrategy": { "index": 8, "kind": "property", 
"displayName": "Rest Openapi Processor Strategy", "group": "consumer 
(advanced)", "label": "consumer,advanced", "required": false, "type": "object", 
"javaType": 
"org.apache.camel.component.rest.openapi.RestOpenapiProcessorStrategy", 
"deprecated": false, "autowired": false, "secret": false, "description": "To 
use a custom strategy for how to process Rest DSL requests" },
-    "host": { "index": 9, "kind": "property", "displayName": "Host", "group": 
"producer", "label": "producer", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Scheme hostname and port to direct the HTTP 
requests to in the form of https:\/\/hostname:port. Can be configured at the 
endpoint, component or in the corresponding REST configuration in the Camel 
Context. If you give this component a nam [...]
-    "lazyStartProducer": { "index": 10, "kind": "property", "displayName": 
"Lazy Start Producer", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Whether the producer should be started lazy (on the first message). By 
starting lazy you can use this to allow CamelContext and routes to startup in 
situations where a producer may otherwise fai [...]
-    "requestValidationEnabled": { "index": 11, "kind": "property", 
"displayName": "Request Validation Enabled", "group": "producer", "label": 
"producer", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "Enable validation of requests against the configured 
OpenAPI specification" },
-    "componentName": { "index": 12, "kind": "property", "displayName": 
"Component Name", "group": "producer (advanced)", "label": "producer,advanced", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "description": "Name 
of the Camel component that will perform the requests. The component must be 
present in Camel registry and it must implement RestProducerFactory service 
provider interface. If not set CLASSPATH [...]
-    "consumes": { "index": 13, "kind": "property", "displayName": "Consumes", 
"group": "producer (advanced)", "label": "producer,advanced", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "What payload type this 
component capable of consuming. Could be one type, like application\/json or 
multiple types as application\/json, application\/xml; q=0.5 according to the 
RFC7231. This equates to the va [...]
-    "produces": { "index": 14, "kind": "property", "displayName": "Produces", 
"group": "producer (advanced)", "label": "producer,advanced", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "What payload type this 
component is producing. For example application\/json according to the RFC7231. 
This equates to the value of Content-Type HTTP header. If set overrides any 
value present in the OpenApi s [...]
-    "autowiredEnabled": { "index": 15, "kind": "property", "displayName": 
"Autowired Enabled", "group": "advanced", "label": "advanced", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Whether autowiring is enabled. This is used for automatic autowiring options 
(the option must be marked as autowired) by looking up in the registry to find 
if there is a single instance of matching  [...]
-    "clientRequestValidation": { "index": 16, "kind": "property", 
"displayName": "Client Request Validation", "group": "consumes", "label": 
"consumes", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "Whether to enable validation of the client request to 
check if the incoming request is valid according to the OpenAPI specification" 
},
-    "sslContextParameters": { "index": 17, "kind": "property", "displayName": 
"Ssl Context Parameters", "group": "security", "label": "security", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, 
"autowired": false, "secret": false, "description": "Customize TLS parameters 
used by the component. If not set defaults to the TLS parameters set in the 
Camel context" },
-    "useGlobalSslContextParameters": { "index": 18, "kind": "property", 
"displayName": "Use Global Ssl Context Parameters", "group": "security", 
"label": "security", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Enable usage of global SSL context 
parameters." }
+    "apiContextPath": { "index": 2, "kind": "property", "displayName": "Api 
Context Path", "group": "consumer", "label": "consumer", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "Sets the context-path to 
use for servicing the OpenAPI specification" },
+    "bridgeErrorHandler": { "index": 3, "kind": "property", "displayName": 
"Bridge Error Handler", "group": "consumer", "label": "consumer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Allows for bridging the consumer to the Camel routing Error Handler, which 
mean any exceptions (if possible) occurred while the Camel consumer is trying 
to pickup incoming messages, or the like [...]
+    "missingOperation": { "index": 4, "kind": "property", "displayName": 
"Missing Operation", "group": "consumer", "label": "consumer", "required": 
false, "type": "string", "javaType": "java.lang.String", "enum": [ "fail", 
"ignore", "mock" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "fail", "description": "Whether the consumer should fail,ignore 
or return a mock response for OpenAPI operations that are not mapped to a 
corresponding route." },
+    "consumerComponentName": { "index": 5, "kind": "property", "displayName": 
"Consumer Component Name", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Name of the Camel component that will service the requests. The 
component must be present in Camel registry and it must implement 
RestOpenApiConsumerFactory service provider interfac [...]
+    "mockIncludePattern": { "index": 6, "kind": "property", "displayName": 
"Mock Include Pattern", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "classpath:camel-mock\/**", "description": "Used for inclusive 
filtering of mock data from directories. The pattern is using Ant-path style 
pattern. Multiple patterns can be specified sepa [...]
+    "restOpenapiProcessorStrategy": { "index": 7, "kind": "property", 
"displayName": "Rest Openapi Processor Strategy", "group": "consumer 
(advanced)", "label": "consumer,advanced", "required": false, "type": "object", 
"javaType": 
"org.apache.camel.component.rest.openapi.RestOpenapiProcessorStrategy", 
"deprecated": false, "autowired": false, "secret": false, "description": "To 
use a custom strategy for how to process Rest DSL requests" },
+    "host": { "index": 8, "kind": "property", "displayName": "Host", "group": 
"producer", "label": "producer", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Scheme hostname and port to direct the HTTP 
requests to in the form of https:\/\/hostname:port. Can be configured at the 
endpoint, component or in the corresponding REST configuration in the Camel 
Context. If you give this component a nam [...]
+    "lazyStartProducer": { "index": 9, "kind": "property", "displayName": 
"Lazy Start Producer", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Whether the producer should be started lazy (on the first message). By 
starting lazy you can use this to allow CamelContext and routes to startup in 
situations where a producer may otherwise fail [...]
+    "requestValidationEnabled": { "index": 10, "kind": "property", 
"displayName": "Request Validation Enabled", "group": "producer", "label": 
"producer", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "Enable validation of requests against the configured 
OpenAPI specification" },
+    "componentName": { "index": 11, "kind": "property", "displayName": 
"Component Name", "group": "producer (advanced)", "label": "producer,advanced", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "description": "Name 
of the Camel component that will perform the requests. The component must be 
present in Camel registry and it must implement RestProducerFactory service 
provider interface. If not set CLASSPATH [...]
+    "consumes": { "index": 12, "kind": "property", "displayName": "Consumes", 
"group": "producer (advanced)", "label": "producer,advanced", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "What payload type this 
component capable of consuming. Could be one type, like application\/json or 
multiple types as application\/json, application\/xml; q=0.5 according to the 
RFC7231. This equates to the va [...]
+    "produces": { "index": 13, "kind": "property", "displayName": "Produces", 
"group": "producer (advanced)", "label": "producer,advanced", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "What payload type this 
component is producing. For example application\/json according to the RFC7231. 
This equates to the value of Content-Type HTTP header. If set overrides any 
value present in the OpenApi s [...]
+    "autowiredEnabled": { "index": 14, "kind": "property", "displayName": 
"Autowired Enabled", "group": "advanced", "label": "advanced", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Whether autowiring is enabled. This is used for automatic autowiring options 
(the option must be marked as autowired) by looking up in the registry to find 
if there is a single instance of matching  [...]
+    "clientRequestValidation": { "index": 15, "kind": "property", 
"displayName": "Client Request Validation", "group": "consumes", "label": 
"consumes", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "Whether to enable validation of the client request to 
check if the incoming request is valid according to the OpenAPI specification" 
},
+    "sslContextParameters": { "index": 16, "kind": "property", "displayName": 
"Ssl Context Parameters", "group": "security", "label": "security", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, 
"autowired": false, "secret": false, "description": "Customize TLS parameters 
used by the component. If not set defaults to the TLS parameters set in the 
Camel context" },
+    "useGlobalSslContextParameters": { "index": 17, "kind": "property", 
"displayName": "Use Global Ssl Context Parameters", "group": "security", 
"label": "security", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Enable usage of global SSL context 
parameters." }
   },
   "properties": {
     "specificationUri": { "index": 0, "kind": "path", "displayName": 
"Specification Uri", "group": "common", "label": "common", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "openapi.json", 
"description": "Path to the OpenApi specification file. The scheme, host base 
path are taken from this specification, but these can be overridden with 
properties on the component or endpoint level. If not  [...]
@@ -61,8 +60,6 @@
     "requestValidationEnabled": { "index": 14, "kind": "parameter", 
"displayName": "Request Validation Enabled", "group": "producer", "label": 
"producer", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "Enable validation of requests against the configured 
OpenAPI specification" },
     "componentName": { "index": 15, "kind": "parameter", "displayName": 
"Component Name", "group": "producer (advanced)", "label": "producer,advanced", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "description": "Name 
of the Camel component that will perform the requests. The component must be 
present in Camel registry and it must implement RestProducerFactory service 
provider interface. If not set CLASSPAT [...]
     "lazyStartProducer": { "index": 16, "kind": "parameter", "displayName": 
"Lazy Start Producer", "group": "producer (advanced)", "label": 
"producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether the producer should be started 
lazy (on the first message). By starting lazy you can use this to allow 
CamelContext and routes to startup in situations where a produ [...]
-    "requestValidationCustomizer": { "index": 17, "kind": "parameter", 
"displayName": "Request Validation Customizer", "group": "advanced", "label": 
"advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.component.rest.openapi.validator.RequestValidationCustomizer",
 "deprecated": false, "autowired": false, "secret": false, "description": "If 
request validation is enabled, this option provides the capability to customize 
the creation of OpenApiInteractionValidator  [...]
-    "requestValidationLevels": { "index": 18, "kind": "parameter", 
"displayName": "Request Validation Levels", "group": "advanced", "label": 
"advanced", "required": false, "type": "object", "javaType": 
"java.util.Map<java.lang.String, java.lang.Object>", "prefix": "validation.", 
"multiValue": true, "deprecated": false, "autowired": false, "secret": false, 
"description": "Levels for specific OpenAPI request validation options. 
Multiple options can be specified as URI options prefixed by ' [...]
-    "clientRequestValidation": { "index": 19, "kind": "parameter", 
"displayName": "Client Request Validation", "group": "consumes", "label": 
"consumes", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "Whether to enable validation of the client request to 
check if the incoming request is valid according to the OpenAPI specification" }
+    "clientRequestValidation": { "index": 17, "kind": "parameter", 
"displayName": "Client Request Validation", "group": "consumes", "label": 
"consumes", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "Whether to enable validation of the client request to 
check if the incoming request is valid according to the OpenAPI specification" }
   }
 }
diff --git a/components/camel-rest-openapi/pom.xml 
b/components/camel-rest-openapi/pom.xml
index 53113f3afc6..4d758f3afb0 100644
--- a/components/camel-rest-openapi/pom.xml
+++ b/components/camel-rest-openapi/pom.xml
@@ -105,30 +105,6 @@
             <version>${jackson2-version}</version>
         </dependency>
 
-        <dependency>
-            <groupId>com.atlassian.oai</groupId>
-            <artifactId>swagger-request-validator-core</artifactId>
-            <version>${swagger-request-validator-version}</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>io.swagger.parser.v3</groupId>
-                    <artifactId>swagger-parser-v2-converter</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>io.swagger.core.v3</groupId>
-                    <artifactId>swagger-models</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>io.swagger.core.v3</groupId>
-                    <artifactId>swagger-core</artifactId>
-                </exclusion>
-                <exclusion>
-                    <groupId>com.google.code.findbugs</groupId>
-                    <artifactId>findbugs</artifactId>
-                </exclusion>
-            </exclusions>
-        </dependency>
-
         <!-- test -->
         <dependency>
             <groupId>org.apache.camel</groupId>
diff --git 
a/components/camel-rest-openapi/src/generated/java/org/apache/camel/component/rest/openapi/RestOpenApiComponentConfigurer.java
 
b/components/camel-rest-openapi/src/generated/java/org/apache/camel/component/rest/openapi/RestOpenApiComponentConfigurer.java
index e7bfca41e55..a4da07cffbb 100644
--- 
a/components/camel-rest-openapi/src/generated/java/org/apache/camel/component/rest/openapi/RestOpenApiComponentConfigurer.java
+++ 
b/components/camel-rest-openapi/src/generated/java/org/apache/camel/component/rest/openapi/RestOpenApiComponentConfigurer.java
@@ -44,8 +44,6 @@ public class RestOpenApiComponentConfigurer extends 
PropertyConfigurerSupport im
         case "mockincludepattern":
         case "mockIncludePattern": 
target.setMockIncludePattern(property(camelContext, java.lang.String.class, 
value)); return true;
         case "produces": target.setProduces(property(camelContext, 
java.lang.String.class, value)); return true;
-        case "requestvalidationcustomizer":
-        case "requestValidationCustomizer": 
target.setRequestValidationCustomizer(property(camelContext, 
org.apache.camel.component.rest.openapi.validator.RequestValidationCustomizer.class,
 value)); return true;
         case "requestvalidationenabled":
         case "requestValidationEnabled": 
target.setRequestValidationEnabled(property(camelContext, boolean.class, 
value)); return true;
         case "restopenapiprocessorstrategy":
@@ -86,8 +84,6 @@ public class RestOpenApiComponentConfigurer extends 
PropertyConfigurerSupport im
         case "mockincludepattern":
         case "mockIncludePattern": return java.lang.String.class;
         case "produces": return java.lang.String.class;
-        case "requestvalidationcustomizer":
-        case "requestValidationCustomizer": return 
org.apache.camel.component.rest.openapi.validator.RequestValidationCustomizer.class;
         case "requestvalidationenabled":
         case "requestValidationEnabled": return boolean.class;
         case "restopenapiprocessorstrategy":
@@ -129,8 +125,6 @@ public class RestOpenApiComponentConfigurer extends 
PropertyConfigurerSupport im
         case "mockincludepattern":
         case "mockIncludePattern": return target.getMockIncludePattern();
         case "produces": return target.getProduces();
-        case "requestvalidationcustomizer":
-        case "requestValidationCustomizer": return 
target.getRequestValidationCustomizer();
         case "requestvalidationenabled":
         case "requestValidationEnabled": return 
target.isRequestValidationEnabled();
         case "restopenapiprocessorstrategy":
diff --git 
a/components/camel-rest-openapi/src/generated/java/org/apache/camel/component/rest/openapi/RestOpenApiEndpointConfigurer.java
 
b/components/camel-rest-openapi/src/generated/java/org/apache/camel/component/rest/openapi/RestOpenApiEndpointConfigurer.java
index 9d7b7321749..31e093bdf8c 100644
--- 
a/components/camel-rest-openapi/src/generated/java/org/apache/camel/component/rest/openapi/RestOpenApiEndpointConfigurer.java
+++ 
b/components/camel-rest-openapi/src/generated/java/org/apache/camel/component/rest/openapi/RestOpenApiEndpointConfigurer.java
@@ -46,12 +46,8 @@ public class RestOpenApiEndpointConfigurer extends 
PropertyConfigurerSupport imp
         case "mockincludepattern":
         case "mockIncludePattern": 
target.setMockIncludePattern(property(camelContext, java.lang.String.class, 
value)); return true;
         case "produces": target.setProduces(property(camelContext, 
java.lang.String.class, value)); return true;
-        case "requestvalidationcustomizer":
-        case "requestValidationCustomizer": 
target.setRequestValidationCustomizer(property(camelContext, 
org.apache.camel.component.rest.openapi.validator.RequestValidationCustomizer.class,
 value)); return true;
         case "requestvalidationenabled":
         case "requestValidationEnabled": 
target.setRequestValidationEnabled(property(camelContext, boolean.class, 
value)); return true;
-        case "requestvalidationlevels":
-        case "requestValidationLevels": 
target.setRequestValidationLevels(property(camelContext, java.util.Map.class, 
value)); return true;
         case "restopenapiprocessorstrategy":
         case "restOpenapiProcessorStrategy": 
target.setRestOpenapiProcessorStrategy(property(camelContext, 
org.apache.camel.component.rest.openapi.RestOpenapiProcessorStrategy.class, 
value)); return true;
         default: return false;
@@ -86,12 +82,8 @@ public class RestOpenApiEndpointConfigurer extends 
PropertyConfigurerSupport imp
         case "mockincludepattern":
         case "mockIncludePattern": return java.lang.String.class;
         case "produces": return java.lang.String.class;
-        case "requestvalidationcustomizer":
-        case "requestValidationCustomizer": return 
org.apache.camel.component.rest.openapi.validator.RequestValidationCustomizer.class;
         case "requestvalidationenabled":
         case "requestValidationEnabled": return boolean.class;
-        case "requestvalidationlevels":
-        case "requestValidationLevels": return java.util.Map.class;
         case "restopenapiprocessorstrategy":
         case "restOpenapiProcessorStrategy": return 
org.apache.camel.component.rest.openapi.RestOpenapiProcessorStrategy.class;
         default: return null;
@@ -127,25 +119,12 @@ public class RestOpenApiEndpointConfigurer extends 
PropertyConfigurerSupport imp
         case "mockincludepattern":
         case "mockIncludePattern": return target.getMockIncludePattern();
         case "produces": return target.getProduces();
-        case "requestvalidationcustomizer":
-        case "requestValidationCustomizer": return 
target.getRequestValidationCustomizer();
         case "requestvalidationenabled":
         case "requestValidationEnabled": return 
target.isRequestValidationEnabled();
-        case "requestvalidationlevels":
-        case "requestValidationLevels": return 
target.getRequestValidationLevels();
         case "restopenapiprocessorstrategy":
         case "restOpenapiProcessorStrategy": return 
target.getRestOpenapiProcessorStrategy();
         default: return null;
         }
     }
-
-    @Override
-    public Object getCollectionValueType(Object target, String name, boolean 
ignoreCase) {
-        switch (ignoreCase ? name.toLowerCase() : name) {
-        case "requestvalidationlevels":
-        case "requestValidationLevels": return java.lang.Object.class;
-        default: return null;
-        }
-    }
 }
 
diff --git 
a/components/camel-rest-openapi/src/generated/java/org/apache/camel/component/rest/openapi/RestOpenApiEndpointUriFactory.java
 
b/components/camel-rest-openapi/src/generated/java/org/apache/camel/component/rest/openapi/RestOpenApiEndpointUriFactory.java
index 12de0f22eb9..76b521ff3ae 100644
--- 
a/components/camel-rest-openapi/src/generated/java/org/apache/camel/component/rest/openapi/RestOpenApiEndpointUriFactory.java
+++ 
b/components/camel-rest-openapi/src/generated/java/org/apache/camel/component/rest/openapi/RestOpenApiEndpointUriFactory.java
@@ -21,7 +21,7 @@ public class RestOpenApiEndpointUriFactory extends 
org.apache.camel.support.comp
     private static final Set<String> SECRET_PROPERTY_NAMES;
     private static final Set<String> MULTI_VALUE_PREFIXES;
     static {
-        Set<String> props = new HashSet<>(20);
+        Set<String> props = new HashSet<>(18);
         props.add("apiContextPath");
         props.add("basePath");
         props.add("bridgeErrorHandler");
@@ -37,16 +37,12 @@ public class RestOpenApiEndpointUriFactory extends 
org.apache.camel.support.comp
         props.add("mockIncludePattern");
         props.add("operationId");
         props.add("produces");
-        props.add("requestValidationCustomizer");
         props.add("requestValidationEnabled");
-        props.add("requestValidationLevels");
         props.add("restOpenapiProcessorStrategy");
         props.add("specificationUri");
         PROPERTY_NAMES = Collections.unmodifiableSet(props);
         SECRET_PROPERTY_NAMES = Collections.emptySet();
-        Set<String> prefixes = new HashSet<>(1);
-        prefixes.add("validation.");
-        MULTI_VALUE_PREFIXES = Collections.unmodifiableSet(prefixes);
+        MULTI_VALUE_PREFIXES = Collections.emptySet();
     }
 
     @Override
diff --git 
a/components/camel-rest-openapi/src/generated/resources/META-INF/org/apache/camel/component/rest/openapi/rest-openapi.json
 
b/components/camel-rest-openapi/src/generated/resources/META-INF/org/apache/camel/component/rest/openapi/rest-openapi.json
index d5104b9f003..3179dafec36 100644
--- 
a/components/camel-rest-openapi/src/generated/resources/META-INF/org/apache/camel/component/rest/openapi/rest-openapi.json
+++ 
b/components/camel-rest-openapi/src/generated/resources/META-INF/org/apache/camel/component/rest/openapi/rest-openapi.json
@@ -25,23 +25,22 @@
   "componentProperties": {
     "basePath": { "index": 0, "kind": "property", "displayName": "Base Path", 
"group": "common", "label": "common", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "API basePath, for example \/v2. Default is 
unset, if set overrides the value present in OpenApi specification." },
     "specificationUri": { "index": 1, "kind": "property", "displayName": 
"Specification Uri", "group": "common", "label": "common", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "openapi.json", 
"description": "Path to the OpenApi specification file. The scheme, host base 
path are taken from this specification, but these can be overridden with 
properties on the component or endpoint level. If  [...]
-    "requestValidationCustomizer": { "index": 2, "kind": "property", 
"displayName": "Request Validation Customizer", "group": "common (advanced)", 
"label": "common,advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.component.rest.openapi.validator.RequestValidationCustomizer",
 "deprecated": false, "autowired": false, "secret": false, "description": "If 
request validation is enabled, this option provides the capability to customize 
the creation of OpenApiInterac [...]
-    "apiContextPath": { "index": 3, "kind": "property", "displayName": "Api 
Context Path", "group": "consumer", "label": "consumer", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "Sets the context-path to 
use for servicing the OpenAPI specification" },
-    "bridgeErrorHandler": { "index": 4, "kind": "property", "displayName": 
"Bridge Error Handler", "group": "consumer", "label": "consumer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Allows for bridging the consumer to the Camel routing Error Handler, which 
mean any exceptions (if possible) occurred while the Camel consumer is trying 
to pickup incoming messages, or the like [...]
-    "missingOperation": { "index": 5, "kind": "property", "displayName": 
"Missing Operation", "group": "consumer", "label": "consumer", "required": 
false, "type": "string", "javaType": "java.lang.String", "enum": [ "fail", 
"ignore", "mock" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "fail", "description": "Whether the consumer should fail,ignore 
or return a mock response for OpenAPI operations that are not mapped to a 
corresponding route." },
-    "consumerComponentName": { "index": 6, "kind": "property", "displayName": 
"Consumer Component Name", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Name of the Camel component that will service the requests. The 
component must be present in Camel registry and it must implement 
RestOpenApiConsumerFactory service provider interfac [...]
-    "mockIncludePattern": { "index": 7, "kind": "property", "displayName": 
"Mock Include Pattern", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "classpath:camel-mock\/**", "description": "Used for inclusive 
filtering of mock data from directories. The pattern is using Ant-path style 
pattern. Multiple patterns can be specified sepa [...]
-    "restOpenapiProcessorStrategy": { "index": 8, "kind": "property", 
"displayName": "Rest Openapi Processor Strategy", "group": "consumer 
(advanced)", "label": "consumer,advanced", "required": false, "type": "object", 
"javaType": 
"org.apache.camel.component.rest.openapi.RestOpenapiProcessorStrategy", 
"deprecated": false, "autowired": false, "secret": false, "description": "To 
use a custom strategy for how to process Rest DSL requests" },
-    "host": { "index": 9, "kind": "property", "displayName": "Host", "group": 
"producer", "label": "producer", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Scheme hostname and port to direct the HTTP 
requests to in the form of https:\/\/hostname:port. Can be configured at the 
endpoint, component or in the corresponding REST configuration in the Camel 
Context. If you give this component a nam [...]
-    "lazyStartProducer": { "index": 10, "kind": "property", "displayName": 
"Lazy Start Producer", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Whether the producer should be started lazy (on the first message). By 
starting lazy you can use this to allow CamelContext and routes to startup in 
situations where a producer may otherwise fai [...]
-    "requestValidationEnabled": { "index": 11, "kind": "property", 
"displayName": "Request Validation Enabled", "group": "producer", "label": 
"producer", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "Enable validation of requests against the configured 
OpenAPI specification" },
-    "componentName": { "index": 12, "kind": "property", "displayName": 
"Component Name", "group": "producer (advanced)", "label": "producer,advanced", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "description": "Name 
of the Camel component that will perform the requests. The component must be 
present in Camel registry and it must implement RestProducerFactory service 
provider interface. If not set CLASSPATH [...]
-    "consumes": { "index": 13, "kind": "property", "displayName": "Consumes", 
"group": "producer (advanced)", "label": "producer,advanced", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "What payload type this 
component capable of consuming. Could be one type, like application\/json or 
multiple types as application\/json, application\/xml; q=0.5 according to the 
RFC7231. This equates to the va [...]
-    "produces": { "index": 14, "kind": "property", "displayName": "Produces", 
"group": "producer (advanced)", "label": "producer,advanced", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "What payload type this 
component is producing. For example application\/json according to the RFC7231. 
This equates to the value of Content-Type HTTP header. If set overrides any 
value present in the OpenApi s [...]
-    "autowiredEnabled": { "index": 15, "kind": "property", "displayName": 
"Autowired Enabled", "group": "advanced", "label": "advanced", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Whether autowiring is enabled. This is used for automatic autowiring options 
(the option must be marked as autowired) by looking up in the registry to find 
if there is a single instance of matching  [...]
-    "clientRequestValidation": { "index": 16, "kind": "property", 
"displayName": "Client Request Validation", "group": "consumes", "label": 
"consumes", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "Whether to enable validation of the client request to 
check if the incoming request is valid according to the OpenAPI specification" 
},
-    "sslContextParameters": { "index": 17, "kind": "property", "displayName": 
"Ssl Context Parameters", "group": "security", "label": "security", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, 
"autowired": false, "secret": false, "description": "Customize TLS parameters 
used by the component. If not set defaults to the TLS parameters set in the 
Camel context" },
-    "useGlobalSslContextParameters": { "index": 18, "kind": "property", 
"displayName": "Use Global Ssl Context Parameters", "group": "security", 
"label": "security", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Enable usage of global SSL context 
parameters." }
+    "apiContextPath": { "index": 2, "kind": "property", "displayName": "Api 
Context Path", "group": "consumer", "label": "consumer", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "Sets the context-path to 
use for servicing the OpenAPI specification" },
+    "bridgeErrorHandler": { "index": 3, "kind": "property", "displayName": 
"Bridge Error Handler", "group": "consumer", "label": "consumer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Allows for bridging the consumer to the Camel routing Error Handler, which 
mean any exceptions (if possible) occurred while the Camel consumer is trying 
to pickup incoming messages, or the like [...]
+    "missingOperation": { "index": 4, "kind": "property", "displayName": 
"Missing Operation", "group": "consumer", "label": "consumer", "required": 
false, "type": "string", "javaType": "java.lang.String", "enum": [ "fail", 
"ignore", "mock" ], "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "fail", "description": "Whether the consumer should fail,ignore 
or return a mock response for OpenAPI operations that are not mapped to a 
corresponding route." },
+    "consumerComponentName": { "index": 5, "kind": "property", "displayName": 
"Consumer Component Name", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Name of the Camel component that will service the requests. The 
component must be present in Camel registry and it must implement 
RestOpenApiConsumerFactory service provider interfac [...]
+    "mockIncludePattern": { "index": 6, "kind": "property", "displayName": 
"Mock Include Pattern", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "classpath:camel-mock\/**", "description": "Used for inclusive 
filtering of mock data from directories. The pattern is using Ant-path style 
pattern. Multiple patterns can be specified sepa [...]
+    "restOpenapiProcessorStrategy": { "index": 7, "kind": "property", 
"displayName": "Rest Openapi Processor Strategy", "group": "consumer 
(advanced)", "label": "consumer,advanced", "required": false, "type": "object", 
"javaType": 
"org.apache.camel.component.rest.openapi.RestOpenapiProcessorStrategy", 
"deprecated": false, "autowired": false, "secret": false, "description": "To 
use a custom strategy for how to process Rest DSL requests" },
+    "host": { "index": 8, "kind": "property", "displayName": "Host", "group": 
"producer", "label": "producer", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Scheme hostname and port to direct the HTTP 
requests to in the form of https:\/\/hostname:port. Can be configured at the 
endpoint, component or in the corresponding REST configuration in the Camel 
Context. If you give this component a nam [...]
+    "lazyStartProducer": { "index": 9, "kind": "property", "displayName": 
"Lazy Start Producer", "group": "producer", "label": "producer", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Whether the producer should be started lazy (on the first message). By 
starting lazy you can use this to allow CamelContext and routes to startup in 
situations where a producer may otherwise fail [...]
+    "requestValidationEnabled": { "index": 10, "kind": "property", 
"displayName": "Request Validation Enabled", "group": "producer", "label": 
"producer", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "Enable validation of requests against the configured 
OpenAPI specification" },
+    "componentName": { "index": 11, "kind": "property", "displayName": 
"Component Name", "group": "producer (advanced)", "label": "producer,advanced", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "description": "Name 
of the Camel component that will perform the requests. The component must be 
present in Camel registry and it must implement RestProducerFactory service 
provider interface. If not set CLASSPATH [...]
+    "consumes": { "index": 12, "kind": "property", "displayName": "Consumes", 
"group": "producer (advanced)", "label": "producer,advanced", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "What payload type this 
component capable of consuming. Could be one type, like application\/json or 
multiple types as application\/json, application\/xml; q=0.5 according to the 
RFC7231. This equates to the va [...]
+    "produces": { "index": 13, "kind": "property", "displayName": "Produces", 
"group": "producer (advanced)", "label": "producer,advanced", "required": 
false, "type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "description": "What payload type this 
component is producing. For example application\/json according to the RFC7231. 
This equates to the value of Content-Type HTTP header. If set overrides any 
value present in the OpenApi s [...]
+    "autowiredEnabled": { "index": 14, "kind": "property", "displayName": 
"Autowired Enabled", "group": "advanced", "label": "advanced", "required": 
false, "type": "boolean", "javaType": "boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Whether autowiring is enabled. This is used for automatic autowiring options 
(the option must be marked as autowired) by looking up in the registry to find 
if there is a single instance of matching  [...]
+    "clientRequestValidation": { "index": 15, "kind": "property", 
"displayName": "Client Request Validation", "group": "consumes", "label": 
"consumes", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "Whether to enable validation of the client request to 
check if the incoming request is valid according to the OpenAPI specification" 
},
+    "sslContextParameters": { "index": 16, "kind": "property", "displayName": 
"Ssl Context Parameters", "group": "security", "label": "security", "required": 
false, "type": "object", "javaType": 
"org.apache.camel.support.jsse.SSLContextParameters", "deprecated": false, 
"autowired": false, "secret": false, "description": "Customize TLS parameters 
used by the component. If not set defaults to the TLS parameters set in the 
Camel context" },
+    "useGlobalSslContextParameters": { "index": 17, "kind": "property", 
"displayName": "Use Global Ssl Context Parameters", "group": "security", 
"label": "security", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Enable usage of global SSL context 
parameters." }
   },
   "properties": {
     "specificationUri": { "index": 0, "kind": "path", "displayName": 
"Specification Uri", "group": "common", "label": "common", "required": false, 
"type": "string", "javaType": "java.lang.String", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": "openapi.json", 
"description": "Path to the OpenApi specification file. The scheme, host base 
path are taken from this specification, but these can be overridden with 
properties on the component or endpoint level. If not  [...]
@@ -61,8 +60,6 @@
     "requestValidationEnabled": { "index": 14, "kind": "parameter", 
"displayName": "Request Validation Enabled", "group": "producer", "label": 
"producer", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "Enable validation of requests against the configured 
OpenAPI specification" },
     "componentName": { "index": 15, "kind": "parameter", "displayName": 
"Component Name", "group": "producer (advanced)", "label": "producer,advanced", 
"required": false, "type": "string", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "description": "Name 
of the Camel component that will perform the requests. The component must be 
present in Camel registry and it must implement RestProducerFactory service 
provider interface. If not set CLASSPAT [...]
     "lazyStartProducer": { "index": 16, "kind": "parameter", "displayName": 
"Lazy Start Producer", "group": "producer (advanced)", "label": 
"producer,advanced", "required": false, "type": "boolean", "javaType": 
"boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Whether the producer should be started 
lazy (on the first message). By starting lazy you can use this to allow 
CamelContext and routes to startup in situations where a produ [...]
-    "requestValidationCustomizer": { "index": 17, "kind": "parameter", 
"displayName": "Request Validation Customizer", "group": "advanced", "label": 
"advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.component.rest.openapi.validator.RequestValidationCustomizer",
 "deprecated": false, "autowired": false, "secret": false, "description": "If 
request validation is enabled, this option provides the capability to customize 
the creation of OpenApiInteractionValidator  [...]
-    "requestValidationLevels": { "index": 18, "kind": "parameter", 
"displayName": "Request Validation Levels", "group": "advanced", "label": 
"advanced", "required": false, "type": "object", "javaType": 
"java.util.Map<java.lang.String, java.lang.Object>", "prefix": "validation.", 
"multiValue": true, "deprecated": false, "autowired": false, "secret": false, 
"description": "Levels for specific OpenAPI request validation options. 
Multiple options can be specified as URI options prefixed by ' [...]
-    "clientRequestValidation": { "index": 19, "kind": "parameter", 
"displayName": "Client Request Validation", "group": "consumes", "label": 
"consumes", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "Whether to enable validation of the client request to 
check if the incoming request is valid according to the OpenAPI specification" }
+    "clientRequestValidation": { "index": 17, "kind": "parameter", 
"displayName": "Client Request Validation", "group": "consumes", "label": 
"consumes", "required": false, "type": "boolean", "javaType": "boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "Whether to enable validation of the client request to 
check if the incoming request is valid according to the OpenAPI specification" }
   }
 }
diff --git 
a/components/camel-rest-openapi/src/main/docs/rest-openapi-component.adoc 
b/components/camel-rest-openapi/src/main/docs/rest-openapi-component.adoc
index f650a421368..ff7c6a97451 100644
--- a/components/camel-rest-openapi/src/main/docs/rest-openapi-component.adoc
+++ b/components/camel-rest-openapi/src/main/docs/rest-openapi-component.adoc
@@ -190,75 +190,21 @@ String getPetJsonById(int petId) {
 API requests can be validated against the configured OpenAPI specification 
before they are sent by setting the `requestValidationEnabled` option to `true`.
 Validation is provided by the 
https://bitbucket.org/atlassian/swagger-request-validator/src/master/[swagger-request-validator].
 
-By default, the following checks are enabled and will cause request validation 
to fail if the requirements are not fulfilled.
+The validator checks for the following conditions:
 
-|===
-|Configuration key |Description
+* request body - Checks if the request body is required and whether there is 
any body on the Camel Exchange.
 
-|validation.request.body
-|Validates the request body. If the content type of the request is 
`application/json`, the JSON content
-will be validated against the schema defined in the OpenAPI specification.
+* valid json - Checks if the content-type is `application/json` that the 
message body can be parsed as valid JSon.
 
-|validation.request.contentType.notAllowed
-|Validates whether the `Content-Type` header for the request is valid for the 
API operation.
+* content-type - Validates whether the `Content-Type` header for the request 
is valid for the API operation.
 The value is taken from the `Content-Type` Camel message exchange header.
 
-|validation.request.path.missing
-|Validates whether the resolved request path is valid for the API operation.
-
-|validation.request.parameter.header.missing
-|Validates whether an HTTP header required by the API operation is present. 
The header is
+* request parameters - Validates whether an HTTP header required by the API 
operation is present. The header is
 expected to be present among the Camel message exchange headers.
 
-|validation.request.parameter.query.missing
-|Validates whether an HTTP query parameter required by the API operation is 
present. The query parameter is
+* query parameters - Validates whether an HTTP query parameter required by the 
API operation is present. The query parameter is
 expected to be present among the Camel message exchange headers.
-|===
 
 If any of the validation checks fail, then a `RestOpenApiValidationException` 
is thrown. The exception object
 has a `getValidationErrors` method that returns the error messages from the 
validator.
 
-=== Customizing validation
-
-==== Validation levels
-
-You can override the configuration options mentioned above and configure new 
ones via the `validationLevels` option.
-You can configure additional options on the `rest-openapi` endpoint URI with 
options prefixed with `validation.`.
-
-For example, to disable the `validation.request.body` check and enable the 
`validation.request.body.unexpected` check.
-
-[source,java]
-----
-.to("rest-openapi#myOperation?validationEnabled=true&validation.request.body=IGNORE&validation.request.body.unexpected=ERROR")
-----
-
-The full list of validation options can be found 
https://bitbucket.org/atlassian/swagger-request-validator/src/master/swagger-request-validator-core/src/main/resources/swagger/validation/messages.properties[here].
-
-==== RequestValidationCustomizer
-
-You can get complete control for the setup of the validation options with a 
custom `RequestValidationCustomizer`. For example.
-
-[source,java]
-----
-public class CustomRequestValidationCustomizer implements 
RequestValidationCustomizer {
-        @Override
-        public void 
customizeOpenApiInteractionValidator(OpenApiInteractionValidator.Builder 
builder) {
-            // Apply customizations to the OpenApiInteractionValidator builder
-        }
-
-        @Override
-        public void customizeSimpleRequestBuilder(
-                SimpleRequest.Builder builder, RestOpenApiOperation 
openApiOperation, Exchange exchange) {
-            // Apply customizations to the SimpleRequest builder
-        }
-}
-----
-
-Assuming `CustomRequestValidationCustomizer` is bound to the Camel registry, 
you can reference it in the endpoint URI.
-
-[source,java]
-----
-.to("rest-openapi#myOperation?requestValidationEnabled=true&requestValidationCustomizer=#customRequestValidationCustomizer")
-----
-
-include::spring-boot:partial$starter.adoc[]
diff --git 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/DefaultRestOpenapiProcessorStrategy.java
 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/DefaultRestOpenapiProcessorStrategy.java
index c23cde28873..db3c0eff792 100644
--- 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/DefaultRestOpenapiProcessorStrategy.java
+++ 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/DefaultRestOpenapiProcessorStrategy.java
@@ -25,7 +25,6 @@ import java.util.stream.Collectors;
 import io.swagger.v3.oas.models.OpenAPI;
 import io.swagger.v3.oas.models.Operation;
 import io.swagger.v3.oas.models.media.Content;
-import joptsimple.internal.Strings;
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.AsyncProducer;
 import org.apache.camel.CamelContext;
@@ -111,24 +110,24 @@ public class DefaultRestOpenapiProcessorStrategy extends 
ServiceSupport
             }
             for (var p : openAPI.getPaths().entrySet()) {
                 String uri = path + p.getKey();
-                String verbs = 
Strings.join(p.getValue().readOperationsMap().keySet().stream()
+                String verbs = 
p.getValue().readOperationsMap().keySet().stream()
                         .map(Enum::name)
                         .sorted()
-                        .collect(Collectors.toList()), ",");
+                        .collect(Collectors.joining(","));
                 String consumes = null;
                 String produces = null;
                 for (var o : p.getValue().readOperations()) {
                     if (o.getRequestBody() != null) {
                         Content c = o.getRequestBody().getContent();
                         if (c != null) {
-                            consumes = 
Strings.join(c.keySet().stream().sorted().collect(Collectors.toList()), ",");
+                            consumes = 
c.keySet().stream().sorted().collect(Collectors.joining(","));
                         }
                     }
                     if (o.getResponses() != null) {
                         for (var a : o.getResponses().values()) {
                             Content c = a.getContent();
                             if (c != null) {
-                                produces = 
Strings.join(c.keySet().stream().sorted().collect(Collectors.toList()), ",");
+                                produces = 
c.keySet().stream().sorted().collect(Collectors.joining(","));
                             }
                         }
                     }
diff --git 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiComponent.java
 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiComponent.java
index 02e49d0b590..28afc8d3fd9 100644
--- 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiComponent.java
+++ 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiComponent.java
@@ -21,14 +21,11 @@ import java.util.Map;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.SSLContextParametersAware;
-import 
org.apache.camel.component.rest.openapi.validator.DefaultRequestValidationCustomizer;
-import 
org.apache.camel.component.rest.openapi.validator.RequestValidationCustomizer;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.RestProducerFactory;
 import org.apache.camel.spi.annotations.Component;
 import org.apache.camel.support.DefaultComponent;
 import org.apache.camel.support.jsse.SSLContextParameters;
-import org.apache.camel.util.PropertiesHelper;
 
 import static 
org.apache.camel.component.rest.openapi.RestOpenApiHelper.isHostParam;
 import static 
org.apache.camel.component.rest.openapi.RestOpenApiHelper.isMediaRange;
@@ -129,10 +126,6 @@ public final class RestOpenApiComponent extends 
DefaultComponent implements SSLC
     private boolean clientRequestValidation;
     @Metadata(label = "producer", description = "Enable validation of requests 
against the configured OpenAPI specification")
     private boolean requestValidationEnabled;
-    @Metadata(description = "If request validation is enabled, this option 
provides the capability to customize"
-                            + " the creation of OpenApiInteractionValidator 
used to validate requests.",
-              label = "common,advanced")
-    private RequestValidationCustomizer requestValidationCustomizer = new 
DefaultRequestValidationCustomizer();
     @Metadata(description = "Whether the consumer should fail,ignore or return 
a mock response for OpenAPI operations that are not mapped to a corresponding 
route.",
               label = "consumer", enums = "fail,ignore,mock", defaultValue = 
"fail")
     private String missingOperation;
@@ -163,9 +156,7 @@ public final class RestOpenApiComponent extends 
DefaultComponent implements SSLC
         RestOpenApiEndpoint endpoint = new RestOpenApiEndpoint(uri, remaining, 
this, parameters);
         endpoint.setApiContextPath(getApiContextPath());
         endpoint.setClientRequestValidation(isClientRequestValidation());
-        
endpoint.setRequestValidationCustomizer(getRequestValidationCustomizer());
         endpoint.setRequestValidationEnabled(isRequestValidationEnabled());
-        
endpoint.setRequestValidationLevels(PropertiesHelper.extractProperties(parameters,
 "validation."));
         
endpoint.setRestOpenapiProcessorStrategy(getRestOpenapiProcessorStrategy());
         endpoint.setMissingOperation(getMissingOperation());
         endpoint.setMockIncludePattern(getMockIncludePattern());
@@ -295,11 +286,4 @@ public final class RestOpenApiComponent extends 
DefaultComponent implements SSLC
         this.clientRequestValidation = clientRequestValidation;
     }
 
-    public void setRequestValidationCustomizer(RequestValidationCustomizer 
requestValidationCustomizer) {
-        this.requestValidationCustomizer = requestValidationCustomizer;
-    }
-
-    public RequestValidationCustomizer getRequestValidationCustomizer() {
-        return requestValidationCustomizer;
-    }
 }
diff --git 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiEndpoint.java
 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiEndpoint.java
index addc0f29e90..d271c37924d 100644
--- 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiEndpoint.java
+++ 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiEndpoint.java
@@ -33,9 +33,6 @@ import java.util.function.Function;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
-import com.atlassian.oai.validator.OpenApiInteractionValidator;
-import com.atlassian.oai.validator.report.LevelResolver;
-import com.atlassian.oai.validator.report.ValidationReport;
 import io.swagger.v3.oas.models.OpenAPI;
 import io.swagger.v3.oas.models.Operation;
 import io.swagger.v3.oas.models.PathItem;
@@ -60,7 +57,7 @@ import org.apache.camel.ExchangePattern;
 import org.apache.camel.NoSuchBeanException;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
-import 
org.apache.camel.component.rest.openapi.validator.RequestValidationCustomizer;
+import 
org.apache.camel.component.rest.openapi.validator.DefaultRequestValidator;
 import org.apache.camel.component.rest.openapi.validator.RequestValidator;
 import org.apache.camel.component.rest.openapi.validator.RestOpenApiOperation;
 import org.apache.camel.spi.Resource;
@@ -156,15 +153,6 @@ public final class RestOpenApiEndpoint extends 
DefaultEndpoint {
     private boolean clientRequestValidation;
     @UriParam(label = "producer", description = "Enable validation of requests 
against the configured OpenAPI specification")
     private boolean requestValidationEnabled;
-    @UriParam(description = "If request validation is enabled, this option 
provides the capability to customize"
-                            + " the creation of OpenApiInteractionValidator 
used to validate requests.",
-              label = "advanced")
-    private RequestValidationCustomizer requestValidationCustomizer;
-    @UriParam(description = "Levels for specific OpenAPI request validation 
options. Multiple options can be"
-                            + " specified as URI options prefixed by 
'validation.'. For example, validation.request.body=ERROR"
-                            + "&validation.request.body.unexpected=IGNORED. 
Supported values are INFO, ERROR, WARN & IGNORE.",
-              label = "advanced", prefix = "validation.", multiValue = true)
-    private Map<String, Object> requestValidationLevels = new HashMap<>();
     @UriParam(description = "To use a custom strategy for how to process Rest 
DSL requests", label = "consumer,advanced")
     private RestOpenapiProcessorStrategy restOpenapiProcessorStrategy;
     @UriParam(description = "Whether the consumer should fail,ignore or return 
a mock response for OpenAPI operations that are not mapped to a corresponding 
route.",
@@ -424,15 +412,6 @@ public final class RestOpenApiEndpoint extends 
DefaultEndpoint {
         this.specificationUri = specificationUri;
     }
 
-    public void setRequestValidationCustomizer(
-            RequestValidationCustomizer requestValidationCustomizer) {
-        this.requestValidationCustomizer = requestValidationCustomizer;
-    }
-
-    public RequestValidationCustomizer getRequestValidationCustomizer() {
-        return requestValidationCustomizer;
-    }
-
     public void setRequestValidationEnabled(boolean requestValidationEnabled) {
         this.requestValidationEnabled = requestValidationEnabled;
     }
@@ -449,14 +428,6 @@ public final class RestOpenApiEndpoint extends 
DefaultEndpoint {
         this.clientRequestValidation = clientRequestValidation;
     }
 
-    public void setRequestValidationLevels(Map<String, Object> 
requestValidationLevels) {
-        this.requestValidationLevels = requestValidationLevels;
-    }
-
-    public Map<String, Object> getRequestValidationLevels() {
-        return requestValidationLevels;
-    }
-
     public RestOpenapiProcessorStrategy getRestOpenapiProcessorStrategy() {
         return restOpenapiProcessorStrategy;
     }
@@ -551,10 +522,6 @@ public final class RestOpenApiEndpoint extends 
DefaultEndpoint {
         return 
Optional.ofNullable(componentName).orElse(getComponent().getComponentName());
     }
 
-    String determineConsumerComponentName() {
-        return 
Optional.ofNullable(consumerComponentName).orElse(getComponent().getConsumerComponentName());
-    }
-
     Map<String, Object> determineEndpointParameters(final OpenAPI openapi, 
final Operation operation) {
         final Map<String, Object> parameters = new HashMap<>();
 
@@ -810,27 +777,11 @@ public final class RestOpenApiEndpoint extends 
DefaultEndpoint {
         return resolved.toString();
     }
 
-    RequestValidator configureRequestValidator(OpenAPI openapi, Operation 
operation, String method, String uriTemplate) {
-        RestOpenApiOperation restOpenApiOperation = new 
RestOpenApiOperation(operation, method, uriTemplate);
-        OpenApiInteractionValidator.Builder builder = 
OpenApiInteractionValidator.createFor(openapi);
-
-        LevelResolver.Builder levelResolverBuilder = LevelResolver.create();
-        levelResolverBuilder.withDefaultLevel(ValidationReport.Level.IGNORE)
-                .withLevel("validation.request.body", 
ValidationReport.Level.ERROR)
-                .withLevel("validation.request.contentType.notAllowed", 
ValidationReport.Level.ERROR)
-                .withLevel("validation.request.path.missing", 
ValidationReport.Level.ERROR)
-                .withLevel("validation.request.parameter.header.missing", 
ValidationReport.Level.ERROR)
-                .withLevel("validation.request.parameter.query.missing", 
ValidationReport.Level.ERROR);
-
-        requestValidationLevels.forEach((key, level) -> {
-            levelResolverBuilder.withLevel("validation." + key,
-                    
ValidationReport.Level.valueOf(level.toString().toUpperCase()));
-        });
-        builder.withLevelResolver(levelResolverBuilder.build());
-
-        
requestValidationCustomizer.customizeOpenApiInteractionValidator(builder);
-
-        return new RequestValidator(builder.build(), restOpenApiOperation, 
requestValidationCustomizer);
+    protected RequestValidator configureRequestValidator(
+            OpenAPI openAPI, Operation operation, String method, String 
uriTemplate) {
+        DefaultRequestValidator answer = new DefaultRequestValidator();
+        answer.setOperation(new RestOpenApiOperation(operation, method, 
uriTemplate));
+        return answer;
     }
 
     static String determineOption(
diff --git 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiProcessor.java
 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiProcessor.java
index 7a4e6d89bb3..f76ac9ee666 100644
--- 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiProcessor.java
+++ 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiProcessor.java
@@ -28,7 +28,6 @@ import io.swagger.v3.oas.models.OpenAPI;
 import io.swagger.v3.oas.models.Operation;
 import io.swagger.v3.oas.models.media.Content;
 import io.swagger.v3.oas.models.parameters.Parameter;
-import joptsimple.internal.Strings;
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
@@ -155,7 +154,7 @@ public class RestOpenApiProcessor extends 
DelegateAsyncProcessor implements Came
         if (o.getRequestBody() != null) {
             Content c = o.getRequestBody().getContent();
             if (c != null) {
-                consumes = 
Strings.join(c.keySet().stream().sorted().collect(Collectors.toList()), ",");
+                consumes = 
c.keySet().stream().sorted().collect(Collectors.joining(","));
             }
         }
         // the operation may have specific information what it can produce
@@ -163,7 +162,7 @@ public class RestOpenApiProcessor extends 
DelegateAsyncProcessor implements Came
             for (var a : o.getResponses().values()) {
                 Content c = a.getContent();
                 if (c != null) {
-                    produces = 
Strings.join(c.keySet().stream().sorted().collect(Collectors.toList()), ",");
+                    produces = 
c.keySet().stream().sorted().collect(Collectors.joining(","));
                 }
             }
         }
diff --git 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/validator/DefaultRequestValidator.java
 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/validator/DefaultRequestValidator.java
new file mode 100644
index 00000000000..32ac3f42d73
--- /dev/null
+++ 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/validator/DefaultRequestValidator.java
@@ -0,0 +1,143 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.rest.openapi.validator;
+
+import java.util.Collections;
+import java.util.LinkedHashSet;
+import java.util.Objects;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+import com.fasterxml.jackson.databind.json.JsonMapper;
+import io.swagger.v3.oas.models.media.Content;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.support.MessageHelper;
+import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.UnsafeUriCharactersEncoder;
+
+import static 
org.apache.camel.support.http.RestUtil.isValidOrAcceptedContentType;
+
+public class DefaultRequestValidator implements RequestValidator {
+
+    private static final Pattern REST_PATH_PARAM_PATTERN = 
Pattern.compile("\\{([^}]+)}");
+
+    private RestOpenApiOperation operation;
+
+    @Override
+    public void setOperation(RestOpenApiOperation operation) {
+        this.operation = operation;
+    }
+
+    @Override
+    public RestOpenApiOperation getOperation() {
+        return operation;
+    }
+
+    @Override
+    public Set<String> validate(Exchange exchange, RestOpenApiOperation o) {
+        // Perform validation and capture errors
+        Set<String> validationErrors = new LinkedHashSet<>();
+
+        Message message = exchange.getMessage();
+        String contentType = message.getHeader(Exchange.CONTENT_TYPE, 
String.class);
+
+        // Validate content-type
+        String consumes = null;
+        if (o.getOperation().getRequestBody() != null) {
+            Content c = o.getOperation().getRequestBody().getContent();
+            if (c != null) {
+                consumes = 
c.keySet().stream().sorted().collect(Collectors.joining(","));
+            }
+        }
+        if (contentType != null && !isValidOrAcceptedContentType(consumes, 
contentType)) {
+            validationErrors.add("Request Content-Type header '" + contentType 
+ "' does not match any allowed types");
+        }
+
+        // Validate body
+        boolean requiredBody = false;
+        if (o.getOperation().getRequestBody() != null) {
+            requiredBody = Boolean.TRUE == 
o.getOperation().getRequestBody().getRequired();
+        }
+        if (requiredBody) {
+            Object body = message.getBody();
+            if (body != null) {
+                body = MessageHelper.extractBodyAsString(message);
+            }
+            if (ObjectHelper.isEmpty(body)) {
+                validationErrors.add("A request body is required but none 
found.");
+            }
+        }
+        // special for json to check if the body is valid json
+        if (contentType != null && 
isValidOrAcceptedContentType("application/json", contentType)) {
+            Object body = message.getBody();
+            if (body != null) {
+                String text = MessageHelper.extractBodyAsString(message);
+                JsonMapper om = new JsonMapper();
+                try {
+                    om.readTree(text);
+                } catch (Exception e) {
+                    validationErrors.add("Unable to parse JSON");
+                }
+            }
+        }
+
+        // Validate required operation query params
+        o.getQueryParams()
+                .stream()
+                .filter(parameter -> Objects.nonNull(parameter.getRequired()) 
&& parameter.getRequired())
+                .forEach(parameter -> {
+                    Object header = message.getHeader(parameter.getName());
+                    if (ObjectHelper.isEmpty(header)) {
+                        validationErrors.add("Query parameter '" + 
parameter.getName() + "' is required but none found.");
+                    }
+                });
+
+        // Validate operation required headers
+        o.getHeaders()
+                .stream()
+                .filter(parameter -> Objects.nonNull(parameter.getRequired()) 
&& parameter.getRequired())
+                .forEach(parameter -> {
+                    Object header = message.getHeader(parameter.getName());
+                    if (ObjectHelper.isEmpty(header)) {
+                        validationErrors.add("Header parameter '" + 
parameter.getName() + "' is required but none found.");
+                    }
+                });
+
+        // Reset stream cache (if available) so it can be read again
+        MessageHelper.resetStreamCache(message);
+
+        return Collections.unmodifiableSet(validationErrors);
+    }
+
+    protected String resolvePathParams(Exchange exchange, RestOpenApiOperation 
o) {
+        String path = o.getUriTemplate();
+        Matcher matcher = REST_PATH_PARAM_PATTERN.matcher(path);
+        String pathToProcess = path;
+        while (matcher.find()) {
+            String paramName = matcher.group(1);
+            String paramValue = exchange.getMessage().getHeader(paramName, 
String.class);
+            if (ObjectHelper.isNotEmpty(paramValue)) {
+                pathToProcess = pathToProcess.replace("{" + paramName + "}", 
UnsafeUriCharactersEncoder.encode(paramValue));
+            }
+        }
+        return pathToProcess;
+    }
+
+}
diff --git 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/validator/RequestValidationCustomizer.java
 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/validator/RequestValidationCustomizer.java
deleted file mode 100644
index 42a5913bab6..00000000000
--- 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/validator/RequestValidationCustomizer.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.component.rest.openapi.validator;
-
-import com.atlassian.oai.validator.OpenApiInteractionValidator;
-import com.atlassian.oai.validator.model.SimpleRequest;
-import org.apache.camel.Exchange;
-
-/**
- * An abstraction for customizing the behavior of OpenApi request validation.
- */
-public interface RequestValidationCustomizer {
-
-    /**
-     * Customizes the creation of a {@link OpenApiInteractionValidator}. The 
default implementation enables validation
-     * of only the request body.
-     *
-     * @param builder The {@link OpenApiInteractionValidator} builder to be 
customized
-     */
-    default void 
customizeOpenApiInteractionValidator(OpenApiInteractionValidator.Builder 
builder) {
-        // Noop
-    }
-
-    /**
-     * Applies customizations the creation of a {@link SimpleRequest} to be 
validated by
-     * {@link OpenApiInteractionValidator}.
-     *
-     * @param builder   The {@link SimpleRequest} builder to be customized
-     * @param operation The {@link RestOpenApiOperation} containing details of 
the API operation associated with the
-     *                  request
-     * @param exchange  The message exchange being processed
-     */
-    default void customizeSimpleRequestBuilder(
-            SimpleRequest.Builder builder, RestOpenApiOperation operation, 
Exchange exchange) {
-        // Noop
-    }
-}
diff --git 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/validator/RequestValidator.java
 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/validator/RequestValidator.java
index 56724f71d37..de39028225a 100644
--- 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/validator/RequestValidator.java
+++ 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/validator/RequestValidator.java
@@ -16,144 +16,39 @@
  */
 package org.apache.camel.component.rest.openapi.validator;
 
-import java.io.InputStream;
-import java.nio.charset.Charset;
-import java.util.Collections;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Objects;
 import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
-import com.atlassian.oai.validator.OpenApiInteractionValidator;
-import com.atlassian.oai.validator.model.SimpleRequest;
-import com.atlassian.oai.validator.report.ValidationReport;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExchangePropertyKey;
-import org.apache.camel.Message;
-import org.apache.camel.TypeConverter;
-import org.apache.camel.support.MessageHelper;
-import org.apache.camel.util.IOHelper;
-import org.apache.camel.util.ObjectHelper;
-import org.apache.camel.util.UnsafeUriCharactersEncoder;
 
-public class RequestValidator {
-
-    private static final Pattern REST_PATH_PARAM_PATTERN = 
Pattern.compile("\\{([^}]+)}");
-
-    private final OpenApiInteractionValidator validator;
-    private final RestOpenApiOperation operation;
-    private final RequestValidationCustomizer customizer;
-
-    public RequestValidator(OpenApiInteractionValidator validator,
-                            RestOpenApiOperation operation,
-                            RequestValidationCustomizer customizer) {
-        this.validator = validator;
-        this.operation = operation;
-        this.customizer = customizer;
-    }
-
-    public Set<String> validate(Exchange exchange) {
-        Message message = exchange.getMessage();
-        String contentType = message.getHeader(Exchange.CONTENT_TYPE, 
String.class);
-        String charsetFromExchange = getCharsetFromExchange(exchange);
-        Charset charset = null;
-        if (ObjectHelper.isNotEmpty(charsetFromExchange)) {
-            charset = Charset.forName(charsetFromExchange);
-        }
-
-        SimpleRequest.Builder builder
-                = new SimpleRequest.Builder(operation.getMethod(), 
resolvePathParams(exchange));
-        builder.withContentType(contentType);
-
-        // Validate request body if available
-        Object body = message.getBody();
-        if (ObjectHelper.isNotEmpty(body)) {
-            if (body instanceof InputStream) {
-                builder.withBody((InputStream) body);
-            } else if (body instanceof byte[]) {
-                builder.withBody((byte[]) body);
-            } else {
-                TypeConverter typeConverter = 
exchange.getContext().getTypeConverter();
-                String stringBody = typeConverter.tryConvertTo(String.class, 
body);
-                builder.withBody(stringBody, charset);
-            }
-        }
-
-        // Validate required operation query params
-        operation.getQueryParams()
-                .stream()
-                .filter(parameter -> Objects.nonNull(parameter.getRequired()) 
&& parameter.getRequired())
-                .forEach(parameter -> {
-                    Object header = 
exchange.getMessage().getHeader(parameter.getName());
-                    if (ObjectHelper.isNotEmpty(header)) {
-                        if (header instanceof String) {
-                            builder.withQueryParam(parameter.getName(), 
(String) header);
-                        } else if (header instanceof List) {
-                            builder.withQueryParam(parameter.getName(), 
(List<String>) header);
-                        }
-                    }
-                });
-
-        // Validate operation required headers
-        operation.getHeaders()
-                .stream()
-                .filter(parameter -> Objects.nonNull(parameter.getRequired()) 
&& parameter.getRequired())
-                .forEach(parameter -> {
-                    Object header = 
exchange.getMessage().getHeader(parameter.getName());
-                    if (ObjectHelper.isNotEmpty(header)) {
-                        if (header instanceof String) {
-                            builder.withHeader(parameter.getName(), (String) 
header);
-                        } else if (header instanceof List) {
-                            builder.withHeader(parameter.getName(), 
(List<String>) header);
-                        }
-                    }
-                });
-
-        // Apply any extra customizations to the validation request
-        customizer.customizeSimpleRequestBuilder(builder, operation, exchange);
-
-        // Perform validation and capture errors
-        Set<String> validationErrors = new LinkedHashSet<>();
-        validator.validateRequest(builder.build())
-                .getMessages()
-                .stream()
-                .filter(validationMessage -> 
validationMessage.getLevel().equals(ValidationReport.Level.ERROR))
-                .map(ValidationReport.Message::getMessage)
-                .forEach(validationErrors::add);
-
-        // Reset stream cache (if available) so it can be read again
-        MessageHelper.resetStreamCache(message);
-
-        return Collections.unmodifiableSet(validationErrors);
-    }
-
-    protected String resolvePathParams(Exchange exchange) {
-        String path = operation.getUriTemplate();
-        Matcher matcher = REST_PATH_PARAM_PATTERN.matcher(path);
-        String pathToProcess = path;
-        while (matcher.find()) {
-            String paramName = matcher.group(1);
-            String paramValue = exchange.getMessage().getHeader(paramName, 
String.class);
-            if (ObjectHelper.isNotEmpty(paramValue)) {
-                pathToProcess = pathToProcess.replace("{" + paramName + "}", 
UnsafeUriCharactersEncoder.encode(paramValue));
-            }
-        }
-        return pathToProcess;
+public interface RequestValidator {
+
+    /**
+     * Sets the default operation.
+     */
+    void setOperation(RestOpenApiOperation operation);
+
+    /**
+     * Gets the default operation.
+     */
+    RestOpenApiOperation getOperation();
+
+    /**
+     * Validates the {@link Exchange} with the custom operation.
+     *
+     * @param  exchange  the exchange
+     * @param  operation operation to use
+     * @return           null if no validation error, otherwise a set of errors
+     */
+    Set<String> validate(Exchange exchange, RestOpenApiOperation operation);
+
+    /**
+     * Validates the {@link Exchange} with the default operation
+     *
+     * @param  exchange the exchange
+     * @return          null if no validation error, otherwise a set of errors
+     */
+    default Set<String> validate(Exchange exchange) {
+        return validate(exchange, getOperation());
     }
 
-    protected String getCharsetFromExchange(Exchange exchange) {
-        String charset = null;
-        if (exchange != null) {
-            String contentType = 
exchange.getMessage().getHeader(Exchange.CONTENT_TYPE, String.class);
-            if (ObjectHelper.isNotEmpty(contentType)) {
-                charset = IOHelper.getCharsetNameFromContentType(contentType);
-                if (ObjectHelper.isEmpty(charset)) {
-                    charset = 
exchange.getProperty(ExchangePropertyKey.CHARSET_NAME, String.class);
-                }
-            }
-        }
-        return charset;
-    }
 }
diff --git 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/validator/RestOpenApiOperation.java
 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/validator/RestOpenApiOperation.java
index dae1833d21c..0a5e30ac7f6 100644
--- 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/validator/RestOpenApiOperation.java
+++ 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/validator/RestOpenApiOperation.java
@@ -42,7 +42,7 @@ public class RestOpenApiOperation {
         this.headers = resolveParametersForType("header");
     }
 
-    public Object getOperation() {
+    public Operation getOperation() {
         return operation;
     }
 
diff --git 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/validator/DefaultRequestValidationCustomizer.java
 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/validator/RestOpenApiPath.java
similarity index 52%
rename from 
components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/validator/DefaultRequestValidationCustomizer.java
rename to 
components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/validator/RestOpenApiPath.java
index 747f9fe30f0..14efcf67d8d 100644
--- 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/validator/DefaultRequestValidationCustomizer.java
+++ 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/validator/RestOpenApiPath.java
@@ -16,8 +16,39 @@
  */
 package org.apache.camel.component.rest.openapi.validator;
 
-/**
- * A noop {@link RequestValidationCustomizer} implementation.
- */
-public class DefaultRequestValidationCustomizer implements 
RequestValidationCustomizer {
+import io.swagger.v3.oas.models.Operation;
+import org.apache.camel.support.RestConsumerContextPathMatcher;
+
+class RestOpenApiPath implements 
RestConsumerContextPathMatcher.ConsumerPath<Operation> {
+
+    private final String verb;
+    private final String path;
+    private final Operation consumer;
+
+    public RestOpenApiPath(String verb, String path, Operation consumer) {
+        this.verb = verb;
+        this.path = path;
+        this.consumer = consumer;
+    }
+
+    @Override
+    public String getRestrictMethod() {
+        return verb;
+    }
+
+    @Override
+    public String getConsumerPath() {
+        return path;
+    }
+
+    @Override
+    public Operation getConsumer() {
+        return consumer;
+    }
+
+    @Override
+    public boolean isMatchOnUriPrefix() {
+        return false;
+    }
+
 }
diff --git 
a/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/RestOpenApiCustomValidatorCustomizerTest.java
 
b/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/RestOpenApiCustomValidatorCustomizerTest.java
deleted file mode 100644
index 7371d4cca36..00000000000
--- 
a/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/RestOpenApiCustomValidatorCustomizerTest.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.component.rest.openapi;
-
-import java.util.Set;
-
-import javax.annotation.Nonnull;
-
-import com.atlassian.oai.validator.OpenApiInteractionValidator;
-import com.atlassian.oai.validator.interaction.request.CustomRequestValidator;
-import com.atlassian.oai.validator.model.ApiOperation;
-import com.atlassian.oai.validator.model.Request;
-import com.atlassian.oai.validator.model.SimpleRequest;
-import com.atlassian.oai.validator.report.ValidationReport;
-import org.apache.camel.BindToRegistry;
-import org.apache.camel.CamelContext;
-import org.apache.camel.Exchange;
-import org.apache.camel.Processor;
-import org.apache.camel.RoutesBuilder;
-import org.apache.camel.builder.RouteBuilder;
-import 
org.apache.camel.component.rest.openapi.validator.RequestValidationCustomizer;
-import org.apache.camel.component.rest.openapi.validator.RestOpenApiOperation;
-import org.apache.camel.test.junit5.CamelTestSupport;
-import org.junit.jupiter.api.Test;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertInstanceOf;
-
-public class RestOpenApiCustomValidatorCustomizerTest extends CamelTestSupport 
{
-    @BindToRegistry("customCustomizer")
-    RequestValidationCustomizer customizer = new 
CustomRequestValidationCustomizer("Test validation error from endpoint");
-
-    @Test
-    void customValidatorCustomizerComponentOption() throws Exception {
-        Exchange exchange = 
template.request("direct:componentValidatorCustomizer", new Processor() {
-            @Override
-            public void process(Exchange exchange) throws Exception {
-                exchange.getMessage()
-                        
.setBody("{\"id\":10,\"name\":\"doggie\",\"photoUrls\":[\"https://test.photos.org/doggie.gif\"]}";);
-            }
-        });
-        Exception exception = exchange.getException();
-        assertInstanceOf(RestOpenApiValidationException.class, exception);
-
-        RestOpenApiValidationException validationException = 
(RestOpenApiValidationException) exception;
-        Set<String> validationErrors = 
validationException.getValidationErrors();
-        assertEquals(1, validationErrors.size());
-        assertEquals("Test validation error from component", 
validationErrors.iterator().next());
-    }
-
-    @Test
-    void customValidatorCustomizerEndpointOption() throws Exception {
-        Exchange exchange = 
template.request("direct:endpointValidatorCustomizer", new Processor() {
-            @Override
-            public void process(Exchange exchange) throws Exception {
-                exchange.getMessage()
-                        
.setBody("{\"id\":10,\"name\":\"doggie\",\"photoUrls\":[\"https://test.photos.org/doggie.gif\"]}";);
-            }
-        });
-        Exception exception = exchange.getException();
-        assertInstanceOf(RestOpenApiValidationException.class, exception);
-
-        RestOpenApiValidationException validationException = 
(RestOpenApiValidationException) exception;
-        Set<String> validationErrors = 
validationException.getValidationErrors();
-        assertEquals(1, validationErrors.size());
-        assertEquals("Test validation error from endpoint", 
validationErrors.iterator().next());
-    }
-
-    @Override
-    protected CamelContext createCamelContext() throws Exception {
-        CamelContext camelContext = super.createCamelContext();
-
-        RestOpenApiComponent component = new RestOpenApiComponent();
-        component.setComponentName("http");
-        component.setConsumes("application/json");
-        component.setProduces("application/json");
-        component.setSpecificationUri("classpath:openapi-v3.json");
-        component.setRequestValidationCustomizer(new 
CustomRequestValidationCustomizer("Test validation error from component"));
-        camelContext.addComponent("petStore", component);
-
-        return camelContext;
-    }
-
-    @Override
-    protected RoutesBuilder createRouteBuilder() throws Exception {
-        return new RouteBuilder() {
-            @Override
-            public void configure() throws Exception {
-                from("direct:componentValidatorCustomizer")
-                        .to("petStore:#addPet?requestValidationEnabled=true");
-
-                from("direct:endpointValidatorCustomizer")
-                        
.to("petStore:#addPet?requestValidationEnabled=true&requestValidationCustomizer=#customCustomizer");
-            }
-        };
-    }
-
-    static class CustomRequestValidationCustomizer implements 
RequestValidationCustomizer {
-        private final String message;
-
-        CustomRequestValidationCustomizer(String message) {
-            this.message = message;
-        }
-
-        @Override
-        public void 
customizeOpenApiInteractionValidator(OpenApiInteractionValidator.Builder 
builder) {
-            builder.withCustomRequestValidation(new CustomRequestValidator() {
-                @Override
-                public ValidationReport validate(@Nonnull Request request, 
@Nonnull ApiOperation apiOperation) {
-                    return 
ValidationReport.singleton((ValidationReport.Message.create("test.custom", 
message).build()));
-                }
-            });
-        }
-
-        @Override
-        public void customizeSimpleRequestBuilder(
-                SimpleRequest.Builder builder, RestOpenApiOperation 
openApiOperation, Exchange exchange) {
-            builder.withHeader("test", exchange.getMessage().getHeader("test", 
String.class));
-        }
-    }
-}
diff --git 
a/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/RestOpenApiRequestValidationTest.java
 
b/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/RestOpenApiRequestValidationTest.java
index 0ce95972885..35c6f11857f 100644
--- 
a/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/RestOpenApiRequestValidationTest.java
+++ 
b/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/RestOpenApiRequestValidationTest.java
@@ -24,7 +24,6 @@ import java.io.IOException;
 import java.net.HttpURLConnection;
 import java.nio.file.Files;
 import java.nio.file.Paths;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Objects;
@@ -186,18 +185,6 @@ public class RestOpenApiRequestValidationTest extends 
CamelTestSupport {
         assertEquals(10, createdPet.getId());
     }
 
-    @ParameterizedTest
-    @MethodSource("petStoreVersions")
-    void requestValidationWithCustomLevels(String petStoreVersion) {
-        Pet pet = new Pet();
-        pet.setId(10);
-        pet.setName("doggie");
-
-        Pet createdPet = template.requestBodyAndHeader("direct:customLevels", 
pet, "petStoreVersion", petStoreVersion,
-                Pet.class);
-        assertEquals(10, createdPet.getId());
-    }
-
     @ParameterizedTest
     @MethodSource("petStoreVersions")
     void requestValidationWithValidJsonBody(String petStoreVersion) {
@@ -211,30 +198,6 @@ public class RestOpenApiRequestValidationTest extends 
CamelTestSupport {
         assertEquals(10, createdPet.getId());
     }
 
-    @ParameterizedTest
-    @MethodSource("petStoreVersions")
-    void requestValidationWithJsonBodyAndMissingMandatoryFields(String 
petStoreVersion) {
-        Pet pet = new Pet();
-        pet.setName(null);
-
-        Exchange exchange = template.request("direct:validateJsonBody", new 
Processor() {
-            @Override
-            public void process(Exchange exchange) throws Exception {
-                exchange.getMessage().setHeader("petStoreVersion", 
petStoreVersion);
-                exchange.getMessage().setBody(pet);
-            }
-        });
-
-        Exception exception = exchange.getException();
-        assertNotNull(exception);
-        assertInstanceOf(RestOpenApiValidationException.class, exception);
-
-        RestOpenApiValidationException validationException = 
(RestOpenApiValidationException) exception;
-        Set<String> errors = validationException.getValidationErrors();
-        assertEquals(1, errors.size());
-        assertEquals("Object has missing required properties 
([\"name\",\"photoUrls\"])", errors.iterator().next());
-    }
-
     @ParameterizedTest
     @MethodSource("petStoreVersions")
     void requestValidationWithBadlyFormedJsonBody(String petStoreVersion) {
@@ -318,7 +281,7 @@ public class RestOpenApiRequestValidationTest extends 
CamelTestSupport {
 
         String errorMessage = errors.iterator().next();
         assertTrue(
-                errorMessage.startsWith("Request Content-Type header 
'[application/camel]' does not match any allowed types"));
+                errorMessage.startsWith("Request Content-Type header 
'application/camel' does not match any allowed types"));
     }
 
     @ParameterizedTest
@@ -360,8 +323,6 @@ public class RestOpenApiRequestValidationTest extends 
CamelTestSupport {
         RestOpenApiEndpoint endpoint = context.getEndpoint(petStoreVersion + 
":#addPet", RestOpenApiEndpoint.class);
         endpoint.createProducer();
         assertFalse(endpoint.isRequestValidationEnabled());
-        assertNotNull(endpoint.getRequestValidationCustomizer());
-        assertTrue(endpoint.getRequestValidationLevels().isEmpty());
     }
 
     @ParameterizedTest
@@ -408,32 +369,6 @@ public class RestOpenApiRequestValidationTest extends 
CamelTestSupport {
         assertEquals("Fruit deleted", result);
     }
 
-    @ParameterizedTest
-    @MethodSource("fruitsApiVersions")
-    void requestValidationRequiredFormParamsNotPresent(String 
fruitsApiVersion) {
-        Exchange exchange = template.request("direct:formParam", new 
Processor() {
-            @Override
-            public void process(Exchange exchange) throws Exception {
-                exchange.getMessage().setHeader("fruitsApiVersion", 
fruitsApiVersion);
-                exchange.getMessage().setBody("name=&color=");
-            }
-        });
-
-        Exception exception = exchange.getException();
-        assertNotNull(exception);
-        assertInstanceOf(RestOpenApiValidationException.class, exception);
-
-        RestOpenApiValidationException validationException = 
(RestOpenApiValidationException) exception;
-        Set<String> errors = validationException.getValidationErrors();
-        // [Path '/name'] Instance type (null) does not match any allowed 
primitive type string
-        assertEquals(2, errors.size());
-        Iterator<String> iterator = errors.iterator();
-        assertEquals("[Path '/color'] Instance type (null) does not match any 
allowed primitive type (allowed: [\"string\"])",
-                iterator.next());
-        assertEquals("[Path '/name'] Instance type (null) does not match any 
allowed primitive type (allowed: [\"string\"])",
-                iterator.next());
-    }
-
     @ParameterizedTest
     @MethodSource("fruitsApiVersions")
     void requestValidationRequiredFormParamsPresent(String fruitsApiVersion) {
@@ -528,11 +463,6 @@ public class RestOpenApiRequestValidationTest extends 
CamelTestSupport {
                         
.toD("${header.petStoreVersion}:uploadFile?requestValidationEnabled=true&produces=application/octet-stream")
                         .unmarshal(jacksonDataFormat);
 
-                from("direct:customLevels")
-                        .marshal(jacksonDataFormat)
-                        
.toD("${header.petStoreVersion}:#addPet?requestValidationEnabled=true&validation.request.body=IGNORE")
-                        .unmarshal(jacksonDataFormat);
-
                 from("direct:headerParam")
                         
.toD("${header.fruitsApiVersion}:#deleteFruit?requestValidationEnabled=true");
 
diff --git 
a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_6.adoc 
b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_6.adoc
index 66a180424a1..beac75eedf9 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_6.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_6.adoc
@@ -28,6 +28,10 @@ The class 
`org.apache.camel.component.es.aggregation.ElastichsearchBulkRequestAg
 The `specifciationUri` in the `rest-api` component has changed from being a 
`java.net.URI` to a `String` type
 , as it uses Camels `ResourceLoader` to load from pluggable resources and also 
more tooling friendly.
 
+The validator using Atlassian `swagger-request-validator` JAR has been 
removed, as this library is not JakartaEE compatible,
+and was causing classloading problems. The validator is now using similar 
validation as Rest DSL. However, the validator
+no longer check for JSon payloads if any required nodes is missing.
+
 === camel-langchain4j-chat
 
 The Camel Langchain4j Chat component name has been changed from 
`camel-langchain-chat`to `camel-langchain4j-chat` to adhere to the standardized 
naming conventions within the LangChain4j ecosystem.
diff --git 
a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/RestOpenapiComponentBuilderFactory.java
 
b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/RestOpenapiComponentBuilderFactory.java
index 8af8ff7d58e..86525023dd1 100644
--- 
a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/RestOpenapiComponentBuilderFactory.java
+++ 
b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/RestOpenapiComponentBuilderFactory.java
@@ -88,24 +88,6 @@ public interface RestOpenapiComponentBuilderFactory {
             doSetProperty("specificationUri", specificationUri);
             return this;
         }
-        /**
-         * If request validation is enabled, this option provides the 
capability
-         * to customize the creation of OpenApiInteractionValidator used to
-         * validate requests.
-         * 
-         * The option is a:
-         * 
&lt;code&gt;org.apache.camel.component.rest.openapi.validator.RequestValidationCustomizer&lt;/code&gt;
 type.
-         * 
-         * Group: common (advanced)
-         * 
-         * @param requestValidationCustomizer the value to set
-         * @return the dsl builder
-         */
-        default RestOpenapiComponentBuilder requestValidationCustomizer(
-                
org.apache.camel.component.rest.openapi.validator.RequestValidationCustomizer 
requestValidationCustomizer) {
-            doSetProperty("requestValidationCustomizer", 
requestValidationCustomizer);
-            return this;
-        }
         /**
          * Sets the context-path to use for servicing the OpenAPI 
specification.
          * 
@@ -426,7 +408,6 @@ public interface RestOpenapiComponentBuilderFactory {
             switch (name) {
             case "basePath": ((RestOpenApiComponent) 
component).setBasePath((java.lang.String) value); return true;
             case "specificationUri": ((RestOpenApiComponent) 
component).setSpecificationUri((java.lang.String) value); return true;
-            case "requestValidationCustomizer": ((RestOpenApiComponent) 
component).setRequestValidationCustomizer((org.apache.camel.component.rest.openapi.validator.RequestValidationCustomizer)
 value); return true;
             case "apiContextPath": ((RestOpenApiComponent) 
component).setApiContextPath((java.lang.String) value); return true;
             case "bridgeErrorHandler": ((RestOpenApiComponent) 
component).setBridgeErrorHandler((boolean) value); return true;
             case "missingOperation": ((RestOpenApiComponent) 
component).setMissingOperation((java.lang.String) value); return true;
diff --git 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/RestOpenApiEndpointBuilderFactory.java
 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/RestOpenApiEndpointBuilderFactory.java
index 4b1bf3a9a06..423af987aeb 100644
--- 
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/RestOpenApiEndpointBuilderFactory.java
+++ 
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/RestOpenApiEndpointBuilderFactory.java
@@ -17,7 +17,6 @@
 package org.apache.camel.builder.endpoint.dsl;
 
 import java.util.*;
-import java.util.Map;
 import java.util.concurrent.*;
 import java.util.function.*;
 import java.util.stream.*;
@@ -316,88 +315,6 @@ public interface RestOpenApiEndpointBuilderFactory {
             doSetProperty("restOpenapiProcessorStrategy", 
restOpenapiProcessorStrategy);
             return this;
         }
-        /**
-         * If request validation is enabled, this option provides the 
capability
-         * to customize the creation of OpenApiInteractionValidator used to
-         * validate requests.
-         * 
-         * The option is a:
-         * 
&lt;code&gt;org.apache.camel.component.rest.openapi.validator.RequestValidationCustomizer&lt;/code&gt;
 type.
-         * 
-         * Group: advanced
-         * 
-         * @param requestValidationCustomizer the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRestOpenApiEndpointConsumerBuilder 
requestValidationCustomizer(
-                
org.apache.camel.component.rest.openapi.validator.RequestValidationCustomizer 
requestValidationCustomizer) {
-            doSetProperty("requestValidationCustomizer", 
requestValidationCustomizer);
-            return this;
-        }
-        /**
-         * If request validation is enabled, this option provides the 
capability
-         * to customize the creation of OpenApiInteractionValidator used to
-         * validate requests.
-         * 
-         * The option will be converted to a
-         * 
&lt;code&gt;org.apache.camel.component.rest.openapi.validator.RequestValidationCustomizer&lt;/code&gt;
 type.
-         * 
-         * Group: advanced
-         * 
-         * @param requestValidationCustomizer the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRestOpenApiEndpointConsumerBuilder 
requestValidationCustomizer(
-                String requestValidationCustomizer) {
-            doSetProperty("requestValidationCustomizer", 
requestValidationCustomizer);
-            return this;
-        }
-        /**
-         * Levels for specific OpenAPI request validation options. Multiple
-         * options can be specified as URI options prefixed by 'validation.'.
-         * For example,
-         * 
validation.request.body=ERROR&amp;amp;validation.request.body.unexpected=IGNORED.
 Supported values are INFO, ERROR, WARN &amp;amp; IGNORE.
-         * 
-         * The option is a: &lt;code&gt;java.util.Map&amp;lt;java.lang.String,
-         * java.lang.Object&amp;gt;&lt;/code&gt; type.
-         * The option is multivalued, and you can use the
-         * requestValidationLevels(String, Object) method to add a value (call
-         * the method multiple times to set more values).
-         * 
-         * Group: advanced
-         * 
-         * @param key the option key
-         * @param value the option value
-         * @return the dsl builder
-         */
-        default AdvancedRestOpenApiEndpointConsumerBuilder 
requestValidationLevels(
-                String key,
-                Object value) {
-            doSetMultiValueProperty("requestValidationLevels", "validation." + 
key, value);
-            return this;
-        }
-        /**
-         * Levels for specific OpenAPI request validation options. Multiple
-         * options can be specified as URI options prefixed by 'validation.'.
-         * For example,
-         * 
validation.request.body=ERROR&amp;amp;validation.request.body.unexpected=IGNORED.
 Supported values are INFO, ERROR, WARN &amp;amp; IGNORE.
-         * 
-         * The option is a: &lt;code&gt;java.util.Map&amp;lt;java.lang.String,
-         * java.lang.Object&amp;gt;&lt;/code&gt; type.
-         * The option is multivalued, and you can use the
-         * requestValidationLevels(String, Object) method to add a value (call
-         * the method multiple times to set more values).
-         * 
-         * Group: advanced
-         * 
-         * @param values the values
-         * @return the dsl builder
-         */
-        default AdvancedRestOpenApiEndpointConsumerBuilder 
requestValidationLevels(
-                Map values) {
-            doSetMultiValueProperties("requestValidationLevels", 
"validation.", values);
-            return this;
-        }
     }
 
     /**
@@ -629,88 +546,6 @@ public interface RestOpenApiEndpointBuilderFactory {
             doSetProperty("lazyStartProducer", lazyStartProducer);
             return this;
         }
-        /**
-         * If request validation is enabled, this option provides the 
capability
-         * to customize the creation of OpenApiInteractionValidator used to
-         * validate requests.
-         * 
-         * The option is a:
-         * 
&lt;code&gt;org.apache.camel.component.rest.openapi.validator.RequestValidationCustomizer&lt;/code&gt;
 type.
-         * 
-         * Group: advanced
-         * 
-         * @param requestValidationCustomizer the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRestOpenApiEndpointProducerBuilder 
requestValidationCustomizer(
-                
org.apache.camel.component.rest.openapi.validator.RequestValidationCustomizer 
requestValidationCustomizer) {
-            doSetProperty("requestValidationCustomizer", 
requestValidationCustomizer);
-            return this;
-        }
-        /**
-         * If request validation is enabled, this option provides the 
capability
-         * to customize the creation of OpenApiInteractionValidator used to
-         * validate requests.
-         * 
-         * The option will be converted to a
-         * 
&lt;code&gt;org.apache.camel.component.rest.openapi.validator.RequestValidationCustomizer&lt;/code&gt;
 type.
-         * 
-         * Group: advanced
-         * 
-         * @param requestValidationCustomizer the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRestOpenApiEndpointProducerBuilder 
requestValidationCustomizer(
-                String requestValidationCustomizer) {
-            doSetProperty("requestValidationCustomizer", 
requestValidationCustomizer);
-            return this;
-        }
-        /**
-         * Levels for specific OpenAPI request validation options. Multiple
-         * options can be specified as URI options prefixed by 'validation.'.
-         * For example,
-         * 
validation.request.body=ERROR&amp;amp;validation.request.body.unexpected=IGNORED.
 Supported values are INFO, ERROR, WARN &amp;amp; IGNORE.
-         * 
-         * The option is a: &lt;code&gt;java.util.Map&amp;lt;java.lang.String,
-         * java.lang.Object&amp;gt;&lt;/code&gt; type.
-         * The option is multivalued, and you can use the
-         * requestValidationLevels(String, Object) method to add a value (call
-         * the method multiple times to set more values).
-         * 
-         * Group: advanced
-         * 
-         * @param key the option key
-         * @param value the option value
-         * @return the dsl builder
-         */
-        default AdvancedRestOpenApiEndpointProducerBuilder 
requestValidationLevels(
-                String key,
-                Object value) {
-            doSetMultiValueProperty("requestValidationLevels", "validation." + 
key, value);
-            return this;
-        }
-        /**
-         * Levels for specific OpenAPI request validation options. Multiple
-         * options can be specified as URI options prefixed by 'validation.'.
-         * For example,
-         * 
validation.request.body=ERROR&amp;amp;validation.request.body.unexpected=IGNORED.
 Supported values are INFO, ERROR, WARN &amp;amp; IGNORE.
-         * 
-         * The option is a: &lt;code&gt;java.util.Map&amp;lt;java.lang.String,
-         * java.lang.Object&amp;gt;&lt;/code&gt; type.
-         * The option is multivalued, and you can use the
-         * requestValidationLevels(String, Object) method to add a value (call
-         * the method multiple times to set more values).
-         * 
-         * Group: advanced
-         * 
-         * @param values the values
-         * @return the dsl builder
-         */
-        default AdvancedRestOpenApiEndpointProducerBuilder 
requestValidationLevels(
-                Map values) {
-            doSetMultiValueProperties("requestValidationLevels", 
"validation.", values);
-            return this;
-        }
     }
 
     /**
@@ -770,88 +605,6 @@ public interface RestOpenApiEndpointBuilderFactory {
         default RestOpenApiEndpointBuilder basic() {
             return (RestOpenApiEndpointBuilder) this;
         }
-        /**
-         * If request validation is enabled, this option provides the 
capability
-         * to customize the creation of OpenApiInteractionValidator used to
-         * validate requests.
-         * 
-         * The option is a:
-         * 
&lt;code&gt;org.apache.camel.component.rest.openapi.validator.RequestValidationCustomizer&lt;/code&gt;
 type.
-         * 
-         * Group: advanced
-         * 
-         * @param requestValidationCustomizer the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRestOpenApiEndpointBuilder requestValidationCustomizer(
-                
org.apache.camel.component.rest.openapi.validator.RequestValidationCustomizer 
requestValidationCustomizer) {
-            doSetProperty("requestValidationCustomizer", 
requestValidationCustomizer);
-            return this;
-        }
-        /**
-         * If request validation is enabled, this option provides the 
capability
-         * to customize the creation of OpenApiInteractionValidator used to
-         * validate requests.
-         * 
-         * The option will be converted to a
-         * 
&lt;code&gt;org.apache.camel.component.rest.openapi.validator.RequestValidationCustomizer&lt;/code&gt;
 type.
-         * 
-         * Group: advanced
-         * 
-         * @param requestValidationCustomizer the value to set
-         * @return the dsl builder
-         */
-        default AdvancedRestOpenApiEndpointBuilder requestValidationCustomizer(
-                String requestValidationCustomizer) {
-            doSetProperty("requestValidationCustomizer", 
requestValidationCustomizer);
-            return this;
-        }
-        /**
-         * Levels for specific OpenAPI request validation options. Multiple
-         * options can be specified as URI options prefixed by 'validation.'.
-         * For example,
-         * 
validation.request.body=ERROR&amp;amp;validation.request.body.unexpected=IGNORED.
 Supported values are INFO, ERROR, WARN &amp;amp; IGNORE.
-         * 
-         * The option is a: &lt;code&gt;java.util.Map&amp;lt;java.lang.String,
-         * java.lang.Object&amp;gt;&lt;/code&gt; type.
-         * The option is multivalued, and you can use the
-         * requestValidationLevels(String, Object) method to add a value (call
-         * the method multiple times to set more values).
-         * 
-         * Group: advanced
-         * 
-         * @param key the option key
-         * @param value the option value
-         * @return the dsl builder
-         */
-        default AdvancedRestOpenApiEndpointBuilder requestValidationLevels(
-                String key,
-                Object value) {
-            doSetMultiValueProperty("requestValidationLevels", "validation." + 
key, value);
-            return this;
-        }
-        /**
-         * Levels for specific OpenAPI request validation options. Multiple
-         * options can be specified as URI options prefixed by 'validation.'.
-         * For example,
-         * 
validation.request.body=ERROR&amp;amp;validation.request.body.unexpected=IGNORED.
 Supported values are INFO, ERROR, WARN &amp;amp; IGNORE.
-         * 
-         * The option is a: &lt;code&gt;java.util.Map&amp;lt;java.lang.String,
-         * java.lang.Object&amp;gt;&lt;/code&gt; type.
-         * The option is multivalued, and you can use the
-         * requestValidationLevels(String, Object) method to add a value (call
-         * the method multiple times to set more values).
-         * 
-         * Group: advanced
-         * 
-         * @param values the values
-         * @return the dsl builder
-         */
-        default AdvancedRestOpenApiEndpointBuilder requestValidationLevels(
-                Map values) {
-            doSetMultiValueProperties("requestValidationLevels", 
"validation.", values);
-            return this;
-        }
     }
 
     public interface RestOpenApiBuilders {
diff --git 
a/dsl/camel-kotlin-api/src/generated/kotlin/org/apache/camel/kotlin/components/RestOpenapiUriDsl.kt
 
b/dsl/camel-kotlin-api/src/generated/kotlin/org/apache/camel/kotlin/components/RestOpenapiUriDsl.kt
index 606f3bc4a12..d45cf93b1c6 100644
--- 
a/dsl/camel-kotlin-api/src/generated/kotlin/org/apache/camel/kotlin/components/RestOpenapiUriDsl.kt
+++ 
b/dsl/camel-kotlin-api/src/generated/kotlin/org/apache/camel/kotlin/components/RestOpenapiUriDsl.kt
@@ -241,24 +241,6 @@ public class RestOpenapiUriDsl(
     it.property("lazyStartProducer", lazyStartProducer.toString())
   }
 
-  /**
-   * If request validation is enabled, this option provides the capability to 
customize the creation
-   * of OpenApiInteractionValidator used to validate requests.
-   */
-  public fun requestValidationCustomizer(requestValidationCustomizer: String) {
-    it.property("requestValidationCustomizer", requestValidationCustomizer)
-  }
-
-  /**
-   * Levels for specific OpenAPI request validation options. Multiple options 
can be specified as
-   * URI options prefixed by 'validation.'. For example,
-   * validation.request.body=ERROR&validation.request.body.unexpected=IGNORED. 
Supported values are
-   * INFO, ERROR, WARN & IGNORE.
-   */
-  public fun requestValidationLevels(requestValidationLevels: String) {
-    it.property("requestValidationLevels", requestValidationLevels)
-  }
-
   /**
    * Whether to enable validation of the client request to check if the 
incoming request is valid
    * according to the OpenAPI specification
diff --git a/parent/pom.xml b/parent/pom.xml
index 04e5d0661f5..c75909aac03 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -453,7 +453,6 @@
         <swagger-openapi3-version>2.2.21</swagger-openapi3-version>
         <swagger-java-parser-version>1.0.65</swagger-java-parser-version>
         
<swagger-openapi3-java-parser-version>2.1.21</swagger-openapi3-java-parser-version>
-        
<swagger-request-validator-version>2.40.0</swagger-request-validator-version>
         <stax-api-version>1.0.1</stax-api-version>
         <stringtemplate-version>4.3.4</stringtemplate-version>
         <testcontainers-version>1.19.7</testcontainers-version>

Reply via email to