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

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

commit fd338e087360564a40213b61d478ea565a0c52a3
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Mon Mar 25 09:39:32 2024 +0100

    CAMEL-20557: Rest DSL to use openapi spec directly
---
 .../camel/catalog/components/rest-openapi.json     |  40 ++++----
 .../openapi/RestOpenApiComponentConfigurer.java    |   6 ++
 .../openapi/RestOpenApiEndpointConfigurer.java     |   6 ++
 .../openapi/RestOpenApiEndpointUriFactory.java     |   3 +-
 .../camel/component/rest/openapi/rest-openapi.json |  40 ++++----
 .../DefaultRestOpenapiProcessorStrategy.java       |  18 +++-
 .../rest/openapi/RestOpenApiComponent.java         |  11 +++
 .../rest/openapi/RestOpenApiEndpoint.java          |  18 ++--
 .../rest/openapi/RestOpenapiProcessorStrategy.java |  15 +++
 .../dsl/RestOpenapiComponentBuilderFactory.java    | 102 +++++++++++++++++----
 .../src/generated/resources/metadata.json          |   2 +-
 .../dsl/RestOpenApiEndpointBuilderFactory.java     |  32 +++++++
 .../camel/kotlin/components/RestOpenapiUriDsl.kt   |   7 ++
 13 files changed, 234 insertions(+), 66 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 0c3036935d0..22998ee020e 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
@@ -26,17 +26,18 @@
     "requestValidationEnabled": { "index": 0, "kind": "property", 
"displayName": "Request Validation Enabled", "group": "common", "label": "", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": false, 
"description": "Enable validation of requests against the configured OpenAPI 
specification" },
     "bridgeErrorHandler": { "index": 1, "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 [...]
     "consumerComponentName": { "index": 2, "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 [...]
-    "basePath": { "index": 3, "kind": "property", "displayName": "Base Path", 
"group": "producer", "label": "producer", "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." },
-    "host": { "index": 4, "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": 5, "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 [...]
-    "specificationUri": { "index": 6, "kind": "property", "displayName": 
"Specification Uri", "group": "producer", "label": "producer", "required": 
false, "type": "string", "javaType": "java.net.URI", "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  [...]
-    "componentName": { "index": 7, "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": 8, "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 val [...]
-    "produces": { "index": 9, "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 sp [...]
-    "autowiredEnabled": { "index": 10, "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  [...]
-    "requestValidationCustomizer": { "index": 11, "kind": "property", 
"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 u [...]
-    "sslContextParameters": { "index": 12, "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": 13, "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." }
+    "restOpenapiProcessorStrategy": { "index": 3, "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" },
+    "basePath": { "index": 4, "kind": "property", "displayName": "Base Path", 
"group": "producer", "label": "producer", "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." },
+    "host": { "index": 5, "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": 6, "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 [...]
+    "specificationUri": { "index": 7, "kind": "property", "displayName": 
"Specification Uri", "group": "producer", "label": "producer", "required": 
false, "type": "string", "javaType": "java.net.URI", "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  [...]
+    "componentName": { "index": 8, "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": 9, "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 val [...]
+    "produces": { "index": 10, "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": 11, "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  [...]
+    "requestValidationCustomizer": { "index": 12, "kind": "property", 
"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 u [...]
+    "sslContextParameters": { "index": 13, "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": 14, "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.net.URI", "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 give [...]
@@ -46,13 +47,14 @@
     "consumerComponentName": { "index": 4, "kind": "parameter", "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 interfa [...]
     "exceptionHandler": { "index": 5, "kind": "parameter", "displayName": 
"Exception Handler", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.", 
"deprecated": false, "autowired": false, "secret": false, "description": "To 
let the consumer use a custom ExceptionHandler. Notice if the option 
bridgeErrorHandler is enabled then this option is not in use. By def [...]
     "exchangePattern": { "index": 6, "kind": "parameter", "displayName": 
"Exchange Pattern", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut" ], 
"deprecated": false, "autowired": false, "secret": false, "description": "Sets 
the exchange pattern when the consumer creates an exchange." },
-    "basePath": { "index": 7, "kind": "parameter", "displayName": "Base Path", 
"group": "producer", "label": "producer", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "API basePath, for example \/v3. Default is 
unset, if set overrides the value present in OpenApi specification and in the 
component configuration." },
-    "consumes": { "index": 8, "kind": "parameter", "displayName": "Consumes", 
"group": "producer", "label": "producer", "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 value of Accept HTTP h [...]
-    "host": { "index": 9, "kind": "parameter", "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 na [...]
-    "produces": { "index": 10, "kind": "parameter", "displayName": "Produces", 
"group": "producer", "label": "producer", "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 specification. Overr [...]
-    "componentName": { "index": 11, "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": 12, "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": 13, "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": 14, "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 ' [...]
+    "restOpenapiProcessorStrategy": { "index": 7, "kind": "parameter", 
"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" },
+    "basePath": { "index": 8, "kind": "parameter", "displayName": "Base Path", 
"group": "producer", "label": "producer", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "API basePath, for example \/v3. Default is 
unset, if set overrides the value present in OpenApi specification and in the 
component configuration." },
+    "consumes": { "index": 9, "kind": "parameter", "displayName": "Consumes", 
"group": "producer", "label": "producer", "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 value of Accept HTTP h [...]
+    "host": { "index": 10, "kind": "parameter", "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 n [...]
+    "produces": { "index": 11, "kind": "parameter", "displayName": "Produces", 
"group": "producer", "label": "producer", "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 specification. Overr [...]
+    "componentName": { "index": 12, "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": 13, "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": 14, "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": 15, "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 ' [...]
   }
 }
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 ba22d771a42..89b6cc3ccc6 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
@@ -40,6 +40,8 @@ public class RestOpenApiComponentConfigurer extends 
PropertyConfigurerSupport im
         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":
+        case "restOpenapiProcessorStrategy": 
target.setRestOpenapiProcessorStrategy(property(camelContext, 
org.apache.camel.component.rest.openapi.RestOpenapiProcessorStrategy.class, 
value)); return true;
         case "specificationuri":
         case "specificationUri": 
target.setSpecificationUri(property(camelContext, java.net.URI.class, value)); 
return true;
         case "sslcontextparameters":
@@ -72,6 +74,8 @@ public class RestOpenApiComponentConfigurer extends 
PropertyConfigurerSupport im
         case "requestValidationCustomizer": return 
org.apache.camel.component.rest.openapi.validator.RequestValidationCustomizer.class;
         case "requestvalidationenabled":
         case "requestValidationEnabled": return boolean.class;
+        case "restopenapiprocessorstrategy":
+        case "restOpenapiProcessorStrategy": return 
org.apache.camel.component.rest.openapi.RestOpenapiProcessorStrategy.class;
         case "specificationuri":
         case "specificationUri": return java.net.URI.class;
         case "sslcontextparameters":
@@ -105,6 +109,8 @@ public class RestOpenApiComponentConfigurer extends 
PropertyConfigurerSupport im
         case "requestValidationCustomizer": return 
target.getRequestValidationCustomizer();
         case "requestvalidationenabled":
         case "requestValidationEnabled": return 
target.isRequestValidationEnabled();
+        case "restopenapiprocessorstrategy":
+        case "restOpenapiProcessorStrategy": return 
target.getRestOpenapiProcessorStrategy();
         case "specificationuri":
         case "specificationUri": return target.getSpecificationUri();
         case "sslcontextparameters":
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 3c8adaec8e9..7877105d046 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
@@ -44,6 +44,8 @@ public class RestOpenApiEndpointConfigurer extends 
PropertyConfigurerSupport imp
         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;
         }
     }
@@ -74,6 +76,8 @@ public class RestOpenApiEndpointConfigurer extends 
PropertyConfigurerSupport imp
         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;
         }
     }
@@ -105,6 +109,8 @@ public class RestOpenApiEndpointConfigurer extends 
PropertyConfigurerSupport imp
         case "requestValidationEnabled": return 
target.isRequestValidationEnabled();
         case "requestvalidationlevels":
         case "requestValidationLevels": return 
target.getRequestValidationLevels();
+        case "restopenapiprocessorstrategy":
+        case "restOpenapiProcessorStrategy": return 
target.getRestOpenapiProcessorStrategy();
         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 8cf0fd1124f..1117c2366cf 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<>(15);
+        Set<String> props = new HashSet<>(16);
         props.add("basePath");
         props.add("bridgeErrorHandler");
         props.add("componentName");
@@ -36,6 +36,7 @@ public class RestOpenApiEndpointUriFactory extends 
org.apache.camel.support.comp
         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();
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 0c3036935d0..22998ee020e 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
@@ -26,17 +26,18 @@
     "requestValidationEnabled": { "index": 0, "kind": "property", 
"displayName": "Request Validation Enabled", "group": "common", "label": "", 
"required": false, "type": "boolean", "javaType": "boolean", "deprecated": 
false, "autowired": false, "secret": false, "defaultValue": false, 
"description": "Enable validation of requests against the configured OpenAPI 
specification" },
     "bridgeErrorHandler": { "index": 1, "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 [...]
     "consumerComponentName": { "index": 2, "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 [...]
-    "basePath": { "index": 3, "kind": "property", "displayName": "Base Path", 
"group": "producer", "label": "producer", "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." },
-    "host": { "index": 4, "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": 5, "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 [...]
-    "specificationUri": { "index": 6, "kind": "property", "displayName": 
"Specification Uri", "group": "producer", "label": "producer", "required": 
false, "type": "string", "javaType": "java.net.URI", "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  [...]
-    "componentName": { "index": 7, "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": 8, "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 val [...]
-    "produces": { "index": 9, "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 sp [...]
-    "autowiredEnabled": { "index": 10, "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  [...]
-    "requestValidationCustomizer": { "index": 11, "kind": "property", 
"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 u [...]
-    "sslContextParameters": { "index": 12, "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": 13, "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." }
+    "restOpenapiProcessorStrategy": { "index": 3, "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" },
+    "basePath": { "index": 4, "kind": "property", "displayName": "Base Path", 
"group": "producer", "label": "producer", "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." },
+    "host": { "index": 5, "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": 6, "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 [...]
+    "specificationUri": { "index": 7, "kind": "property", "displayName": 
"Specification Uri", "group": "producer", "label": "producer", "required": 
false, "type": "string", "javaType": "java.net.URI", "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  [...]
+    "componentName": { "index": 8, "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": 9, "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 val [...]
+    "produces": { "index": 10, "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": 11, "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  [...]
+    "requestValidationCustomizer": { "index": 12, "kind": "property", 
"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 u [...]
+    "sslContextParameters": { "index": 13, "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": 14, "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.net.URI", "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 give [...]
@@ -46,13 +47,14 @@
     "consumerComponentName": { "index": 4, "kind": "parameter", "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 interfa [...]
     "exceptionHandler": { "index": 5, "kind": "parameter", "displayName": 
"Exception Handler", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.spi.ExceptionHandler", "optionalPrefix": "consumer.", 
"deprecated": false, "autowired": false, "secret": false, "description": "To 
let the consumer use a custom ExceptionHandler. Notice if the option 
bridgeErrorHandler is enabled then this option is not in use. By def [...]
     "exchangePattern": { "index": 6, "kind": "parameter", "displayName": 
"Exchange Pattern", "group": "consumer (advanced)", "label": 
"consumer,advanced", "required": false, "type": "object", "javaType": 
"org.apache.camel.ExchangePattern", "enum": [ "InOnly", "InOut" ], 
"deprecated": false, "autowired": false, "secret": false, "description": "Sets 
the exchange pattern when the consumer creates an exchange." },
-    "basePath": { "index": 7, "kind": "parameter", "displayName": "Base Path", 
"group": "producer", "label": "producer", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "API basePath, for example \/v3. Default is 
unset, if set overrides the value present in OpenApi specification and in the 
component configuration." },
-    "consumes": { "index": 8, "kind": "parameter", "displayName": "Consumes", 
"group": "producer", "label": "producer", "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 value of Accept HTTP h [...]
-    "host": { "index": 9, "kind": "parameter", "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 na [...]
-    "produces": { "index": 10, "kind": "parameter", "displayName": "Produces", 
"group": "producer", "label": "producer", "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 specification. Overr [...]
-    "componentName": { "index": 11, "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": 12, "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": 13, "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": 14, "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 ' [...]
+    "restOpenapiProcessorStrategy": { "index": 7, "kind": "parameter", 
"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" },
+    "basePath": { "index": 8, "kind": "parameter", "displayName": "Base Path", 
"group": "producer", "label": "producer", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "API basePath, for example \/v3. Default is 
unset, if set overrides the value present in OpenApi specification and in the 
component configuration." },
+    "consumes": { "index": 9, "kind": "parameter", "displayName": "Consumes", 
"group": "producer", "label": "producer", "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 value of Accept HTTP h [...]
+    "host": { "index": 10, "kind": "parameter", "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 n [...]
+    "produces": { "index": 11, "kind": "parameter", "displayName": "Produces", 
"group": "producer", "label": "producer", "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 specification. Overr [...]
+    "componentName": { "index": 12, "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": 13, "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": 14, "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": 15, "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 ' [...]
   }
 }
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 965b9625519..b46795d5a46 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
@@ -29,15 +29,19 @@ import org.apache.camel.support.cache.DefaultProducerCache;
 import org.apache.camel.support.service.ServiceHelper;
 import org.apache.camel.support.service.ServiceSupport;
 
+/**
+ * Default {@link RestOpenapiProcessorStrategy} that links the Rest DSL to 
routes called via direct:operationId.
+ */
 public class DefaultRestOpenapiProcessorStrategy extends ServiceSupport
         implements RestOpenapiProcessorStrategy, CamelContextAware, 
NonManagedService {
 
     private CamelContext camelContext;
     private ProducerCache producerCache;
+    private String component = "direct";
 
     @Override
     public boolean process(Operation operation, String path, Exchange 
exchange, AsyncCallback callback) {
-        Endpoint e = camelContext.getEndpoint("direct:" + 
operation.getOperationId());
+        Endpoint e = camelContext.getEndpoint(component + ":" + 
operation.getOperationId());
         AsyncProducer p = producerCache.acquireProducer(e);
         return p.process(exchange, doneSync -> {
             try {
@@ -58,9 +62,19 @@ public class DefaultRestOpenapiProcessorStrategy extends 
ServiceSupport
         this.camelContext = camelContext;
     }
 
+    public String getComponent() {
+        return component;
+    }
+
+    /**
+     * Name of component to use for processing the Rest DSL requests.
+     */
+    public void setComponent(String component) {
+        this.component = component;
+    }
+
     @Override
     protected void doInit() throws Exception {
-        // TODO: non-managed
         producerCache = new DefaultProducerCache(this, getCamelContext(), 
1000);
         ServiceHelper.initService(producerCache);
     }
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 019a40cae78..eef794e5371 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
@@ -139,6 +139,8 @@ public final class RestOpenApiComponent extends 
DefaultComponent implements SSLC
     @Metadata(description = "Customize TLS parameters used by the component. 
If not set defaults to the TLS parameters set in the Camel context ",
               label = "security")
     private SSLContextParameters sslContextParameters;
+    @Metadata(description = "To use a custom strategy for how to process Rest 
DSL requests", label = "consumer,advanced")
+    private RestOpenapiProcessorStrategy restOpenapiProcessorStrategy = new 
DefaultRestOpenapiProcessorStrategy();
 
     public RestOpenApiComponent() {
     }
@@ -154,6 +156,7 @@ public final class RestOpenApiComponent extends 
DefaultComponent implements SSLC
         
endpoint.setRequestValidationCustomizer(getRequestValidationCustomizer());
         endpoint.setRequestValidationEnabled(isRequestValidationEnabled());
         
endpoint.setRequestValidationLevels(PropertiesHelper.extractProperties(parameters,
 "validation."));
+        
endpoint.setRestOpenapiProcessorStrategy(getRestOpenapiProcessorStrategy());
         setProperties(endpoint, parameters);
         return endpoint;
     }
@@ -195,6 +198,14 @@ public final class RestOpenApiComponent extends 
DefaultComponent implements SSLC
         return useGlobalSslContextParameters;
     }
 
+    public RestOpenapiProcessorStrategy getRestOpenapiProcessorStrategy() {
+        return restOpenapiProcessorStrategy;
+    }
+
+    public void setRestOpenapiProcessorStrategy(RestOpenapiProcessorStrategy 
restOpenapiProcessorStrategy) {
+        this.restOpenapiProcessorStrategy = restOpenapiProcessorStrategy;
+    }
+
     public void setBasePath(final String basePath) {
         this.basePath = notEmpty(basePath, "basePath");
     }
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 c6b8eca82f9..21fde6f5618 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
@@ -82,13 +82,10 @@ import org.apache.commons.io.FileUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static java.util.Optional.ofNullable;
 import static 
org.apache.camel.component.rest.openapi.RestOpenApiHelper.isHostParam;
 import static org.apache.camel.util.ObjectHelper.isNotEmpty;
-import static org.apache.camel.util.ObjectHelper.notNull;
 import static org.apache.camel.util.StringHelper.after;
 import static org.apache.camel.util.StringHelper.before;
-import static org.apache.camel.util.StringHelper.notEmpty;
 
 /**
  * To call REST services using OpenAPI specification as contract.
@@ -168,6 +165,8 @@ public final class RestOpenApiEndpoint extends 
DefaultEndpoint {
                             + "&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;
 
     public RestOpenApiEndpoint() {
         // help tooling instantiate endpoint
@@ -175,9 +174,7 @@ public final class RestOpenApiEndpoint extends 
DefaultEndpoint {
 
     public RestOpenApiEndpoint(final String uri, final String remaining, final 
RestOpenApiComponent component,
                                final Map<String, Object> parameters) {
-        super(notEmpty(uri, "uri"), notNull(component, "component"));
-        this.parameters = parameters;
-
+        super(uri, component);
         if (remaining.contains("#")) {
             operationId = after(remaining, "#");
             String spec = before(remaining, "#");
@@ -197,6 +194,7 @@ public final class RestOpenApiEndpoint extends 
DefaultEndpoint {
         if (specificationUri == null) {
             specificationUri = RestOpenApiComponent.DEFAULT_SPECIFICATION_URI;
         }
+        this.parameters = parameters;
         setExchangePattern(ExchangePattern.InOut);
     }
 
@@ -442,6 +440,14 @@ public final class RestOpenApiEndpoint extends 
DefaultEndpoint {
         return requestValidationLevels;
     }
 
+    public RestOpenapiProcessorStrategy getRestOpenapiProcessorStrategy() {
+        return restOpenapiProcessorStrategy;
+    }
+
+    public void setRestOpenapiProcessorStrategy(RestOpenapiProcessorStrategy 
restOpenapiProcessorStrategy) {
+        this.restOpenapiProcessorStrategy = restOpenapiProcessorStrategy;
+    }
+
     Producer createProducerFor(
             final OpenAPI openapi, final Operation operation, final String 
method,
             final String uriTemplate)
diff --git 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenapiProcessorStrategy.java
 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenapiProcessorStrategy.java
index baaeac1d81e..80fb0501865 100644
--- 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenapiProcessorStrategy.java
+++ 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenapiProcessorStrategy.java
@@ -20,8 +20,23 @@ import io.swagger.v3.oas.models.Operation;
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 
+/**
+ * Strategy for processing the Rest DSL that services an OpenAPI spec.
+ */
 public interface RestOpenapiProcessorStrategy {
 
+    /**
+     * Strategy for processing the Rest DSL operation
+     *
+     * @param  operation the rest operation
+     * @param  path      the context-path
+     * @param  exchange  the exchange
+     * @param  callback  the AsyncCallback will be invoked when the processing 
of the exchange is completed. If the
+     *                   exchange is completed synchronously, then the 
callback is also invoked synchronously. The
+     *                   callback should therefore be careful of starting 
recursive loop.
+     * @return           (doneSync) true to continue execute synchronously, 
false to continue being executed
+     *                   asynchronously
+     */
     boolean process(Operation operation, String path, Exchange exchange, 
AsyncCallback callback);
 
 }
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 3a2f0efae63..077b716fab2 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
@@ -50,6 +50,86 @@ public interface RestOpenapiComponentBuilderFactory {
     interface RestOpenapiComponentBuilder
             extends
                 ComponentBuilder<RestOpenApiComponent> {
+        /**
+         * Enable validation of requests against the configured OpenAPI
+         * specification.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: false
+         * Group: common
+         * 
+         * @param requestValidationEnabled the value to set
+         * @return the dsl builder
+         */
+        default RestOpenapiComponentBuilder requestValidationEnabled(
+                boolean requestValidationEnabled) {
+            doSetProperty("requestValidationEnabled", 
requestValidationEnabled);
+            return this;
+        }
+        /**
+         * 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 likes, will
+         * now be processed as a message and handled by the routing Error
+         * Handler. Important: This is only possible if the 3rd party component
+         * allows Camel to be alerted if an exception was thrown. Some
+         * components handle this internally only, and therefore
+         * bridgeErrorHandler is not possible. In other situations we may
+         * improve the Camel component to hook into the 3rd party component and
+         * make this possible for future releases. By default the consumer will
+         * use the org.apache.camel.spi.ExceptionHandler to deal with
+         * exceptions, that will be logged at WARN or ERROR level and ignored.
+         * 
+         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
+         * 
+         * Default: false
+         * Group: consumer
+         * 
+         * @param bridgeErrorHandler the value to set
+         * @return the dsl builder
+         */
+        default RestOpenapiComponentBuilder bridgeErrorHandler(
+                boolean bridgeErrorHandler) {
+            doSetProperty("bridgeErrorHandler", bridgeErrorHandler);
+            return this;
+        }
+        /**
+         * 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 interface. If not set
+         * CLASSPATH is searched for single component that implements
+         * RestOpenApiConsumerFactory SPI. Can be overridden in endpoint
+         * configuration.
+         * 
+         * The option is a: &lt;code&gt;java.lang.String&lt;/code&gt; type.
+         * 
+         * Group: consumer (advanced)
+         * 
+         * @param consumerComponentName the value to set
+         * @return the dsl builder
+         */
+        default RestOpenapiComponentBuilder consumerComponentName(
+                java.lang.String consumerComponentName) {
+            doSetProperty("consumerComponentName", consumerComponentName);
+            return this;
+        }
+        /**
+         * To use a custom strategy for how to process Rest DSL requests.
+         * 
+         * The option is a:
+         * 
&lt;code&gt;org.apache.camel.component.rest.openapi.RestOpenapiProcessorStrategy&lt;/code&gt;
 type.
+         * 
+         * Group: consumer (advanced)
+         * 
+         * @param restOpenapiProcessorStrategy the value to set
+         * @return the dsl builder
+         */
+        default RestOpenapiComponentBuilder restOpenapiProcessorStrategy(
+                
org.apache.camel.component.rest.openapi.RestOpenapiProcessorStrategy 
restOpenapiProcessorStrategy) {
+            doSetProperty("restOpenapiProcessorStrategy", 
restOpenapiProcessorStrategy);
+            return this;
+        }
         /**
          * API basePath, for example /v2. Default is unset, if set overrides 
the
          * value present in OpenApi specification.
@@ -110,23 +190,6 @@ public interface RestOpenapiComponentBuilderFactory {
             doSetProperty("lazyStartProducer", lazyStartProducer);
             return this;
         }
-        /**
-         * Enable validation of requests against the configured OpenAPI
-         * specification.
-         * 
-         * The option is a: &lt;code&gt;boolean&lt;/code&gt; type.
-         * 
-         * Default: false
-         * Group: producer
-         * 
-         * @param requestValidationEnabled the value to set
-         * @return the dsl builder
-         */
-        default RestOpenapiComponentBuilder requestValidationEnabled(
-                boolean requestValidationEnabled) {
-            doSetProperty("requestValidationEnabled", 
requestValidationEnabled);
-            return this;
-        }
         /**
          * Path to the OpenApi specification file. The scheme, host base path
          * are taken from this specification, but these can be overridden with
@@ -294,10 +357,13 @@ public interface RestOpenapiComponentBuilderFactory {
                 String name,
                 Object value) {
             switch (name) {
+            case "requestValidationEnabled": ((RestOpenApiComponent) 
component).setRequestValidationEnabled((boolean) value); return true;
+            case "bridgeErrorHandler": ((RestOpenApiComponent) 
component).setBridgeErrorHandler((boolean) value); return true;
+            case "consumerComponentName": ((RestOpenApiComponent) 
component).setConsumerComponentName((java.lang.String) value); return true;
+            case "restOpenapiProcessorStrategy": ((RestOpenApiComponent) 
component).setRestOpenapiProcessorStrategy((org.apache.camel.component.rest.openapi.RestOpenapiProcessorStrategy)
 value); return true;
             case "basePath": ((RestOpenApiComponent) 
component).setBasePath((java.lang.String) value); return true;
             case "host": ((RestOpenApiComponent) 
component).setHost((java.lang.String) value); return true;
             case "lazyStartProducer": ((RestOpenApiComponent) 
component).setLazyStartProducer((boolean) value); return true;
-            case "requestValidationEnabled": ((RestOpenApiComponent) 
component).setRequestValidationEnabled((boolean) value); return true;
             case "specificationUri": ((RestOpenApiComponent) 
component).setSpecificationUri((java.net.URI) value); return true;
             case "componentName": ((RestOpenApiComponent) 
component).setComponentName((java.lang.String) value); return true;
             case "consumes": ((RestOpenApiComponent) 
component).setConsumes((java.lang.String) value); return true;
diff --git a/dsl/camel-componentdsl/src/generated/resources/metadata.json 
b/dsl/camel-componentdsl/src/generated/resources/metadata.json
index a56bf0307d2..73cf426c947 100644
--- a/dsl/camel-componentdsl/src/generated/resources/metadata.json
+++ b/dsl/camel-componentdsl/src/generated/resources/metadata.json
@@ -6161,7 +6161,7 @@
     "async": false,
     "api": false,
     "consumerOnly": false,
-    "producerOnly": true,
+    "producerOnly": false,
     "lenientProperties": false,
     "remote": 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 a0454445e2a..10936800f56 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
@@ -234,6 +234,38 @@ public interface RestOpenApiEndpointBuilderFactory {
             doSetProperty("exchangePattern", exchangePattern);
             return this;
         }
+        /**
+         * To use a custom strategy for how to process Rest DSL requests.
+         * 
+         * The option is a:
+         * 
&lt;code&gt;org.apache.camel.component.rest.openapi.RestOpenapiProcessorStrategy&lt;/code&gt;
 type.
+         * 
+         * Group: consumer (advanced)
+         * 
+         * @param restOpenapiProcessorStrategy the value to set
+         * @return the dsl builder
+         */
+        default AdvancedRestOpenApiEndpointConsumerBuilder 
restOpenapiProcessorStrategy(
+                
org.apache.camel.component.rest.openapi.RestOpenapiProcessorStrategy 
restOpenapiProcessorStrategy) {
+            doSetProperty("restOpenapiProcessorStrategy", 
restOpenapiProcessorStrategy);
+            return this;
+        }
+        /**
+         * To use a custom strategy for how to process Rest DSL requests.
+         * 
+         * The option will be converted to a
+         * 
&lt;code&gt;org.apache.camel.component.rest.openapi.RestOpenapiProcessorStrategy&lt;/code&gt;
 type.
+         * 
+         * Group: consumer (advanced)
+         * 
+         * @param restOpenapiProcessorStrategy the value to set
+         * @return the dsl builder
+         */
+        default AdvancedRestOpenApiEndpointConsumerBuilder 
restOpenapiProcessorStrategy(
+                String restOpenapiProcessorStrategy) {
+            doSetProperty("restOpenapiProcessorStrategy", 
restOpenapiProcessorStrategy);
+            return this;
+        }
         /**
          * If request validation is enabled, this option provides the 
capability
          * to customize the creation of OpenApiInteractionValidator used to
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 6f22f587c84..9827040e0b9 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
@@ -139,6 +139,13 @@ public class RestOpenapiUriDsl(
     it.property("exchangePattern", exchangePattern)
   }
 
+  /**
+   * To use a custom strategy for how to process Rest DSL requests
+   */
+  public fun restOpenapiProcessorStrategy(restOpenapiProcessorStrategy: 
String) {
+    it.property("restOpenapiProcessorStrategy", restOpenapiProcessorStrategy)
+  }
+
   /**
    * API basePath, for example /v3. Default is unset, if set overrides the 
value present in OpenApi
    * specification and in the component configuration.

Reply via email to