You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2024/03/30 11:42:58 UTC

(camel) branch main updated: rest-openapi - validator for producer (#13666)

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 <cl...@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>