You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by gg...@apache.org on 2023/05/19 11:05:00 UTC

[camel] 04/06: [CAMEL-18189] (registry bean) is unified for YAML and XML DSLs

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

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

commit 088d571b939614201324e5da2f253cb9026381ea
Author: Grzegorz Grzybek <gr...@gmail.com>
AuthorDate: Thu May 18 09:16:11 2023 +0200

    [CAMEL-18189] <bean> (registry bean) is unified for YAML and XML DSLs
    
    * XmlAnyElement is handled in camel-xml-io parser as generic DOM
      elements
    * in YAML, BeansDeserializer uses standard RegistryBeanDefinition
      instead of previous, special for YAML, NamedBeanDefinition
---
 .../org/apache/camel/catalog/models/beans.json     |    3 +-
 .../org/apache/camel/catalog/models/camel-app.json |    1 +
 .../apache/camel/catalog/schemas/camel-spring.xsd  | 3401 ++++++++++----------
 .../spi/annotations/ExternalSchemaElement.java     |   57 +
 .../camel/model/app/BeanPropertiesAdapter.java     |    1 +
 .../camel/model/app/BeanPropertiesDefinition.java  |    1 +
 .../apache/camel/model/app/BeansDefinition.java    |   19 +-
 .../camel/model/app/RegistryBeanDefinition.java    |    5 +-
 .../java/org/apache/camel/xml/in/ModelParser.java  |   63 +-
 .../java/org/apache/camel/xml/out/ModelWriter.java |   35 +-
 .../java/org/apache/camel/xml/in/BaseParser.java   |  126 +-
 .../java/org/apache/camel/xml/out/BaseWriter.java  |   63 +-
 .../org/apache/camel/xml/in/ModelParserTest.java   |   81 +-
 .../org/apache/camel/xml/out/ModelWriterTest.java  |   25 +
 .../camel-xml-io/src/test/resources/beansEmpty.xml |   13 +-
 .../src/test/resources/beansWithProperties.xml     |   45 +
 .../src/test/resources/beansWithSpringNS.xml       |   26 +-
 .../camel/dsl/xml/io/XmlRoutesBuilderLoader.java   |    6 +-
 .../org/apache/camel/dsl/xml/io/camel-app1.xml     |    2 +-
 .../org/apache/camel/dsl/xml/io/camel-app2.xml     |    4 +-
 .../dsl/yaml/deserializers/ModelDeserializers.java |  149 +-
 .../deserializers/ModelDeserializersResolver.java  |    3 +
 .../dsl/yaml/deserializers/BeansDeserializer.java  |   22 +-
 .../dsl/yaml/deserializers/CustomResolver.java     |    2 -
 .../yaml/deserializers/NamedBeanDefinition.java    |   72 -
 .../yaml/deserializers/NamedBeanDeserializer.java  |   81 -
 .../RouteTemplateDefinitionDeserializer.java       |    2 +-
 .../TemplatedRouteDefinitionDeserializer.java      |    2 +-
 .../dsl/yaml/GenerateYamlDeserializersMojo.java    |   28 +-
 .../maven/dsl/yaml/GenerateYamlSupportMojo.java    |    4 +
 .../generated/resources/schema/camel-yaml-dsl.json |   73 +-
 .../generated/resources/schema/camelYamlDsl.json   |   73 +-
 .../packaging/ModelXmlParserGeneratorMojo.java     |   64 +-
 .../packaging/ModelXmlWriterGeneratorMojo.java     |   35 +-
 .../spi/annotations/ExternalSchemaElement.java     |   57 +
 35 files changed, 2717 insertions(+), 1927 deletions(-)

diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/beans.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/beans.json
index e55cd059c1f..080094084dc 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/beans.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/beans.json
@@ -3,7 +3,7 @@
     "kind": "model",
     "name": "beans",
     "title": "Beans",
-    "description": "A groupping POJO (and related XML root element) that's historically associated with entire application (or its distinguished fragment). beans root element to define the application comes from Spring Framework and it can be treated as de-facto standard.",
+    "description": "A groupping POJO (and related XML root element) that's historically associated with entire application (or its distinguished fragment). This class is not meant to be used with Camel Java DSL, but it's needed to generate XML Schema and MX parser methods.",
     "deprecated": false,
     "label": "configuration",
     "javaType": "org.apache.camel.model.app.BeansDefinition",
@@ -13,6 +13,7 @@
   },
   "properties": {
     "component-scan": { "kind": "element", "displayName": "Component-scan", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.app.ComponentScanDefinition>", "deprecated": false, "autowired": false, "secret": false, "description": "Component scanning definition(s). But unlike package\/packageScan\/contextScan, we're not scanning only for org.apache.camel.builder.RouteBuilder." },
+    "bean": { "kind": "element", "displayName": "Bean", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.app.RegistryBeanDefinition>", "deprecated": false, "autowired": false, "secret": false },
     "rest": { "kind": "element", "displayName": "Rest", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.rest.RestDefinition>", "deprecated": false, "autowired": false, "secret": false },
     "routeConfiguration": { "kind": "element", "displayName": "Route Configuration", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.RouteConfigurationDefinition>", "deprecated": false, "autowired": false, "secret": false },
     "routeTemplate": { "kind": "element", "displayName": "Route Template", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.RouteTemplateDefinition>", "deprecated": false, "autowired": false, "secret": false },
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/camel-app.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/camel-app.json
index 6c74dcaa7c7..faea5faeddd 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/camel-app.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/camel-app.json
@@ -13,6 +13,7 @@
   },
   "properties": {
     "component-scan": { "kind": "element", "displayName": "Component-scan", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.app.ComponentScanDefinition>", "deprecated": false, "autowired": false, "secret": false, "description": "Component scanning definition(s). But unlike package\/packageScan\/contextScan, we're not scanning only for org.apache.camel.builder.RouteBuilder." },
+    "bean": { "kind": "element", "displayName": "Bean", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.app.RegistryBeanDefinition>", "deprecated": false, "autowired": false, "secret": false },
     "rest": { "kind": "element", "displayName": "Rest", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.rest.RestDefinition>", "deprecated": false, "autowired": false, "secret": false },
     "routeConfiguration": { "kind": "element", "displayName": "Route Configuration", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.RouteConfigurationDefinition>", "deprecated": false, "autowired": false, "secret": false },
     "routeTemplate": { "kind": "element", "displayName": "Route Template", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.RouteTemplateDefinition>", "deprecated": false, "autowired": false, "secret": false },
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
index 4b859615e24..b7bcf95851a 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd
@@ -81,6 +81,17 @@ BeanPostProcessor to post process beans.
     </xs:annotation>
   </xs:element>
     
+  <xs:element name="beans" type="tns:beansDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en"><![CDATA[
+A groupping POJO (and related XML root element) that's historically associated
+with entire application (or its distinguished fragment). This class is not meant
+to be used with Camel Java DSL, but it's needed to generate XML Schema and MX
+parser methods.
+      ]]></xs:documentation>
+    </xs:annotation>
+  </xs:element>
+    
   <xs:element name="bearerToken" type="tns:bearerTokenDefinition">
     <xs:annotation>
       <xs:documentation xml:lang="en"><![CDATA[
@@ -114,6 +125,15 @@ Deprecated: null
     </xs:annotation>
   </xs:element>
     
+  <xs:element name="camel-app" type="tns:applicationDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en"><![CDATA[
+If beans reminds Spring application too much, we can use camel-app (similar to
+web-app from Servlet API specification).
+      ]]></xs:documentation>
+    </xs:annotation>
+  </xs:element>
+    
   <xs:element name="camelContext" type="tns:camelContextFactoryBean">
     <xs:annotation>
       <xs:documentation xml:lang="en"><![CDATA[
@@ -384,7 +404,7 @@ Enriches a message with data from a secondary resource
   <xs:element name="errorHandler" nillable="true" type="xs:anyType">
     <xs:annotation>
       <xs:documentation xml:lang="en"><![CDATA[
-Camel error handling.
+Error handler settings
       ]]></xs:documentation>
     </xs:annotation>
   </xs:element>
@@ -16758,24 +16778,13 @@ Uses a custom thread pool.
       
   </xs:complexType>
     
-  <xs:complexType name="blacklistServiceCallServiceFilterConfiguration">
+  <xs:complexType name="applicationDefinition">
         
     <xs:complexContent>
             
-      <xs:extension base="tns:serviceCallServiceFilterConfiguration">
+      <xs:extension base="tns:beansDefinition">
                 
-        <xs:sequence>
-                    
-          <xs:element maxOccurs="unbounded" minOccurs="0" name="servers" type="xs:string">
-            <xs:annotation>
-              <xs:documentation xml:lang="en"><![CDATA[
-Sets the server blacklist. Each entry can be a list of servers separated by
-comma in the format: servicehost:port,servicehost2:port,servicehost3:port.
-              ]]></xs:documentation>
-            </xs:annotation>
-          </xs:element>
-                  
-        </xs:sequence>
+        <xs:sequence/>
               
       </xs:extension>
           
@@ -16783,182 +16792,215 @@ comma in the format: servicehost:port,servicehost2:port,servicehost3:port.
       
   </xs:complexType>
     
-  <xs:complexType name="serviceCallServiceFilterConfiguration">
+  <xs:complexType name="beansDefinition">
         
-    <xs:complexContent>
+    <xs:sequence>
             
-      <xs:extension base="tns:serviceCallConfiguration">
-                
-        <xs:sequence/>
-              
-      </xs:extension>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="component-scan" type="tns:componentScanDefinition">
+        <xs:annotation>
+          <xs:documentation xml:lang="en"><![CDATA[
+Component scanning definition(s). But unlike package/packageScan/contextScan,
+we're not scanning only for org.apache.camel.builder.RouteBuilder.
+          ]]></xs:documentation>
+        </xs:annotation>
+      </xs:element>
+            
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="bean" type="tns:registryBeanDefinition"/>
+            
+      <xs:any maxOccurs="unbounded" minOccurs="0" namespace="##other" processContents="skip"/>
+            
+      <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:rest"/>
+            
+      <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:routeConfiguration"/>
+            
+      <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:routeTemplate"/>
+            
+      <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:templatedRoute"/>
+            
+      <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:route"/>
           
-    </xs:complexContent>
+    </xs:sequence>
       
   </xs:complexType>
     
-  <xs:complexType abstract="true" name="serviceCallConfiguration">
+  <xs:complexType name="componentScanDefinition">
         
-    <xs:complexContent>
+    <xs:sequence/>
+        
+    <xs:attribute name="base-package" type="xs:string"/>
+      
+  </xs:complexType>
+    
+  <xs:complexType name="registryBeanDefinition">
+        
+    <xs:sequence>
             
-      <xs:extension base="tns:identifiedType">
-                
-        <xs:sequence>
-                    
-          <xs:element maxOccurs="unbounded" minOccurs="0" name="properties" type="tns:propertyDefinition">
-            <xs:annotation>
-              <xs:documentation xml:lang="en"><![CDATA[
-Set client properties to use. These properties are specific to what service call
-implementation are in use. For example if using a different one, then the client
-properties are defined according to the specific service in use.
-              ]]></xs:documentation>
-            </xs:annotation>
-          </xs:element>
-                  
-        </xs:sequence>
-              
-      </xs:extension>
+      <xs:element minOccurs="0" name="properties" type="tns:beanPropertiesDefinition"/>
           
-    </xs:complexContent>
+    </xs:sequence>
+        
+    <xs:attribute name="name" type="xs:string"/>
+        
+    <xs:attribute name="type" type="xs:string"/>
       
   </xs:complexType>
     
-  <xs:complexType name="cachingServiceCallServiceDiscoveryConfiguration">
+  <xs:complexType name="beanPropertiesDefinition">
+        
+    <xs:sequence>
+            
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="property" type="tns:beanPropertyDefinition"/>
+          
+    </xs:sequence>
+      
+  </xs:complexType>
+    
+  <xs:complexType name="beanPropertyDefinition">
+        
+    <xs:sequence>
+            
+      <xs:element minOccurs="0" name="properties" type="tns:beanPropertiesDefinition"/>
+          
+    </xs:sequence>
+        
+    <xs:attribute name="key" type="xs:string"/>
+        
+    <xs:attribute name="value" type="xs:string"/>
+      
+  </xs:complexType>
+    
+  <xs:complexType name="restDefinition">
         
     <xs:complexContent>
             
-      <xs:extension base="tns:serviceCallServiceDiscoveryConfiguration">
+      <xs:extension base="tns:optionalIdentifiedDefinition">
                 
         <xs:sequence>
                     
-          <xs:choice minOccurs="0">
+          <xs:element minOccurs="0" ref="tns:securityDefinitions"/>
+                    
+          <xs:element maxOccurs="unbounded" minOccurs="0" name="securityRequirements" type="tns:securityDefinition">
+            <xs:annotation>
+              <xs:documentation xml:lang="en"><![CDATA[
+Sets the security requirement(s) for all endpoints.
+              ]]></xs:documentation>
+            </xs:annotation>
+          </xs:element>
+                    
+          <xs:choice maxOccurs="unbounded" minOccurs="0">
                         
-            <xs:element ref="tns:consulServiceDiscovery"/>
+            <xs:element ref="tns:delete"/>
                         
-            <xs:element ref="tns:dnsServiceDiscovery"/>
+            <xs:element ref="tns:get"/>
                         
-            <xs:element ref="tns:kubernetesServiceDiscovery"/>
+            <xs:element ref="tns:head"/>
                         
-            <xs:element ref="tns:combinedServiceDiscovery"/>
+            <xs:element ref="tns:patch"/>
                         
-            <xs:element ref="tns:staticServiceDiscovery"/>
+            <xs:element ref="tns:post"/>
+                        
+            <xs:element ref="tns:put"/>
                       
           </xs:choice>
                   
         </xs:sequence>
                 
-        <xs:attribute name="timeout" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Set the time the services will be retained. Default value: 60
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-                
-        <xs:attribute name="units" type="xs:string">
+        <xs:attribute name="path" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Set the time unit for the timeout. Default value: SECONDS
+Path of the rest service, such as /foo.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
-              
-      </xs:extension>
-          
-    </xs:complexContent>
-      
-  </xs:complexType>
-    
-  <xs:complexType name="serviceCallServiceDiscoveryConfiguration">
-        
-    <xs:complexContent>
-            
-      <xs:extension base="tns:serviceCallConfiguration">
-                
-        <xs:sequence/>
-              
-      </xs:extension>
-          
-    </xs:complexContent>
-      
-  </xs:complexType>
-    
-  <xs:complexType name="consulServiceCallServiceDiscoveryConfiguration">
-        
-    <xs:complexContent>
-            
-      <xs:extension base="tns:serviceCallServiceDiscoveryConfiguration">
-                
-        <xs:sequence/>
                 
-        <xs:attribute name="url" type="xs:string">
+        <xs:attribute name="consumes" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-The Consul agent URL.
+To define the content type what the REST service consumes (accept as input),
+such as application/xml or application/json. This option will override what may
+be configured on a parent level.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="datacenter" type="xs:string">
+        <xs:attribute name="produces" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-The data center.
+To define the content type what the REST service produces (uses for output),
+such as application/xml or application/json This option will override what may
+be configured on a parent level.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="aclToken" type="xs:string">
+        <xs:attribute name="disabled" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the ACL token to be used with Consul.
+Whether to disable this REST service from the route during build time. Once an
+REST service has been disabled then it cannot be enabled later at runtime.
+Default value: false
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="userName" type="xs:string">
+        <xs:attribute name="bindingMode" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the username to be used for basic authentication.
+Sets the binding mode to use. This option will override what may be configured
+on a parent level The default value is auto. Default value: off
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="password" type="xs:string">
+        <xs:attribute name="skipBindingOnErrorCode" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the password to be used for basic authentication.
+Whether to skip binding on output if there is a custom HTTP error code header.
+This allows to build custom error messages that do not bind to json / xml etc,
+as success messages otherwise will do. This option will override what may be
+configured on a parent level. Default value: false
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="connectTimeoutMillis" type="xs:string">
+        <xs:attribute name="clientRequestValidation" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Connect timeout for OkHttpClient.
+Whether to enable validation of the client request to check: 1) Content-Type
+header matches what the Rest DSL consumes; returns HTTP Status 415 if validation
+error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status
+406 if validation error. 3) Missing required data (query parameters, HTTP
+headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of
+the message body (JSon, XML or Auto binding mode must be enabled); returns HTTP
+Status 400 if validation error. Default value: false
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="readTimeoutMillis" type="xs:string">
+        <xs:attribute name="enableCORS" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Read timeout for OkHttpClient.
+Whether to enable CORS headers in the HTTP response. This option will override
+what may be configured on a parent level The default value is false. Default
+value: false
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="writeTimeoutMillis" type="xs:string">
+        <xs:attribute name="apiDocs" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Write timeout for OkHttpClient.
+Whether to include or exclude this rest operation in API documentation. This
+option will override what may be configured on a parent level. The default value
+is true. Default value: true
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="blockSeconds" type="xs:string">
+        <xs:attribute name="tag" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-The seconds to wait for a watch event, default 10 seconds. Default value: 10
+To configure a special tag for the operations within this rest definition.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
@@ -16969,26 +17011,66 @@ The seconds to wait for a watch event, default 10 seconds. Default value: 10
       
   </xs:complexType>
     
-  <xs:complexType name="dnsServiceCallServiceDiscoveryConfiguration">
+  <xs:complexType name="restSecuritiesDefinition">
+        
+    <xs:sequence>
+            
+      <xs:choice maxOccurs="unbounded" minOccurs="0">
+                
+        <xs:element ref="tns:apiKey"/>
+                
+        <xs:element ref="tns:basicAuth"/>
+                
+        <xs:element name="bearer" type="tns:bearerTokenDefinition"/>
+                
+        <xs:element ref="tns:oauth2"/>
+                
+        <xs:element ref="tns:openIdConnect"/>
+                
+        <xs:element ref="tns:mutualTLS"/>
+              
+      </xs:choice>
+          
+    </xs:sequence>
+      
+  </xs:complexType>
+    
+  <xs:complexType name="apiKeyDefinition">
         
     <xs:complexContent>
             
-      <xs:extension base="tns:serviceCallServiceDiscoveryConfiguration">
+      <xs:extension base="tns:restSecurityDefinition">
                 
         <xs:sequence/>
                 
-        <xs:attribute name="proto" type="xs:string">
+        <xs:attribute name="name" type="xs:string" use="required">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-The transport protocol of the desired service. Default value: _tcp
+The name of the header or query parameter to be used.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="domain" type="xs:string">
+        <xs:attribute name="inHeader" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-The domain name;.
+To use header as the location of the API key. Default value: false
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+                
+        <xs:attribute name="inQuery" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+To use query parameter as the location of the API key. Default value: false
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+                
+        <xs:attribute name="inCookie" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+To use a cookie as the location of the API key. Default value: false
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
@@ -16999,175 +17081,348 @@ The domain name;.
       
   </xs:complexType>
     
-  <xs:complexType name="kubernetesServiceCallServiceDiscoveryConfiguration">
+  <xs:complexType abstract="true" name="restSecurityDefinition">
+        
+    <xs:sequence/>
+        
+    <xs:attribute name="key" type="xs:string" use="required">
+      <xs:annotation>
+        <xs:documentation xml:lang="en"><![CDATA[
+Key used to refer to this security definition.
+        ]]></xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+        
+    <xs:attribute name="description" type="xs:string">
+      <xs:annotation>
+        <xs:documentation xml:lang="en"><![CDATA[
+A short description for security scheme.
+        ]]></xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+      
+  </xs:complexType>
+    
+  <xs:complexType name="basicAuthDefinition">
         
     <xs:complexContent>
             
-      <xs:extension base="tns:serviceCallServiceDiscoveryConfiguration">
+      <xs:extension base="tns:restSecurityDefinition">
+                
+        <xs:sequence/>
+              
+      </xs:extension>
+          
+    </xs:complexContent>
+      
+  </xs:complexType>
+    
+  <xs:complexType name="bearerTokenDefinition">
+        
+    <xs:complexContent>
+            
+      <xs:extension base="tns:restSecurityDefinition">
                 
         <xs:sequence/>
                 
-        <xs:attribute name="lookup" type="xs:string">
+        <xs:attribute name="format" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-How to perform service lookup. Possible values: client, dns, environment. When
-using client, then the client queries the kubernetes master to obtain a list of
-active pods that provides the service, and then random (or round robin) select a
-pod. When using dns the service name is resolved as
-name.namespace.svc.dnsDomain. When using dnssrv the service name is resolved
-with SRV query for _._...svc... When using environment then environment
-variables are used to lookup the service. By default environment is used.
-Default value: environment
+A hint to the client to identify how the bearer token is formatted.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
+              
+      </xs:extension>
+          
+    </xs:complexContent>
+      
+  </xs:complexType>
+    
+  <xs:complexType name="oAuth2Definition">
+        
+    <xs:complexContent>
+            
+      <xs:extension base="tns:restSecurityDefinition">
                 
-        <xs:attribute name="dnsDomain" type="xs:string">
+        <xs:sequence>
+                    
+          <xs:element maxOccurs="unbounded" minOccurs="0" name="scopes" type="tns:restPropertyDefinition">
+            <xs:annotation>
+              <xs:documentation xml:lang="en"><![CDATA[
+The available scopes for an OAuth2 security scheme.
+              ]]></xs:documentation>
+            </xs:annotation>
+          </xs:element>
+                  
+        </xs:sequence>
+                
+        <xs:attribute name="authorizationUrl" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the DNS domain to use for DNS lookup.
+The authorization URL to be used for this flow. This SHOULD be in the form of a
+URL. Required for implicit and access code flows.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="portName" type="xs:string">
+        <xs:attribute name="tokenUrl" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the Port Name to use for DNS/DNSSRV lookup.
+The token URL to be used for this flow. This SHOULD be in the form of a URL.
+Required for password, application, and access code flows.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="portProtocol" type="xs:string">
+        <xs:attribute name="refreshUrl" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the Port Protocol to use for DNS/DNSSRV lookup.
+The URL to be used for obtaining refresh tokens. This MUST be in the form of a
+URL.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="namespace" type="xs:string">
+        <xs:attribute name="flow" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the namespace to use. Will by default use namespace from the ENV variable
-KUBERNETES_MASTER.
+The flow used by the OAuth2 security scheme. Valid values are implicit,
+password, application or accessCode.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
+              
+      </xs:extension>
+          
+    </xs:complexContent>
+      
+  </xs:complexType>
+    
+  <xs:complexType name="restPropertyDefinition">
+        
+    <xs:sequence/>
+        
+    <xs:attribute name="key" type="xs:string" use="required">
+      <xs:annotation>
+        <xs:documentation xml:lang="en"><![CDATA[
+Property key.
+        ]]></xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+        
+    <xs:attribute name="value" type="xs:string" use="required">
+      <xs:annotation>
+        <xs:documentation xml:lang="en"><![CDATA[
+Property value.
+        ]]></xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+      
+  </xs:complexType>
+    
+  <xs:complexType name="openIdConnectDefinition">
+        
+    <xs:complexContent>
+            
+      <xs:extension base="tns:restSecurityDefinition">
                 
-        <xs:attribute name="apiVersion" type="xs:string">
+        <xs:sequence/>
+                
+        <xs:attribute name="url" type="xs:string" use="required">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the API version when using client lookup.
+OpenId Connect URL to discover OAuth2 configuration values.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
+              
+      </xs:extension>
+          
+    </xs:complexContent>
+      
+  </xs:complexType>
+    
+  <xs:complexType name="mutualTLSDefinition">
+        
+    <xs:complexContent>
+            
+      <xs:extension base="tns:restSecurityDefinition">
                 
-        <xs:attribute name="masterUrl" type="xs:string">
+        <xs:sequence/>
+              
+      </xs:extension>
+          
+    </xs:complexContent>
+      
+  </xs:complexType>
+    
+  <xs:complexType name="securityDefinition">
+        
+    <xs:sequence/>
+        
+    <xs:attribute name="key" type="xs:string" use="required">
+      <xs:annotation>
+        <xs:documentation xml:lang="en"><![CDATA[
+Key used to refer to this security definition.
+        ]]></xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+        
+    <xs:attribute name="scopes" type="xs:string">
+      <xs:annotation>
+        <xs:documentation xml:lang="en"><![CDATA[
+The scopes to allow (separate multiple scopes by comma).
+        ]]></xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+      
+  </xs:complexType>
+    
+  <xs:complexType abstract="true" name="verbDefinition">
+        
+    <xs:complexContent>
+            
+      <xs:extension base="tns:optionalIdentifiedDefinition">
+                
+        <xs:sequence>
+                    
+          <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:param"/>
+                    
+          <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:responseMessage"/>
+                    
+          <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:security"/>
+                    
+          <xs:element ref="tns:to"/>
+                  
+        </xs:sequence>
+                
+        <xs:attribute name="path" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the URL to the master when using client lookup.
+The path mapping URIs of this REST operation such as /{id}.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="username" type="xs:string">
+        <xs:attribute name="consumes" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the username for authentication when using client lookup.
+To define the content type what the REST service consumes (accept as input),
+such as application/xml or application/json. This option will override what may
+be configured on a parent level.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="password" type="xs:string">
+        <xs:attribute name="produces" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the password for authentication when using client lookup.
+To define the content type what the REST service produces (uses for output),
+such as application/xml or application/json This option will override what may
+be configured on a parent level.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="oauthToken" type="xs:string">
+        <xs:attribute name="disabled" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the OAUTH token for authentication (instead of username/password) when
-using client lookup.
+Whether to disable this REST service from the route during build time. Once an
+REST service has been disabled then it cannot be enabled later at runtime.
+Default value: false
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="caCertData" type="xs:string">
+        <xs:attribute name="type" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the Certificate Authority data when using client lookup.
+Sets the class name to use for binding from input to POJO for the incoming data
+This option will override what may be configured on a parent level. The name of
+the class of the input data. Append a to the end of the name if you want the
+input to be an array type.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="caCertFile" type="xs:string">
+        <xs:attribute name="outType" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the Certificate Authority data that are loaded from the file when using
-client lookup.
+Sets the class name to use for binding from POJO to output for the outgoing data
+This option will override what may be configured on a parent level The name of
+the class of the input data. Append a to the end of the name if you want the
+input to be an array type.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="clientCertData" type="xs:string">
+        <xs:attribute name="bindingMode" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the Client Certificate data when using client lookup.
+Sets the binding mode to use. This option will override what may be configured
+on a parent level The default value is off. Default value: off
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="clientCertFile" type="xs:string">
+        <xs:attribute name="skipBindingOnErrorCode" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the Client Certificate data that are loaded from the file when using client
-lookup.
+Whether to skip binding on output if there is a custom HTTP error code header.
+This allows to build custom error messages that do not bind to json / xml etc,
+as success messages otherwise will do. This option will override what may be
+configured on a parent level. Default value: false
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="clientKeyAlgo" type="xs:string">
+        <xs:attribute name="clientRequestValidation" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the Client Keystore algorithm, such as RSA when using client lookup.
+Whether to enable validation of the client request to check: 1) Content-Type
+header matches what the Rest DSL consumes; returns HTTP Status 415 if validation
+error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status
+406 if validation error. 3) Missing required data (query parameters, HTTP
+headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of
+the message body (JSon, XML or Auto binding mode must be enabled); returns HTTP
+Status 400 if validation error. Default value: false
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="clientKeyData" type="xs:string">
+        <xs:attribute name="enableCORS" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the Client Keystore data when using client lookup.
+Whether to enable CORS headers in the HTTP response. This option will override
+what may be configured on a parent level The default value is false. Default
+value: false
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="clientKeyFile" type="xs:string">
+        <xs:attribute name="apiDocs" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the Client Keystore data that are loaded from the file when using client
-lookup.
+Whether to include or exclude this rest operation in API documentation. The
+default value is true. Default value: true
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="clientKeyPassphrase" type="xs:string">
+        <xs:attribute name="deprecated" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the Client Keystore passphrase when using client lookup.
+Marks this rest operation as deprecated in OpenApi documentation. Default value:
+false
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="trustCerts" type="xs:string">
+        <xs:attribute name="routeId" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets whether to turn on trust certificate check when using client lookup.
-Default value: false
+Sets the id of the route.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
@@ -17178,104 +17433,264 @@ Default value: false
       
   </xs:complexType>
     
-  <xs:complexType name="combinedServiceCallServiceDiscoveryConfiguration">
+  <xs:complexType name="paramDefinition">
         
-    <xs:complexContent>
+    <xs:sequence>
             
-      <xs:extension base="tns:serviceCallServiceDiscoveryConfiguration">
+      <xs:element minOccurs="0" name="allowableValues">
+        <xs:annotation>
+          <xs:documentation xml:lang="en"><![CDATA[
+Sets the parameter list of allowable values (enum).
+          ]]></xs:documentation>
+        </xs:annotation>
                 
-        <xs:sequence>
+        <xs:complexType>
                     
-          <xs:choice maxOccurs="unbounded" minOccurs="0">
-                        
-            <xs:element ref="tns:consulServiceDiscovery"/>
-                        
-            <xs:element ref="tns:dnsServiceDiscovery"/>
-                        
-            <xs:element ref="tns:kubernetesServiceDiscovery"/>
-                        
-            <xs:element ref="tns:staticServiceDiscovery"/>
+          <xs:sequence>
                         
-            <xs:element ref="tns:cachingServiceDiscovery"/>
+            <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:value"/>
                       
-          </xs:choice>
+          </xs:sequence>
                   
-        </xs:sequence>
+        </xs:complexType>
               
-      </xs:extension>
+      </xs:element>
+            
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="examples" type="tns:restPropertyDefinition">
+        <xs:annotation>
+          <xs:documentation xml:lang="en"><![CDATA[
+Sets the parameter examples.
+          ]]></xs:documentation>
+        </xs:annotation>
+      </xs:element>
           
-    </xs:complexContent>
+    </xs:sequence>
+        
+    <xs:attribute name="name" type="xs:string" use="required">
+      <xs:annotation>
+        <xs:documentation xml:lang="en"><![CDATA[
+Sets the parameter name.
+        ]]></xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+        
+    <xs:attribute name="type" type="tns:restParamType" use="required">
+      <xs:annotation>
+        <xs:documentation xml:lang="en"><![CDATA[
+Sets the parameter type. Default value: path
+        ]]></xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+        
+    <xs:attribute name="description" type="xs:string">
+      <xs:annotation>
+        <xs:documentation xml:lang="en"><![CDATA[
+Sets the parameter description.
+        ]]></xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+        
+    <xs:attribute name="defaultValue" type="xs:string">
+      <xs:annotation>
+        <xs:documentation xml:lang="en"><![CDATA[
+Sets the parameter default value.
+        ]]></xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+        
+    <xs:attribute name="required" type="xs:boolean">
+      <xs:annotation>
+        <xs:documentation xml:lang="en"><![CDATA[
+Sets the parameter required flag. Default value: true
+        ]]></xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+        
+    <xs:attribute name="collectionFormat" type="tns:collectionFormat">
+      <xs:annotation>
+        <xs:documentation xml:lang="en"><![CDATA[
+Sets the parameter collection format. Default value: csv
+        ]]></xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+        
+    <xs:attribute name="arrayType" type="xs:string">
+      <xs:annotation>
+        <xs:documentation xml:lang="en"><![CDATA[
+Sets the parameter array type. Required if data type is array. Describes the
+type of items in the array. Default value: string
+        ]]></xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+        
+    <xs:attribute name="dataType" type="xs:string">
+      <xs:annotation>
+        <xs:documentation xml:lang="en"><![CDATA[
+Sets the parameter data type. Default value: string
+        ]]></xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+        
+    <xs:attribute name="dataFormat" type="xs:string">
+      <xs:annotation>
+        <xs:documentation xml:lang="en"><![CDATA[
+Sets the parameter data format.
+        ]]></xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
       
   </xs:complexType>
     
-  <xs:complexType name="staticServiceCallServiceDiscoveryConfiguration">
+  <xs:complexType name="responseMessageDefinition">
         
-    <xs:complexContent>
+    <xs:sequence>
             
-      <xs:extension base="tns:serviceCallServiceDiscoveryConfiguration">
-                
-        <xs:sequence>
-                    
-          <xs:element maxOccurs="unbounded" minOccurs="0" name="servers" type="xs:string">
-            <xs:annotation>
-              <xs:documentation xml:lang="en"><![CDATA[
-Sets the server list. Each entry can be a list of servers separated by comma in
-the format: servicehost:port,servicehost2:port,servicehost3:port.
-              ]]></xs:documentation>
-            </xs:annotation>
-          </xs:element>
-                  
-        </xs:sequence>
-              
-      </xs:extension>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="header" type="tns:responseHeaderDefinition">
+        <xs:annotation>
+          <xs:documentation xml:lang="en"><![CDATA[
+Adds a response header.
+          ]]></xs:documentation>
+        </xs:annotation>
+      </xs:element>
+            
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="examples" type="tns:restPropertyDefinition">
+        <xs:annotation>
+          <xs:documentation xml:lang="en"><![CDATA[
+Examples of response messages.
+          ]]></xs:documentation>
+        </xs:annotation>
+      </xs:element>
           
-    </xs:complexContent>
+    </xs:sequence>
+        
+    <xs:attribute name="code" type="xs:string">
+      <xs:annotation>
+        <xs:documentation xml:lang="en"><![CDATA[
+The response code such as a HTTP status code. Default value: 200
+        ]]></xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+        
+    <xs:attribute name="message" type="xs:string" use="required">
+      <xs:annotation>
+        <xs:documentation xml:lang="en"><![CDATA[
+The response message (description).
+        ]]></xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+        
+    <xs:attribute name="responseModel" type="xs:string">
+      <xs:annotation>
+        <xs:documentation xml:lang="en"><![CDATA[
+The response model.
+        ]]></xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
       
   </xs:complexType>
     
-  <xs:complexType name="combinedServiceCallServiceFilterConfiguration">
+  <xs:complexType name="responseHeaderDefinition">
         
-    <xs:complexContent>
+    <xs:sequence>
             
-      <xs:extension base="tns:serviceCallServiceFilterConfiguration">
+      <xs:element minOccurs="0" name="allowableValues">
+        <xs:annotation>
+          <xs:documentation xml:lang="en"><![CDATA[
+Sets the parameter list of allowable values.
+          ]]></xs:documentation>
+        </xs:annotation>
                 
-        <xs:sequence>
+        <xs:complexType>
                     
-          <xs:choice maxOccurs="unbounded" minOccurs="0">
-                        
-            <xs:element ref="tns:blacklistServiceFilter"/>
-                        
-            <xs:element ref="tns:customServiceFilter"/>
-                        
-            <xs:element ref="tns:healthyServiceFilter"/>
+          <xs:sequence>
                         
-            <xs:element ref="tns:passThroughServiceFilter"/>
+            <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:value"/>
                       
-          </xs:choice>
+          </xs:sequence>
                   
-        </xs:sequence>
+        </xs:complexType>
               
-      </xs:extension>
+      </xs:element>
           
-    </xs:complexContent>
-      
-  </xs:complexType>
-    
-  <xs:complexType name="customServiceCallServiceFilterConfiguration">
+    </xs:sequence>
         
-    <xs:complexContent>
-            
-      <xs:extension base="tns:serviceCallServiceFilterConfiguration">
-                
-        <xs:sequence/>
+    <xs:attribute name="name" type="xs:string" use="required">
+      <xs:annotation>
+        <xs:documentation xml:lang="en"><![CDATA[
+Name of the parameter. This option is mandatory.
+        ]]></xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+        
+    <xs:attribute name="description" type="xs:string">
+      <xs:annotation>
+        <xs:documentation xml:lang="en"><![CDATA[
+Description of the parameter.
+        ]]></xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+        
+    <xs:attribute name="collectionFormat" type="tns:collectionFormat">
+      <xs:annotation>
+        <xs:documentation xml:lang="en"><![CDATA[
+Sets the parameter collection format. Default value: csv
+        ]]></xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+        
+    <xs:attribute name="arrayType" type="xs:string">
+      <xs:annotation>
+        <xs:documentation xml:lang="en"><![CDATA[
+Sets the parameter array type. Required if data type is array. Describes the
+type of items in the array. Default value: string
+        ]]></xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+        
+    <xs:attribute name="dataType" type="xs:string">
+      <xs:annotation>
+        <xs:documentation xml:lang="en"><![CDATA[
+Sets the header data type. Default value: string
+        ]]></xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+        
+    <xs:attribute name="dataFormat" type="xs:string">
+      <xs:annotation>
+        <xs:documentation xml:lang="en"><![CDATA[
+Sets the parameter data format.
+        ]]></xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+        
+    <xs:attribute name="example" type="xs:string">
+      <xs:annotation>
+        <xs:documentation xml:lang="en"><![CDATA[
+Sets the example.
+        ]]></xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+      
+  </xs:complexType>
+    
+  <xs:complexType name="blacklistServiceCallServiceFilterConfiguration">
+        
+    <xs:complexContent>
+            
+      <xs:extension base="tns:serviceCallServiceFilterConfiguration">
                 
-        <xs:attribute name="ref" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Reference of a ServiceFilter.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
+        <xs:sequence>
+                    
+          <xs:element maxOccurs="unbounded" minOccurs="0" name="servers" type="xs:string">
+            <xs:annotation>
+              <xs:documentation xml:lang="en"><![CDATA[
+Sets the server blacklist. Each entry can be a list of servers separated by
+comma in the format: servicehost:port,servicehost2:port,servicehost3:port.
+              ]]></xs:documentation>
+            </xs:annotation>
+          </xs:element>
+                  
+        </xs:sequence>
               
       </xs:extension>
           
@@ -17283,11 +17698,11 @@ Reference of a ServiceFilter.
       
   </xs:complexType>
     
-  <xs:complexType name="healthyServiceCallServiceFilterConfiguration">
+  <xs:complexType name="serviceCallServiceFilterConfiguration">
         
     <xs:complexContent>
             
-      <xs:extension base="tns:serviceCallServiceFilterConfiguration">
+      <xs:extension base="tns:serviceCallConfiguration">
                 
         <xs:sequence/>
               
@@ -17297,13 +17712,25 @@ Reference of a ServiceFilter.
       
   </xs:complexType>
     
-  <xs:complexType name="passThroughServiceCallServiceFilterConfiguration">
+  <xs:complexType abstract="true" name="serviceCallConfiguration">
         
     <xs:complexContent>
             
-      <xs:extension base="tns:serviceCallServiceFilterConfiguration">
+      <xs:extension base="tns:identifiedType">
                 
-        <xs:sequence/>
+        <xs:sequence>
+                    
+          <xs:element maxOccurs="unbounded" minOccurs="0" name="properties" type="tns:propertyDefinition">
+            <xs:annotation>
+              <xs:documentation xml:lang="en"><![CDATA[
+Set client properties to use. These properties are specific to what service call
+implementation are in use. For example if using a different one, then the client
+properties are defined according to the specific service in use.
+              ]]></xs:documentation>
+            </xs:annotation>
+          </xs:element>
+                  
+        </xs:sequence>
               
       </xs:extension>
           
@@ -17311,13 +17738,45 @@ Reference of a ServiceFilter.
       
   </xs:complexType>
     
-  <xs:complexType name="defaultServiceCallServiceLoadBalancerConfiguration">
+  <xs:complexType name="cachingServiceCallServiceDiscoveryConfiguration">
         
     <xs:complexContent>
             
-      <xs:extension base="tns:serviceCallServiceLoadBalancerConfiguration">
+      <xs:extension base="tns:serviceCallServiceDiscoveryConfiguration">
                 
-        <xs:sequence/>
+        <xs:sequence>
+                    
+          <xs:choice minOccurs="0">
+                        
+            <xs:element ref="tns:consulServiceDiscovery"/>
+                        
+            <xs:element ref="tns:dnsServiceDiscovery"/>
+                        
+            <xs:element ref="tns:kubernetesServiceDiscovery"/>
+                        
+            <xs:element ref="tns:combinedServiceDiscovery"/>
+                        
+            <xs:element ref="tns:staticServiceDiscovery"/>
+                      
+          </xs:choice>
+                  
+        </xs:sequence>
+                
+        <xs:attribute name="timeout" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Set the time the services will be retained. Default value: 60
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+                
+        <xs:attribute name="units" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Set the time unit for the timeout. Default value: SECONDS
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
               
       </xs:extension>
           
@@ -17325,7 +17784,7 @@ Reference of a ServiceFilter.
       
   </xs:complexType>
     
-  <xs:complexType name="serviceCallServiceLoadBalancerConfiguration">
+  <xs:complexType name="serviceCallServiceDiscoveryConfiguration">
         
     <xs:complexContent>
             
@@ -17339,119 +17798,82 @@ Reference of a ServiceFilter.
       
   </xs:complexType>
     
-  <xs:complexType name="serviceCallConfigurationDefinition">
+  <xs:complexType name="consulServiceCallServiceDiscoveryConfiguration">
         
     <xs:complexContent>
             
-      <xs:extension base="tns:identifiedType">
+      <xs:extension base="tns:serviceCallServiceDiscoveryConfiguration">
                 
-        <xs:sequence>
-                    
-          <xs:choice minOccurs="0">
-                        
-            <xs:element ref="tns:cachingServiceDiscovery"/>
-                        
-            <xs:element ref="tns:combinedServiceDiscovery"/>
-                        
-            <xs:element ref="tns:consulServiceDiscovery"/>
-                        
-            <xs:element ref="tns:dnsServiceDiscovery"/>
-                        
-            <xs:element ref="tns:kubernetesServiceDiscovery"/>
-                        
-            <xs:element ref="tns:staticServiceDiscovery"/>
-                        
-            <xs:element ref="tns:zookeeperServiceDiscovery"/>
-                      
-          </xs:choice>
-                    
-          <xs:choice minOccurs="0">
-                        
-            <xs:element ref="tns:blacklistServiceFilter"/>
-                        
-            <xs:element ref="tns:combinedServiceFilter"/>
-                        
-            <xs:element ref="tns:customServiceFilter"/>
-                        
-            <xs:element ref="tns:healthyServiceFilter"/>
-                        
-            <xs:element ref="tns:passThroughServiceFilter"/>
-                      
-          </xs:choice>
-                    
-          <xs:element minOccurs="0" ref="tns:defaultLoadBalancer"/>
-                    
-          <xs:element minOccurs="0" name="expression" type="tns:serviceCallExpressionConfiguration">
-            <xs:annotation>
-              <xs:documentation xml:lang="en"><![CDATA[
-Configures the Expression using the given configuration.
-              ]]></xs:documentation>
-            </xs:annotation>
-          </xs:element>
-                  
-        </xs:sequence>
+        <xs:sequence/>
                 
-        <xs:attribute name="uri" type="xs:string">
+        <xs:attribute name="url" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-The uri of the endpoint to send to. The uri can be dynamic computed using the
-simple language expression.
+The Consul agent URL.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="component" type="xs:string">
+        <xs:attribute name="datacenter" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-The component to use. Default value: http
+The data center.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="pattern" type="xs:string">
+        <xs:attribute name="aclToken" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the optional ExchangePattern used to invoke this endpoint.
+Sets the ACL token to be used with Consul.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="serviceDiscoveryRef" type="xs:string">
+        <xs:attribute name="userName" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets a reference to a custom ServiceDiscovery to use.
+Sets the username to be used for basic authentication.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="serviceFilterRef" type="xs:string">
+        <xs:attribute name="password" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets a reference to a custom ServiceFilter to use.
+Sets the password to be used for basic authentication.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="serviceChooserRef" type="xs:string">
+        <xs:attribute name="connectTimeoutMillis" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets a reference to a custom ServiceChooser to use.
+Connect timeout for OkHttpClient.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="loadBalancerRef" type="xs:string">
+        <xs:attribute name="readTimeoutMillis" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets a reference to a custom ServiceLoadBalancer to use.
+Read timeout for OkHttpClient.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="expressionRef" type="xs:string">
+        <xs:attribute name="writeTimeoutMillis" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Set a reference to a custom Expression to use.
+Write timeout for OkHttpClient.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+                
+        <xs:attribute name="blockSeconds" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+The seconds to wait for a watch event, default 10 seconds. Default value: 10
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
@@ -17462,7 +17884,7 @@ Set a reference to a custom Expression to use.
       
   </xs:complexType>
     
-  <xs:complexType name="zooKeeperServiceCallServiceDiscoveryConfiguration">
+  <xs:complexType name="dnsServiceCallServiceDiscoveryConfiguration">
         
     <xs:complexContent>
             
@@ -17470,293 +17892,197 @@ Set a reference to a custom Expression to use.
                 
         <xs:sequence/>
                 
-        <xs:attribute name="nodes" type="xs:string" use="required">
+        <xs:attribute name="proto" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-A comma separate list of servers to connect to in the form host:port.
+The transport protocol of the desired service. Default value: _tcp
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="namespace" type="xs:string">
+        <xs:attribute name="domain" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-As ZooKeeper is a shared space, users of a given cluster should stay within a
-pre-defined namespace. If a namespace is set here, all paths will get pre-pended
-with the namespace.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-                
-        <xs:attribute name="reconnectBaseSleepTime" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Initial amount of time to wait between retries.
+The domain name;.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
+              
+      </xs:extension>
+          
+    </xs:complexContent>
+      
+  </xs:complexType>
+    
+  <xs:complexType name="kubernetesServiceCallServiceDiscoveryConfiguration">
+        
+    <xs:complexContent>
+            
+      <xs:extension base="tns:serviceCallServiceDiscoveryConfiguration">
                 
-        <xs:attribute name="reconnectMaxSleepTime" type="xs:string">
+        <xs:sequence/>
+                
+        <xs:attribute name="lookup" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Max time in ms to sleep on each retry.
+How to perform service lookup. Possible values: client, dns, environment. When
+using client, then the client queries the kubernetes master to obtain a list of
+active pods that provides the service, and then random (or round robin) select a
+pod. When using dns the service name is resolved as
+name.namespace.svc.dnsDomain. When using dnssrv the service name is resolved
+with SRV query for _._...svc... When using environment then environment
+variables are used to lookup the service. By default environment is used.
+Default value: environment
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="reconnectMaxRetries" type="xs:string">
+        <xs:attribute name="dnsDomain" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Max number of times to retry.
+Sets the DNS domain to use for DNS lookup.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="sessionTimeout" type="xs:string">
+        <xs:attribute name="portName" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Session timeout.
+Sets the Port Name to use for DNS/DNSSRV lookup.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="connectionTimeout" type="xs:string">
+        <xs:attribute name="portProtocol" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Connection timeout.
+Sets the Port Protocol to use for DNS/DNSSRV lookup.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="basePath" type="xs:string" use="required">
+        <xs:attribute name="namespace" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Set the base path to store in ZK.
+Sets the namespace to use. Will by default use namespace from the ENV variable
+KUBERNETES_MASTER.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
-              
-      </xs:extension>
-          
-    </xs:complexContent>
-      
-  </xs:complexType>
-    
-  <xs:complexType name="serviceCallExpressionConfiguration">
-        
-    <xs:complexContent>
-            
-      <xs:extension base="tns:serviceCallConfiguration">
                 
-        <xs:sequence>
-                    
-          <xs:choice minOccurs="0">
-                        
-            <xs:element ref="tns:expressionDefinition"/>
-                        
-            <xs:element ref="tns:csimple"/>
-                        
-            <xs:element ref="tns:constant"/>
-                        
-            <xs:element ref="tns:datasonnet"/>
-                        
-            <xs:element ref="tns:exchangeProperty"/>
-                        
-            <xs:element ref="tns:groovy"/>
-                        
-            <xs:element ref="tns:header"/>
-                        
-            <xs:element ref="tns:hl7terser"/>
-                        
-            <xs:element ref="tns:js"/>
-                        
-            <xs:element ref="tns:joor"/>
-                        
-            <xs:element ref="tns:jq"/>
-                        
-            <xs:element ref="tns:jsonpath"/>
-                        
-            <xs:element ref="tns:language"/>
-                        
-            <xs:element ref="tns:method"/>
-                        
-            <xs:element ref="tns:mvel"/>
-                        
-            <xs:element ref="tns:ognl"/>
-                        
-            <xs:element ref="tns:python"/>
-                        
-            <xs:element ref="tns:ref"/>
-                        
-            <xs:element ref="tns:simple"/>
-                        
-            <xs:element ref="tns:spel"/>
-                        
-            <xs:element ref="tns:tokenize"/>
-                        
-            <xs:element ref="tns:xtokenize"/>
-                        
-            <xs:element ref="tns:xpath"/>
-                        
-            <xs:element ref="tns:xquery"/>
-                      
-          </xs:choice>
-                  
-        </xs:sequence>
+        <xs:attribute name="apiVersion" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Sets the API version when using client lookup.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
                 
-        <xs:attribute name="hostHeader" type="xs:string">
+        <xs:attribute name="masterUrl" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-The header that holds the service host information, default
-ServiceCallConstants.SERVICE_HOST. Default value: CamelServiceCallServiceHost
+Sets the URL to the master when using client lookup.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="portHeader" type="xs:string">
+        <xs:attribute name="username" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-The header that holds the service port information, default
-ServiceCallConstants.SERVICE_PORT. Default value: CamelServiceCallServicePort
+Sets the username for authentication when using client lookup.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
-              
-      </xs:extension>
-          
-    </xs:complexContent>
-      
-  </xs:complexType>
-    
-  <xs:complexType name="serviceCallDefinition">
-        
-    <xs:complexContent>
-            
-      <xs:extension base="tns:noOutputDefinition">
                 
-        <xs:sequence>
-                    
-          <xs:choice minOccurs="0">
-                        
-            <xs:element ref="tns:cachingServiceDiscovery"/>
-                        
-            <xs:element ref="tns:combinedServiceDiscovery"/>
-                        
-            <xs:element ref="tns:consulServiceDiscovery"/>
-                        
-            <xs:element ref="tns:dnsServiceDiscovery"/>
-                        
-            <xs:element ref="tns:kubernetesServiceDiscovery"/>
-                        
-            <xs:element ref="tns:staticServiceDiscovery"/>
-                        
-            <xs:element ref="tns:zookeeperServiceDiscovery"/>
-                      
-          </xs:choice>
-                    
-          <xs:choice minOccurs="0">
-                        
-            <xs:element ref="tns:blacklistServiceFilter"/>
-                        
-            <xs:element ref="tns:combinedServiceFilter"/>
-                        
-            <xs:element ref="tns:customServiceFilter"/>
-                        
-            <xs:element ref="tns:healthyServiceFilter"/>
-                        
-            <xs:element ref="tns:passThroughServiceFilter"/>
-                      
-          </xs:choice>
-                    
-          <xs:element minOccurs="0" ref="tns:defaultLoadBalancer"/>
-                    
-          <xs:element minOccurs="0" name="expression" type="tns:serviceCallExpressionConfiguration">
-            <xs:annotation>
-              <xs:documentation xml:lang="en"><![CDATA[
-Configures the Expression using the given configuration.
-              ]]></xs:documentation>
-            </xs:annotation>
-          </xs:element>
-                  
-        </xs:sequence>
+        <xs:attribute name="password" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Sets the password for authentication when using client lookup.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
                 
-        <xs:attribute name="name" type="xs:string">
+        <xs:attribute name="oauthToken" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the name of the service to use.
+Sets the OAUTH token for authentication (instead of username/password) when
+using client lookup.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="uri" type="xs:string">
+        <xs:attribute name="caCertData" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-The uri of the endpoint to send to. The uri can be dynamic computed using the
-org.apache.camel.language.simple.SimpleLanguage expression.
+Sets the Certificate Authority data when using client lookup.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="component" type="xs:string">
+        <xs:attribute name="caCertFile" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-The component to use. Default value: http
+Sets the Certificate Authority data that are loaded from the file when using
+client lookup.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="pattern" type="xs:string">
+        <xs:attribute name="clientCertData" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the optional ExchangePattern used to invoke this endpoint.
+Sets the Client Certificate data when using client lookup.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="configurationRef" type="xs:string">
+        <xs:attribute name="clientCertFile" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Refers to a ServiceCall configuration to use.
+Sets the Client Certificate data that are loaded from the file when using client
+lookup.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="serviceDiscoveryRef" type="xs:string">
+        <xs:attribute name="clientKeyAlgo" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets a reference to a custom ServiceDiscovery to use.
+Sets the Client Keystore algorithm, such as RSA when using client lookup.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="serviceFilterRef" type="xs:string">
+        <xs:attribute name="clientKeyData" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets a reference to a custom ServiceFilter to use.
+Sets the Client Keystore data when using client lookup.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="serviceChooserRef" type="xs:string">
+        <xs:attribute name="clientKeyFile" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets a reference to a custom ServiceChooser to use.
+Sets the Client Keystore data that are loaded from the file when using client
+lookup.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="loadBalancerRef" type="xs:string">
+        <xs:attribute name="clientKeyPassphrase" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets a reference to a custom ServiceLoadBalancer to use.
+Sets the Client Keystore passphrase when using client lookup.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="expressionRef" type="xs:string">
+        <xs:attribute name="trustCerts" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Set a reference to a custom Expression to use.
+Sets whether to turn on trust certificate check when using client lookup.
+Default value: false
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
@@ -17767,131 +18093,54 @@ Set a reference to a custom Expression to use.
       
   </xs:complexType>
     
-  <xs:complexType final="extension restriction" name="serviceCallDefinitionConstants">
-        
-    <xs:sequence/>
-      
-  </xs:complexType>
-    
-  <xs:complexType name="serviceCallServiceChooserConfiguration">
+  <xs:complexType name="combinedServiceCallServiceDiscoveryConfiguration">
         
     <xs:complexContent>
             
-      <xs:extension base="tns:serviceCallConfiguration">
+      <xs:extension base="tns:serviceCallServiceDiscoveryConfiguration">
                 
-        <xs:sequence/>
-              
-      </xs:extension>
-          
-    </xs:complexContent>
-      
-  </xs:complexType>
-    
-  <xs:complexType name="dataFormatsDefinition">
-        
-    <xs:sequence>
-            
-      <xs:choice maxOccurs="unbounded" minOccurs="0">
-                
-        <xs:element ref="tns:asn1"/>
-                
-        <xs:element ref="tns:avro"/>
-                
-        <xs:element ref="tns:barcode"/>
-                
-        <xs:element ref="tns:base64"/>
-                
-        <xs:element ref="tns:bindy"/>
-                
-        <xs:element ref="tns:cbor"/>
-                
-        <xs:element ref="tns:crypto"/>
-                
-        <xs:element ref="tns:csv"/>
-                
-        <xs:element ref="tns:custom"/>
-                
-        <xs:element ref="tns:fhirJson"/>
-                
-        <xs:element ref="tns:fhirXml"/>
-                
-        <xs:element ref="tns:flatpack"/>
-                
-        <xs:element ref="tns:grok"/>
-                
-        <xs:element ref="tns:gzipDeflater"/>
-                
-        <xs:element ref="tns:hl7"/>
-                
-        <xs:element ref="tns:ical"/>
-                
-        <xs:element ref="tns:jacksonXml"/>
-                
-        <xs:element ref="tns:jaxb"/>
-                
-        <xs:element ref="tns:json"/>
-                
-        <xs:element ref="tns:jsonApi"/>
-                
-        <xs:element ref="tns:lzf"/>
-                
-        <xs:element ref="tns:mimeMultipart"/>
-                
-        <xs:element ref="tns:protobuf"/>
-                
-        <xs:element ref="tns:rss"/>
-                
-        <xs:element ref="tns:soap"/>
-                
-        <xs:element ref="tns:swiftMt"/>
-                
-        <xs:element ref="tns:swiftMx"/>
-                
-        <xs:element ref="tns:syslog"/>
-                
-        <xs:element ref="tns:tarFile"/>
-                
-        <xs:element ref="tns:thrift"/>
-                
-        <xs:element ref="tns:tidyMarkup"/>
-                
-        <xs:element ref="tns:univocityCsv"/>
-                
-        <xs:element ref="tns:univocityFixed"/>
-                
-        <xs:element ref="tns:univocityTsv"/>
-                
-        <xs:element ref="tns:xmlSecurity"/>
-                
-        <xs:element ref="tns:pgp"/>
-                
-        <xs:element ref="tns:yaml"/>
-                
-        <xs:element ref="tns:zipDeflater"/>
-                
-        <xs:element ref="tns:zipFile"/>
+        <xs:sequence>
+                    
+          <xs:choice maxOccurs="unbounded" minOccurs="0">
+                        
+            <xs:element ref="tns:consulServiceDiscovery"/>
+                        
+            <xs:element ref="tns:dnsServiceDiscovery"/>
+                        
+            <xs:element ref="tns:kubernetesServiceDiscovery"/>
+                        
+            <xs:element ref="tns:staticServiceDiscovery"/>
+                        
+            <xs:element ref="tns:cachingServiceDiscovery"/>
+                      
+          </xs:choice>
+                  
+        </xs:sequence>
               
-      </xs:choice>
+      </xs:extension>
           
-    </xs:sequence>
+    </xs:complexContent>
       
   </xs:complexType>
     
-  <xs:complexType name="refErrorHandlerDefinition">
+  <xs:complexType name="staticServiceCallServiceDiscoveryConfiguration">
         
     <xs:complexContent>
             
-      <xs:extension base="tns:baseErrorHandlerDefinition">
-                
-        <xs:sequence/>
+      <xs:extension base="tns:serviceCallServiceDiscoveryConfiguration">
                 
-        <xs:attribute name="ref" type="xs:string" use="required">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-References to an existing or custom error handler.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
+        <xs:sequence>
+                    
+          <xs:element maxOccurs="unbounded" minOccurs="0" name="servers" type="xs:string">
+            <xs:annotation>
+              <xs:documentation xml:lang="en"><![CDATA[
+Sets the server list. Each entry can be a list of servers separated by comma in
+the format: servicehost:port,servicehost2:port,servicehost3:port.
+              ]]></xs:documentation>
+            </xs:annotation>
+          </xs:element>
+                  
+        </xs:sequence>
               
       </xs:extension>
           
@@ -17899,660 +18148,687 @@ References to an existing or custom error handler.
       
   </xs:complexType>
     
-  <xs:complexType name="cSimpleExpression">
-        
-    <xs:simpleContent>
-            
-      <xs:extension base="tns:typedExpressionDefinition"/>
-          
-    </xs:simpleContent>
-      
-  </xs:complexType>
-    
-  <xs:complexType abstract="true" name="typedExpressionDefinition">
+  <xs:complexType name="combinedServiceCallServiceFilterConfiguration">
         
-    <xs:simpleContent>
+    <xs:complexContent>
             
-      <xs:extension base="tns:expression">
+      <xs:extension base="tns:serviceCallServiceFilterConfiguration">
                 
-        <xs:attribute name="resultType" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Sets the class of the result type (type from output).
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
+        <xs:sequence>
+                    
+          <xs:choice maxOccurs="unbounded" minOccurs="0">
+                        
+            <xs:element ref="tns:blacklistServiceFilter"/>
+                        
+            <xs:element ref="tns:customServiceFilter"/>
+                        
+            <xs:element ref="tns:healthyServiceFilter"/>
+                        
+            <xs:element ref="tns:passThroughServiceFilter"/>
+                      
+          </xs:choice>
+                  
+        </xs:sequence>
               
       </xs:extension>
           
-    </xs:simpleContent>
-      
-  </xs:complexType>
-    
-  <xs:complexType name="constantExpression">
-        
-    <xs:simpleContent>
-            
-      <xs:extension base="tns:typedExpressionDefinition"/>
-          
-    </xs:simpleContent>
+    </xs:complexContent>
       
   </xs:complexType>
     
-  <xs:complexType name="datasonnetExpression">
+  <xs:complexType name="customServiceCallServiceFilterConfiguration">
         
-    <xs:simpleContent>
+    <xs:complexContent>
             
-      <xs:extension base="tns:typedExpressionDefinition">
+      <xs:extension base="tns:serviceCallServiceFilterConfiguration">
                 
-        <xs:attribute name="bodyMediaType" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-The String representation of the message's body MediaType.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
+        <xs:sequence/>
                 
-        <xs:attribute name="outputMediaType" type="xs:string">
+        <xs:attribute name="ref" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-The String representation of the MediaType to output.
+Reference of a ServiceFilter.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
               
       </xs:extension>
           
-    </xs:simpleContent>
+    </xs:complexContent>
       
   </xs:complexType>
     
-  <xs:complexType name="exchangePropertyExpression">
+  <xs:complexType name="healthyServiceCallServiceFilterConfiguration">
         
-    <xs:simpleContent>
+    <xs:complexContent>
             
-      <xs:extension base="tns:expression"/>
+      <xs:extension base="tns:serviceCallServiceFilterConfiguration">
+                
+        <xs:sequence/>
+              
+      </xs:extension>
           
-    </xs:simpleContent>
+    </xs:complexContent>
       
   </xs:complexType>
     
-  <xs:complexType name="groovyExpression">
+  <xs:complexType name="passThroughServiceCallServiceFilterConfiguration">
         
-    <xs:simpleContent>
+    <xs:complexContent>
             
-      <xs:extension base="tns:typedExpressionDefinition"/>
+      <xs:extension base="tns:serviceCallServiceFilterConfiguration">
+                
+        <xs:sequence/>
+              
+      </xs:extension>
           
-    </xs:simpleContent>
+    </xs:complexContent>
       
   </xs:complexType>
     
-  <xs:complexType name="headerExpression">
+  <xs:complexType name="defaultServiceCallServiceLoadBalancerConfiguration">
         
-    <xs:simpleContent>
+    <xs:complexContent>
             
-      <xs:extension base="tns:expression"/>
+      <xs:extension base="tns:serviceCallServiceLoadBalancerConfiguration">
+                
+        <xs:sequence/>
+              
+      </xs:extension>
           
-    </xs:simpleContent>
+    </xs:complexContent>
       
   </xs:complexType>
     
-  <xs:complexType name="hl7TerserExpression">
+  <xs:complexType name="serviceCallServiceLoadBalancerConfiguration">
         
-    <xs:simpleContent>
+    <xs:complexContent>
             
-      <xs:extension base="tns:singleInputTypedExpressionDefinition"/>
+      <xs:extension base="tns:serviceCallConfiguration">
+                
+        <xs:sequence/>
+              
+      </xs:extension>
           
-    </xs:simpleContent>
+    </xs:complexContent>
       
   </xs:complexType>
     
-  <xs:complexType abstract="true" name="singleInputTypedExpressionDefinition">
+  <xs:complexType name="serviceCallConfigurationDefinition">
         
-    <xs:simpleContent>
+    <xs:complexContent>
             
-      <xs:extension base="tns:typedExpressionDefinition">
+      <xs:extension base="tns:identifiedType">
                 
-        <xs:attribute name="headerName" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Name of header to use as input, instead of the message body It has as higher
-precedent than the propertyName if both are set.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-                
-        <xs:attribute name="propertyName" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Name of property to use as input, instead of the message body. It has a lower
-precedent than the headerName if both are set.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-              
-      </xs:extension>
-          
-    </xs:simpleContent>
-      
-  </xs:complexType>
-    
-  <xs:complexType name="javaScriptExpression">
-        
-    <xs:simpleContent>
-            
-      <xs:extension base="tns:typedExpressionDefinition"/>
-          
-    </xs:simpleContent>
-      
-  </xs:complexType>
-    
-  <xs:complexType name="joorExpression">
-        
-    <xs:simpleContent>
-            
-      <xs:extension base="tns:typedExpressionDefinition">
+        <xs:sequence>
+                    
+          <xs:choice minOccurs="0">
+                        
+            <xs:element ref="tns:cachingServiceDiscovery"/>
+                        
+            <xs:element ref="tns:combinedServiceDiscovery"/>
+                        
+            <xs:element ref="tns:consulServiceDiscovery"/>
+                        
+            <xs:element ref="tns:dnsServiceDiscovery"/>
+                        
+            <xs:element ref="tns:kubernetesServiceDiscovery"/>
+                        
+            <xs:element ref="tns:staticServiceDiscovery"/>
+                        
+            <xs:element ref="tns:zookeeperServiceDiscovery"/>
+                      
+          </xs:choice>
+                    
+          <xs:choice minOccurs="0">
+                        
+            <xs:element ref="tns:blacklistServiceFilter"/>
+                        
+            <xs:element ref="tns:combinedServiceFilter"/>
+                        
+            <xs:element ref="tns:customServiceFilter"/>
+                        
+            <xs:element ref="tns:healthyServiceFilter"/>
+                        
+            <xs:element ref="tns:passThroughServiceFilter"/>
+                      
+          </xs:choice>
+                    
+          <xs:element minOccurs="0" ref="tns:defaultLoadBalancer"/>
+                    
+          <xs:element minOccurs="0" name="expression" type="tns:serviceCallExpressionConfiguration">
+            <xs:annotation>
+              <xs:documentation xml:lang="en"><![CDATA[
+Configures the Expression using the given configuration.
+              ]]></xs:documentation>
+            </xs:annotation>
+          </xs:element>
+                  
+        </xs:sequence>
                 
-        <xs:attribute name="preCompile" type="xs:string">
+        <xs:attribute name="uri" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Whether the expression should be pre compiled once during initialization phase.
-If this is turned off, then the expression is reloaded and compiled on each
-evaluation. Default value: true
+The uri of the endpoint to send to. The uri can be dynamic computed using the
+simple language expression.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="singleQuotes" type="xs:string">
+        <xs:attribute name="component" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Whether single quotes can be used as replacement for double quotes. This is
-convenient when you need to work with strings inside strings. Default value:
-true
+The component to use. Default value: http
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
-              
-      </xs:extension>
-          
-    </xs:simpleContent>
-      
-  </xs:complexType>
-    
-  <xs:complexType name="jqExpression">
-        
-    <xs:simpleContent>
-            
-      <xs:extension base="tns:singleInputTypedExpressionDefinition"/>
-          
-    </xs:simpleContent>
-      
-  </xs:complexType>
-    
-  <xs:complexType name="jsonPathExpression">
-        
-    <xs:simpleContent>
-            
-      <xs:extension base="tns:singleInputTypedExpressionDefinition">
                 
-        <xs:attribute name="suppressExceptions" type="xs:string">
+        <xs:attribute name="pattern" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Whether to suppress exceptions such as PathNotFoundException. Default value:
-false
+Sets the optional ExchangePattern used to invoke this endpoint.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="allowSimple" type="xs:string">
+        <xs:attribute name="serviceDiscoveryRef" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Whether to allow in inlined Simple exceptions in the JSONPath expression.
-Default value: true
+Sets a reference to a custom ServiceDiscovery to use.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="allowEasyPredicate" type="xs:string">
+        <xs:attribute name="serviceFilterRef" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Whether to allow using the easy predicate parser to pre-parse predicates.
-Default value: true
+Sets a reference to a custom ServiceFilter to use.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="writeAsString" type="xs:string">
+        <xs:attribute name="serviceChooserRef" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Whether to write the output of each row/element as a JSON String value instead
-of a Map/POJO value. Default value: false
+Sets a reference to a custom ServiceChooser to use.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="unpackArray" type="xs:string">
+        <xs:attribute name="loadBalancerRef" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Whether to unpack a single element json-array into an object. Default value:
-false
+Sets a reference to a custom ServiceLoadBalancer to use.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="option" type="xs:string">
+        <xs:attribute name="expressionRef" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-To configure additional options on JSONPath. Multiple values can be separated by
-comma.
+Set a reference to a custom Expression to use.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
               
       </xs:extension>
           
-    </xs:simpleContent>
+    </xs:complexContent>
       
   </xs:complexType>
     
-  <xs:complexType name="languageExpression">
+  <xs:complexType name="zooKeeperServiceCallServiceDiscoveryConfiguration">
         
-    <xs:simpleContent>
+    <xs:complexContent>
             
-      <xs:extension base="tns:expression">
+      <xs:extension base="tns:serviceCallServiceDiscoveryConfiguration">
                 
-        <xs:attribute name="language" type="xs:string" use="required">
+        <xs:sequence/>
+                
+        <xs:attribute name="nodes" type="xs:string" use="required">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-The name of the language to use.
+A comma separate list of servers to connect to in the form host:port.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
-              
-      </xs:extension>
-          
-    </xs:simpleContent>
-      
-  </xs:complexType>
-    
-  <xs:complexType name="methodCallExpression">
-        
-    <xs:simpleContent>
-            
-      <xs:extension base="tns:typedExpressionDefinition">
                 
-        <xs:attribute name="ref" type="xs:string">
+        <xs:attribute name="namespace" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Reference to an existing bean (bean id) to lookup in the registry.
+As ZooKeeper is a shared space, users of a given cluster should stay within a
+pre-defined namespace. If a namespace is set here, all paths will get pre-pended
+with the namespace.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="method" type="xs:string">
+        <xs:attribute name="reconnectBaseSleepTime" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Name of method to call.
+Initial amount of time to wait between retries.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="beanType" type="xs:string">
+        <xs:attribute name="reconnectMaxSleepTime" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Class name (fully qualified) of the bean to use Will lookup in registry and if
-there is a single instance of the same type, then the existing bean is used,
-otherwise a new bean is created (requires a default no-arg constructor).
+Max time in ms to sleep on each retry.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="scope" type="xs:string">
+        <xs:attribute name="reconnectMaxRetries" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Scope of bean. When using singleton scope (default) the bean is created or
-looked up only once and reused for the lifetime of the endpoint. The bean should
-be thread-safe in case concurrent threads is calling the bean at the same time.
-When using request scope the bean is created or looked up once per request
-(exchange). This can be used if you want to store state on a bean while
-processing a request and you want to call the same bean instance multiple times
-while processing the request. The bean does not have to be thread-safe as the
-instance is only called from the same request. When using prototype scope, then
-the bean will be looked up or created per call. However in case of lookup then
-this is delegated to the bean registry such as Spring or CDI (if in use), which
-depends on their configuration can act as either singleton or prototype scope.
-So when using prototype scope then this depends on the bean registry
-implementation. Default value: Singleton
+Max number of times to retry.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
-              
-      </xs:extension>
-          
-    </xs:simpleContent>
-      
-  </xs:complexType>
-    
-  <xs:complexType name="mvelExpression">
-        
-    <xs:simpleContent>
-            
-      <xs:extension base="tns:typedExpressionDefinition"/>
-          
-    </xs:simpleContent>
-      
-  </xs:complexType>
-    
-  <xs:complexType abstract="true" name="namespaceAwareExpression">
-        
-    <xs:simpleContent>
-            
-      <xs:extension base="tns:singleInputExpressionDefinition"/>
-          
-    </xs:simpleContent>
-      
-  </xs:complexType>
-    
-  <xs:complexType abstract="true" name="singleInputExpressionDefinition">
-        
-    <xs:simpleContent>
-            
-      <xs:extension base="tns:expression">
                 
-        <xs:attribute name="headerName" type="xs:string">
+        <xs:attribute name="sessionTimeout" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Name of header to use as input, instead of the message body It has as higher
-precedent than the propertyName if both are set.
+Session timeout.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="propertyName" type="xs:string">
+        <xs:attribute name="connectionTimeout" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Name of property to use as input, instead of the message body. It has a lower
-precedent than the headerName if both are set.
+Connection timeout.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+                
+        <xs:attribute name="basePath" type="xs:string" use="required">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Set the base path to store in ZK.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
               
       </xs:extension>
           
-    </xs:simpleContent>
+    </xs:complexContent>
       
   </xs:complexType>
     
-  <xs:complexType name="ognlExpression">
-        
-    <xs:simpleContent>
-            
-      <xs:extension base="tns:typedExpressionDefinition"/>
-          
-    </xs:simpleContent>
-      
-  </xs:complexType>
-    
-  <xs:complexType name="pythonExpression">
-        
-    <xs:simpleContent>
-            
-      <xs:extension base="tns:typedExpressionDefinition"/>
-          
-    </xs:simpleContent>
-      
-  </xs:complexType>
-    
-  <xs:complexType name="refExpression">
-        
-    <xs:simpleContent>
-            
-      <xs:extension base="tns:typedExpressionDefinition"/>
-          
-    </xs:simpleContent>
-      
-  </xs:complexType>
-    
-  <xs:complexType name="simpleExpression">
-        
-    <xs:simpleContent>
-            
-      <xs:extension base="tns:typedExpressionDefinition"/>
-          
-    </xs:simpleContent>
-      
-  </xs:complexType>
-    
-  <xs:complexType name="spELExpression">
+  <xs:complexType name="serviceCallExpressionConfiguration">
         
-    <xs:simpleContent>
+    <xs:complexContent>
             
-      <xs:extension base="tns:typedExpressionDefinition"/>
+      <xs:extension base="tns:serviceCallConfiguration">
+                
+        <xs:sequence>
+                    
+          <xs:choice minOccurs="0">
+                        
+            <xs:element ref="tns:expressionDefinition"/>
+                        
+            <xs:element ref="tns:csimple"/>
+                        
+            <xs:element ref="tns:constant"/>
+                        
+            <xs:element ref="tns:datasonnet"/>
+                        
+            <xs:element ref="tns:exchangeProperty"/>
+                        
+            <xs:element ref="tns:groovy"/>
+                        
+            <xs:element ref="tns:header"/>
+                        
+            <xs:element ref="tns:hl7terser"/>
+                        
+            <xs:element ref="tns:js"/>
+                        
+            <xs:element ref="tns:joor"/>
+                        
+            <xs:element ref="tns:jq"/>
+                        
+            <xs:element ref="tns:jsonpath"/>
+                        
+            <xs:element ref="tns:language"/>
+                        
+            <xs:element ref="tns:method"/>
+                        
+            <xs:element ref="tns:mvel"/>
+                        
+            <xs:element ref="tns:ognl"/>
+                        
+            <xs:element ref="tns:python"/>
+                        
+            <xs:element ref="tns:ref"/>
+                        
+            <xs:element ref="tns:simple"/>
+                        
+            <xs:element ref="tns:spel"/>
+                        
+            <xs:element ref="tns:tokenize"/>
+                        
+            <xs:element ref="tns:xtokenize"/>
+                        
+            <xs:element ref="tns:xpath"/>
+                        
+            <xs:element ref="tns:xquery"/>
+                      
+          </xs:choice>
+                  
+        </xs:sequence>
+                
+        <xs:attribute name="hostHeader" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+The header that holds the service host information, default
+ServiceCallConstants.SERVICE_HOST. Default value: CamelServiceCallServiceHost
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+                
+        <xs:attribute name="portHeader" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+The header that holds the service port information, default
+ServiceCallConstants.SERVICE_PORT. Default value: CamelServiceCallServicePort
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+              
+      </xs:extension>
           
-    </xs:simpleContent>
+    </xs:complexContent>
       
   </xs:complexType>
     
-  <xs:complexType name="tokenizerExpression">
+  <xs:complexType name="serviceCallDefinition">
         
-    <xs:simpleContent>
+    <xs:complexContent>
             
-      <xs:extension base="tns:singleInputExpressionDefinition">
+      <xs:extension base="tns:noOutputDefinition">
                 
-        <xs:attribute name="token" type="xs:string" use="required">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-The (start) token to use as tokenizer, for example you can use the new line
-token. You can use simple language as the token to support dynamic tokens.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
+        <xs:sequence>
+                    
+          <xs:choice minOccurs="0">
+                        
+            <xs:element ref="tns:cachingServiceDiscovery"/>
+                        
+            <xs:element ref="tns:combinedServiceDiscovery"/>
+                        
+            <xs:element ref="tns:consulServiceDiscovery"/>
+                        
+            <xs:element ref="tns:dnsServiceDiscovery"/>
+                        
+            <xs:element ref="tns:kubernetesServiceDiscovery"/>
+                        
+            <xs:element ref="tns:staticServiceDiscovery"/>
+                        
+            <xs:element ref="tns:zookeeperServiceDiscovery"/>
+                      
+          </xs:choice>
+                    
+          <xs:choice minOccurs="0">
+                        
+            <xs:element ref="tns:blacklistServiceFilter"/>
+                        
+            <xs:element ref="tns:combinedServiceFilter"/>
+                        
+            <xs:element ref="tns:customServiceFilter"/>
+                        
+            <xs:element ref="tns:healthyServiceFilter"/>
+                        
+            <xs:element ref="tns:passThroughServiceFilter"/>
+                      
+          </xs:choice>
+                    
+          <xs:element minOccurs="0" ref="tns:defaultLoadBalancer"/>
+                    
+          <xs:element minOccurs="0" name="expression" type="tns:serviceCallExpressionConfiguration">
+            <xs:annotation>
+              <xs:documentation xml:lang="en"><![CDATA[
+Configures the Expression using the given configuration.
+              ]]></xs:documentation>
+            </xs:annotation>
+          </xs:element>
+                  
+        </xs:sequence>
                 
-        <xs:attribute name="endToken" type="xs:string">
+        <xs:attribute name="name" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-The end token to use as tokenizer if using start/end token pairs. You can use
-simple language as the token to support dynamic tokens.
+Sets the name of the service to use.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="inheritNamespaceTagName" type="xs:string">
+        <xs:attribute name="uri" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-To inherit namespaces from a root/parent tag name when using XML You can use
-simple language as the tag name to support dynamic names.
+The uri of the endpoint to send to. The uri can be dynamic computed using the
+org.apache.camel.language.simple.SimpleLanguage expression.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="regex" type="xs:string">
+        <xs:attribute name="component" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-If the token is a regular expression pattern. The default value is false.
-Default value: false
+The component to use. Default value: http
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="xml" type="xs:string">
+        <xs:attribute name="pattern" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Whether the input is XML messages. This option must be set to true if working
-with XML payloads. Default value: false
+Sets the optional ExchangePattern used to invoke this endpoint.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="includeTokens" type="xs:string">
+        <xs:attribute name="configurationRef" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Whether to include the tokens in the parts when using pairs. When including
-tokens then the endToken property must also be configured (to use pair mode).
-The default value is false. Default value: false
+Refers to a ServiceCall configuration to use.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="group" type="xs:string">
+        <xs:attribute name="serviceDiscoveryRef" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-To group N parts together, for example to split big files into chunks of 1000
-lines. You can use simple language as the group to support dynamic group sizes.
+Sets a reference to a custom ServiceDiscovery to use.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="groupDelimiter" type="xs:string">
+        <xs:attribute name="serviceFilterRef" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the delimiter to use when grouping. If this has not been set then token
-will be used as the delimiter.
+Sets a reference to a custom ServiceFilter to use.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="skipFirst" type="xs:string">
+        <xs:attribute name="serviceChooserRef" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-To skip the very first element. Default value: false
+Sets a reference to a custom ServiceChooser to use.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
-              
-      </xs:extension>
-          
-    </xs:simpleContent>
-      
-  </xs:complexType>
-    
-  <xs:complexType name="xmlTokenizerExpression">
-        
-    <xs:simpleContent>
-            
-      <xs:extension base="tns:namespaceAwareExpression">
                 
-        <xs:attribute name="mode" type="xs:string">
+        <xs:attribute name="loadBalancerRef" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-The extraction mode. The available extraction modes are: i - injecting the
-contextual namespace bindings into the extracted token (default) w - wrapping
-the extracted token in its ancestor context u - unwrapping the extracted token
-to its child content t - extracting the text content of the specified element.
-Default value: i
+Sets a reference to a custom ServiceLoadBalancer to use.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="group" type="xs:string">
+        <xs:attribute name="expressionRef" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-To group N parts together.
+Set a reference to a custom Expression to use.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
               
       </xs:extension>
           
-    </xs:simpleContent>
+    </xs:complexContent>
       
   </xs:complexType>
     
-  <xs:complexType name="xPathExpression">
+  <xs:complexType final="extension restriction" name="serviceCallDefinitionConstants">
         
-    <xs:simpleContent>
-            
-      <xs:extension base="tns:namespaceAwareExpression">
-                
-        <xs:attribute name="documentType" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Name of class for document type The default value is org.w3c.dom.Document.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
+    <xs:sequence/>
+      
+  </xs:complexType>
+    
+  <xs:complexType name="serviceCallServiceChooserConfiguration">
+        
+    <xs:complexContent>
+            
+      <xs:extension base="tns:serviceCallConfiguration">
                 
-        <xs:attribute name="resultType" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Sets the class name of the result type (type from output) The default result
-type is NodeSet. Default value: NODESET
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
+        <xs:sequence/>
+              
+      </xs:extension>
+          
+    </xs:complexContent>
+      
+  </xs:complexType>
+    
+  <xs:complexType name="dataFormatsDefinition">
+        
+    <xs:sequence>
+            
+      <xs:choice maxOccurs="unbounded" minOccurs="0">
                 
-        <xs:attribute name="saxon" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Whether to use Saxon. Default value: false
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
+        <xs:element ref="tns:asn1"/>
                 
-        <xs:attribute name="factoryRef" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-References to a custom XPathFactory to lookup in the registry.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
+        <xs:element ref="tns:avro"/>
                 
-        <xs:attribute name="objectModel" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-The XPath object model to use.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
+        <xs:element ref="tns:barcode"/>
                 
-        <xs:attribute name="logNamespaces" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Whether to log namespaces which can assist during troubleshooting. Default
-value: false
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
+        <xs:element ref="tns:base64"/>
                 
-        <xs:attribute name="threadSafety" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Whether to enable thread-safety for the returned result of the xpath expression.
-This applies to when using NODESET as the result type, and the returned set has
-multiple elements. In this situation there can be thread-safety issues if you
-process the NODESET concurrently such as from a Camel Splitter EIP in parallel
-processing mode. This option prevents concurrency issues by doing defensive
-copies of the nodes. It is recommended to turn this option on if you are using
-camel-saxon or Saxon in your application. Saxon has thread-safety issues which
-can be prevented by turning this option on. Default value: false
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
+        <xs:element ref="tns:bindy"/>
                 
-        <xs:attribute name="preCompile" type="xs:string">
+        <xs:element ref="tns:cbor"/>
+                
+        <xs:element ref="tns:crypto"/>
+                
+        <xs:element ref="tns:csv"/>
+                
+        <xs:element ref="tns:custom"/>
+                
+        <xs:element ref="tns:fhirJson"/>
+                
+        <xs:element ref="tns:fhirXml"/>
+                
+        <xs:element ref="tns:flatpack"/>
+                
+        <xs:element ref="tns:grok"/>
+                
+        <xs:element ref="tns:gzipDeflater"/>
+                
+        <xs:element ref="tns:hl7"/>
+                
+        <xs:element ref="tns:ical"/>
+                
+        <xs:element ref="tns:jacksonXml"/>
+                
+        <xs:element ref="tns:jaxb"/>
+                
+        <xs:element ref="tns:json"/>
+                
+        <xs:element ref="tns:jsonApi"/>
+                
+        <xs:element ref="tns:lzf"/>
+                
+        <xs:element ref="tns:mimeMultipart"/>
+                
+        <xs:element ref="tns:protobuf"/>
+                
+        <xs:element ref="tns:rss"/>
+                
+        <xs:element ref="tns:soap"/>
+                
+        <xs:element ref="tns:swiftMt"/>
+                
+        <xs:element ref="tns:swiftMx"/>
+                
+        <xs:element ref="tns:syslog"/>
+                
+        <xs:element ref="tns:tarFile"/>
+                
+        <xs:element ref="tns:thrift"/>
+                
+        <xs:element ref="tns:tidyMarkup"/>
+                
+        <xs:element ref="tns:univocityCsv"/>
+                
+        <xs:element ref="tns:univocityFixed"/>
+                
+        <xs:element ref="tns:univocityTsv"/>
+                
+        <xs:element ref="tns:xmlSecurity"/>
+                
+        <xs:element ref="tns:pgp"/>
+                
+        <xs:element ref="tns:yaml"/>
+                
+        <xs:element ref="tns:zipDeflater"/>
+                
+        <xs:element ref="tns:zipFile"/>
+              
+      </xs:choice>
+          
+    </xs:sequence>
+      
+  </xs:complexType>
+    
+  <xs:complexType name="refErrorHandlerDefinition">
+        
+    <xs:complexContent>
+            
+      <xs:extension base="tns:baseErrorHandlerDefinition">
+                
+        <xs:sequence/>
+                
+        <xs:attribute name="ref" type="xs:string" use="required">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Whether to enable pre-compiling the xpath expression during initialization
-phase. pre-compile is enabled by default. This can be used to turn off, for
-example in cases the compilation phase is desired at the starting phase, such as
-if the application is ahead of time compiled (for example with camel-quarkus)
-which would then load the xpath factory of the built operating system, and not a
-JVM runtime. Default value: true
+References to an existing or custom error handler.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
               
       </xs:extension>
           
+    </xs:complexContent>
+      
+  </xs:complexType>
+    
+  <xs:complexType name="cSimpleExpression">
+        
+    <xs:simpleContent>
+            
+      <xs:extension base="tns:typedExpressionDefinition"/>
+          
     </xs:simpleContent>
       
   </xs:complexType>
     
-  <xs:complexType name="xQueryExpression">
+  <xs:complexType abstract="true" name="typedExpressionDefinition">
         
     <xs:simpleContent>
             
-      <xs:extension base="tns:namespaceAwareExpression">
+      <xs:extension base="tns:expression">
                 
         <xs:attribute name="resultType" type="xs:string">
           <xs:annotation>
@@ -18561,25 +18837,6 @@ Sets the class of the result type (type from output).
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
-                
-        <xs:attribute name="type" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Sets the class name of the result type (type from output) The default result
-type is NodeSet.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-                
-        <xs:attribute name="configurationRef" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Reference to a saxon configuration instance in the registry to use for xquery
-(requires camel-saxon). This may be needed to add custom functions to a saxon
-configuration, so these custom functions can be used in xquery expressions.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
               
       </xs:extension>
           
@@ -18587,679 +18844,699 @@ configuration, so these custom functions can be used in xquery expressions.
       
   </xs:complexType>
     
-  <xs:complexType name="apiKeyDefinition">
+  <xs:complexType name="constantExpression">
         
-    <xs:complexContent>
+    <xs:simpleContent>
             
-      <xs:extension base="tns:restSecurityDefinition">
-                
-        <xs:sequence/>
-                
-        <xs:attribute name="name" type="xs:string" use="required">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-The name of the header or query parameter to be used.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-                
-        <xs:attribute name="inHeader" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-To use header as the location of the API key. Default value: false
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
+      <xs:extension base="tns:typedExpressionDefinition"/>
+          
+    </xs:simpleContent>
+      
+  </xs:complexType>
+    
+  <xs:complexType name="datasonnetExpression">
+        
+    <xs:simpleContent>
+            
+      <xs:extension base="tns:typedExpressionDefinition">
                 
-        <xs:attribute name="inQuery" type="xs:string">
+        <xs:attribute name="bodyMediaType" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-To use query parameter as the location of the API key. Default value: false
+The String representation of the message's body MediaType.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="inCookie" type="xs:string">
+        <xs:attribute name="outputMediaType" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-To use a cookie as the location of the API key. Default value: false
+The String representation of the MediaType to output.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
               
       </xs:extension>
           
-    </xs:complexContent>
+    </xs:simpleContent>
       
   </xs:complexType>
     
-  <xs:complexType abstract="true" name="restSecurityDefinition">
-        
-    <xs:sequence/>
+  <xs:complexType name="exchangePropertyExpression">
         
-    <xs:attribute name="key" type="xs:string" use="required">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Key used to refer to this security definition.
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
+    <xs:simpleContent>
+            
+      <xs:extension base="tns:expression"/>
+          
+    </xs:simpleContent>
+      
+  </xs:complexType>
+    
+  <xs:complexType name="groovyExpression">
         
-    <xs:attribute name="description" type="xs:string">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-A short description for security scheme.
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
+    <xs:simpleContent>
+            
+      <xs:extension base="tns:typedExpressionDefinition"/>
+          
+    </xs:simpleContent>
       
   </xs:complexType>
     
-  <xs:complexType name="basicAuthDefinition">
+  <xs:complexType name="headerExpression">
         
-    <xs:complexContent>
+    <xs:simpleContent>
             
-      <xs:extension base="tns:restSecurityDefinition">
-                
-        <xs:sequence/>
-              
-      </xs:extension>
+      <xs:extension base="tns:expression"/>
           
-    </xs:complexContent>
+    </xs:simpleContent>
       
   </xs:complexType>
     
-  <xs:complexType name="bearerTokenDefinition">
+  <xs:complexType name="hl7TerserExpression">
         
-    <xs:complexContent>
+    <xs:simpleContent>
             
-      <xs:extension base="tns:restSecurityDefinition">
+      <xs:extension base="tns:singleInputTypedExpressionDefinition"/>
+          
+    </xs:simpleContent>
+      
+  </xs:complexType>
+    
+  <xs:complexType abstract="true" name="singleInputTypedExpressionDefinition">
+        
+    <xs:simpleContent>
+            
+      <xs:extension base="tns:typedExpressionDefinition">
                 
-        <xs:sequence/>
+        <xs:attribute name="headerName" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Name of header to use as input, instead of the message body It has as higher
+precedent than the propertyName if both are set.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
                 
-        <xs:attribute name="format" type="xs:string">
+        <xs:attribute name="propertyName" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-A hint to the client to identify how the bearer token is formatted.
+Name of property to use as input, instead of the message body. It has a lower
+precedent than the headerName if both are set.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
               
       </xs:extension>
           
-    </xs:complexContent>
+    </xs:simpleContent>
       
   </xs:complexType>
     
-  <xs:complexType name="deleteDefinition">
+  <xs:complexType name="javaScriptExpression">
         
-    <xs:complexContent>
+    <xs:simpleContent>
             
-      <xs:extension base="tns:verbDefinition">
-                
-        <xs:sequence/>
-              
-      </xs:extension>
+      <xs:extension base="tns:typedExpressionDefinition"/>
           
-    </xs:complexContent>
+    </xs:simpleContent>
       
   </xs:complexType>
     
-  <xs:complexType abstract="true" name="verbDefinition">
+  <xs:complexType name="joorExpression">
         
-    <xs:complexContent>
+    <xs:simpleContent>
             
-      <xs:extension base="tns:optionalIdentifiedDefinition">
-                
-        <xs:sequence>
-                    
-          <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:param"/>
-                    
-          <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:responseMessage"/>
-                    
-          <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:security"/>
-                    
-          <xs:element ref="tns:to"/>
-                  
-        </xs:sequence>
+      <xs:extension base="tns:typedExpressionDefinition">
                 
-        <xs:attribute name="path" type="xs:string">
+        <xs:attribute name="preCompile" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-The path mapping URIs of this REST operation such as /{id}.
+Whether the expression should be pre compiled once during initialization phase.
+If this is turned off, then the expression is reloaded and compiled on each
+evaluation. Default value: true
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="consumes" type="xs:string">
+        <xs:attribute name="singleQuotes" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-To define the content type what the REST service consumes (accept as input),
-such as application/xml or application/json. This option will override what may
-be configured on a parent level.
+Whether single quotes can be used as replacement for double quotes. This is
+convenient when you need to work with strings inside strings. Default value:
+true
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
+              
+      </xs:extension>
+          
+    </xs:simpleContent>
+      
+  </xs:complexType>
+    
+  <xs:complexType name="jqExpression">
+        
+    <xs:simpleContent>
+            
+      <xs:extension base="tns:singleInputTypedExpressionDefinition"/>
+          
+    </xs:simpleContent>
+      
+  </xs:complexType>
+    
+  <xs:complexType name="jsonPathExpression">
+        
+    <xs:simpleContent>
+            
+      <xs:extension base="tns:singleInputTypedExpressionDefinition">
                 
-        <xs:attribute name="produces" type="xs:string">
+        <xs:attribute name="suppressExceptions" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-To define the content type what the REST service produces (uses for output),
-such as application/xml or application/json This option will override what may
-be configured on a parent level.
+Whether to suppress exceptions such as PathNotFoundException. Default value:
+false
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="disabled" type="xs:string">
+        <xs:attribute name="allowSimple" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Whether to disable this REST service from the route during build time. Once an
-REST service has been disabled then it cannot be enabled later at runtime.
-Default value: false
+Whether to allow in inlined Simple exceptions in the JSONPath expression.
+Default value: true
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="type" type="xs:string">
+        <xs:attribute name="allowEasyPredicate" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the class name to use for binding from input to POJO for the incoming data
-This option will override what may be configured on a parent level. The name of
-the class of the input data. Append a to the end of the name if you want the
-input to be an array type.
+Whether to allow using the easy predicate parser to pre-parse predicates.
+Default value: true
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="outType" type="xs:string">
+        <xs:attribute name="writeAsString" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the class name to use for binding from POJO to output for the outgoing data
-This option will override what may be configured on a parent level The name of
-the class of the input data. Append a to the end of the name if you want the
-input to be an array type.
+Whether to write the output of each row/element as a JSON String value instead
+of a Map/POJO value. Default value: false
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="bindingMode" type="xs:string">
+        <xs:attribute name="unpackArray" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the binding mode to use. This option will override what may be configured
-on a parent level The default value is off. Default value: off
+Whether to unpack a single element json-array into an object. Default value:
+false
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="skipBindingOnErrorCode" type="xs:string">
+        <xs:attribute name="option" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Whether to skip binding on output if there is a custom HTTP error code header.
-This allows to build custom error messages that do not bind to json / xml etc,
-as success messages otherwise will do. This option will override what may be
-configured on a parent level. Default value: false
+To configure additional options on JSONPath. Multiple values can be separated by
+comma.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
+              
+      </xs:extension>
+          
+    </xs:simpleContent>
+      
+  </xs:complexType>
+    
+  <xs:complexType name="languageExpression">
+        
+    <xs:simpleContent>
+            
+      <xs:extension base="tns:expression">
                 
-        <xs:attribute name="clientRequestValidation" type="xs:string">
+        <xs:attribute name="language" type="xs:string" use="required">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Whether to enable validation of the client request to check: 1) Content-Type
-header matches what the Rest DSL consumes; returns HTTP Status 415 if validation
-error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status
-406 if validation error. 3) Missing required data (query parameters, HTTP
-headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of
-the message body (JSon, XML or Auto binding mode must be enabled); returns HTTP
-Status 400 if validation error. Default value: false
+The name of the language to use.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
+              
+      </xs:extension>
+          
+    </xs:simpleContent>
+      
+  </xs:complexType>
+    
+  <xs:complexType name="methodCallExpression">
+        
+    <xs:simpleContent>
+            
+      <xs:extension base="tns:typedExpressionDefinition">
                 
-        <xs:attribute name="enableCORS" type="xs:string">
+        <xs:attribute name="ref" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Whether to enable CORS headers in the HTTP response. This option will override
-what may be configured on a parent level The default value is false. Default
-value: false
+Reference to an existing bean (bean id) to lookup in the registry.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="apiDocs" type="xs:string">
+        <xs:attribute name="method" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Whether to include or exclude this rest operation in API documentation. The
-default value is true. Default value: true
+Name of method to call.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="deprecated" type="xs:string">
+        <xs:attribute name="beanType" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Marks this rest operation as deprecated in OpenApi documentation. Default value:
-false
+Class name (fully qualified) of the bean to use Will lookup in registry and if
+there is a single instance of the same type, then the existing bean is used,
+otherwise a new bean is created (requires a default no-arg constructor).
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="routeId" type="xs:string">
+        <xs:attribute name="scope" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the id of the route.
+Scope of bean. When using singleton scope (default) the bean is created or
+looked up only once and reused for the lifetime of the endpoint. The bean should
+be thread-safe in case concurrent threads is calling the bean at the same time.
+When using request scope the bean is created or looked up once per request
+(exchange). This can be used if you want to store state on a bean while
+processing a request and you want to call the same bean instance multiple times
+while processing the request. The bean does not have to be thread-safe as the
+instance is only called from the same request. When using prototype scope, then
+the bean will be looked up or created per call. However in case of lookup then
+this is delegated to the bean registry such as Spring or CDI (if in use), which
+depends on their configuration can act as either singleton or prototype scope.
+So when using prototype scope then this depends on the bean registry
+implementation. Default value: Singleton
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
               
       </xs:extension>
           
-    </xs:complexContent>
+    </xs:simpleContent>
       
   </xs:complexType>
     
-  <xs:complexType name="paramDefinition">
+  <xs:complexType name="mvelExpression">
         
-    <xs:sequence>
+    <xs:simpleContent>
             
-      <xs:element minOccurs="0" name="allowableValues">
-        <xs:annotation>
-          <xs:documentation xml:lang="en"><![CDATA[
-Sets the parameter list of allowable values (enum).
-          ]]></xs:documentation>
-        </xs:annotation>
-                
-        <xs:complexType>
-                    
-          <xs:sequence>
-                        
-            <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:value"/>
-                      
-          </xs:sequence>
-                  
-        </xs:complexType>
-              
-      </xs:element>
-            
-      <xs:element maxOccurs="unbounded" minOccurs="0" name="examples" type="tns:restPropertyDefinition">
-        <xs:annotation>
-          <xs:documentation xml:lang="en"><![CDATA[
-Sets the parameter examples.
-          ]]></xs:documentation>
-        </xs:annotation>
-      </xs:element>
+      <xs:extension base="tns:typedExpressionDefinition"/>
           
-    </xs:sequence>
-        
-    <xs:attribute name="name" type="xs:string" use="required">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Sets the parameter name.
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-        
-    <xs:attribute name="type" type="tns:restParamType" use="required">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Sets the parameter type. Default value: path
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-        
-    <xs:attribute name="description" type="xs:string">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Sets the parameter description.
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-        
-    <xs:attribute name="defaultValue" type="xs:string">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Sets the parameter default value.
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-        
-    <xs:attribute name="required" type="xs:boolean">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Sets the parameter required flag. Default value: true
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-        
-    <xs:attribute name="collectionFormat" type="tns:collectionFormat">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Sets the parameter collection format. Default value: csv
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-        
-    <xs:attribute name="arrayType" type="xs:string">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Sets the parameter array type. Required if data type is array. Describes the
-type of items in the array. Default value: string
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-        
-    <xs:attribute name="dataType" type="xs:string">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Sets the parameter data type. Default value: string
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-        
-    <xs:attribute name="dataFormat" type="xs:string">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Sets the parameter data format.
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
+    </xs:simpleContent>
       
   </xs:complexType>
     
-  <xs:complexType name="restPropertyDefinition">
-        
-    <xs:sequence/>
-        
-    <xs:attribute name="key" type="xs:string" use="required">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Property key.
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
+  <xs:complexType abstract="true" name="namespaceAwareExpression">
         
-    <xs:attribute name="value" type="xs:string" use="required">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Property value.
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
+    <xs:simpleContent>
+            
+      <xs:extension base="tns:singleInputExpressionDefinition"/>
+          
+    </xs:simpleContent>
       
   </xs:complexType>
     
-  <xs:complexType name="responseMessageDefinition">
+  <xs:complexType abstract="true" name="singleInputExpressionDefinition">
         
-    <xs:sequence>
-            
-      <xs:element maxOccurs="unbounded" minOccurs="0" name="header" type="tns:responseHeaderDefinition">
-        <xs:annotation>
-          <xs:documentation xml:lang="en"><![CDATA[
-Adds a response header.
-          ]]></xs:documentation>
-        </xs:annotation>
-      </xs:element>
+    <xs:simpleContent>
             
-      <xs:element maxOccurs="unbounded" minOccurs="0" name="examples" type="tns:restPropertyDefinition">
-        <xs:annotation>
-          <xs:documentation xml:lang="en"><![CDATA[
-Examples of response messages.
-          ]]></xs:documentation>
-        </xs:annotation>
-      </xs:element>
+      <xs:extension base="tns:expression">
+                
+        <xs:attribute name="headerName" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Name of header to use as input, instead of the message body It has as higher
+precedent than the propertyName if both are set.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+                
+        <xs:attribute name="propertyName" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Name of property to use as input, instead of the message body. It has a lower
+precedent than the headerName if both are set.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+              
+      </xs:extension>
           
-    </xs:sequence>
-        
-    <xs:attribute name="code" type="xs:string">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-The response code such as a HTTP status code. Default value: 200
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-        
-    <xs:attribute name="message" type="xs:string" use="required">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-The response message (description).
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-        
-    <xs:attribute name="responseModel" type="xs:string">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-The response model.
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
+    </xs:simpleContent>
       
   </xs:complexType>
     
-  <xs:complexType name="responseHeaderDefinition">
+  <xs:complexType name="ognlExpression">
         
-    <xs:sequence>
+    <xs:simpleContent>
             
-      <xs:element minOccurs="0" name="allowableValues">
-        <xs:annotation>
-          <xs:documentation xml:lang="en"><![CDATA[
-Sets the parameter list of allowable values.
-          ]]></xs:documentation>
-        </xs:annotation>
-                
-        <xs:complexType>
-                    
-          <xs:sequence>
-                        
-            <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:value"/>
-                      
-          </xs:sequence>
-                  
-        </xs:complexType>
-              
-      </xs:element>
+      <xs:extension base="tns:typedExpressionDefinition"/>
           
-    </xs:sequence>
-        
-    <xs:attribute name="name" type="xs:string" use="required">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Name of the parameter. This option is mandatory.
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-        
-    <xs:attribute name="description" type="xs:string">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Description of the parameter.
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-        
-    <xs:attribute name="collectionFormat" type="tns:collectionFormat">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Sets the parameter collection format. Default value: csv
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-        
-    <xs:attribute name="arrayType" type="xs:string">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Sets the parameter array type. Required if data type is array. Describes the
-type of items in the array. Default value: string
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-        
-    <xs:attribute name="dataType" type="xs:string">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Sets the header data type. Default value: string
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-        
-    <xs:attribute name="dataFormat" type="xs:string">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Sets the parameter data format.
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-        
-    <xs:attribute name="example" type="xs:string">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Sets the example.
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
+    </xs:simpleContent>
       
   </xs:complexType>
     
-  <xs:complexType name="securityDefinition">
+  <xs:complexType name="pythonExpression">
         
-    <xs:sequence/>
+    <xs:simpleContent>
+            
+      <xs:extension base="tns:typedExpressionDefinition"/>
+          
+    </xs:simpleContent>
+      
+  </xs:complexType>
+    
+  <xs:complexType name="refExpression">
         
-    <xs:attribute name="key" type="xs:string" use="required">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Key used to refer to this security definition.
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
+    <xs:simpleContent>
+            
+      <xs:extension base="tns:typedExpressionDefinition"/>
+          
+    </xs:simpleContent>
+      
+  </xs:complexType>
+    
+  <xs:complexType name="simpleExpression">
         
-    <xs:attribute name="scopes" type="xs:string">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-The scopes to allow (separate multiple scopes by comma).
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
+    <xs:simpleContent>
+            
+      <xs:extension base="tns:typedExpressionDefinition"/>
+          
+    </xs:simpleContent>
       
   </xs:complexType>
     
-  <xs:complexType name="getDefinition">
+  <xs:complexType name="spELExpression">
         
-    <xs:complexContent>
+    <xs:simpleContent>
             
-      <xs:extension base="tns:verbDefinition">
-                
-        <xs:sequence/>
-              
-      </xs:extension>
+      <xs:extension base="tns:typedExpressionDefinition"/>
           
-    </xs:complexContent>
+    </xs:simpleContent>
       
   </xs:complexType>
     
-  <xs:complexType name="headDefinition">
+  <xs:complexType name="tokenizerExpression">
         
-    <xs:complexContent>
+    <xs:simpleContent>
             
-      <xs:extension base="tns:verbDefinition">
+      <xs:extension base="tns:singleInputExpressionDefinition">
                 
-        <xs:sequence/>
+        <xs:attribute name="token" type="xs:string" use="required">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+The (start) token to use as tokenizer, for example you can use the new line
+token. You can use simple language as the token to support dynamic tokens.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+                
+        <xs:attribute name="endToken" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+The end token to use as tokenizer if using start/end token pairs. You can use
+simple language as the token to support dynamic tokens.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+                
+        <xs:attribute name="inheritNamespaceTagName" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+To inherit namespaces from a root/parent tag name when using XML You can use
+simple language as the tag name to support dynamic names.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+                
+        <xs:attribute name="regex" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+If the token is a regular expression pattern. The default value is false.
+Default value: false
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+                
+        <xs:attribute name="xml" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Whether the input is XML messages. This option must be set to true if working
+with XML payloads. Default value: false
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+                
+        <xs:attribute name="includeTokens" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Whether to include the tokens in the parts when using pairs. When including
+tokens then the endToken property must also be configured (to use pair mode).
+The default value is false. Default value: false
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+                
+        <xs:attribute name="group" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+To group N parts together, for example to split big files into chunks of 1000
+lines. You can use simple language as the group to support dynamic group sizes.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+                
+        <xs:attribute name="groupDelimiter" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Sets the delimiter to use when grouping. If this has not been set then token
+will be used as the delimiter.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+                
+        <xs:attribute name="skipFirst" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+To skip the very first element. Default value: false
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
               
       </xs:extension>
           
-    </xs:complexContent>
+    </xs:simpleContent>
       
   </xs:complexType>
     
-  <xs:complexType name="mutualTLSDefinition">
+  <xs:complexType name="xmlTokenizerExpression">
         
-    <xs:complexContent>
+    <xs:simpleContent>
             
-      <xs:extension base="tns:restSecurityDefinition">
+      <xs:extension base="tns:namespaceAwareExpression">
                 
-        <xs:sequence/>
+        <xs:attribute name="mode" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+The extraction mode. The available extraction modes are: i - injecting the
+contextual namespace bindings into the extracted token (default) w - wrapping
+the extracted token in its ancestor context u - unwrapping the extracted token
+to its child content t - extracting the text content of the specified element.
+Default value: i
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+                
+        <xs:attribute name="group" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+To group N parts together.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
               
       </xs:extension>
           
-    </xs:complexContent>
+    </xs:simpleContent>
       
   </xs:complexType>
     
-  <xs:complexType name="oAuth2Definition">
+  <xs:complexType name="xPathExpression">
         
-    <xs:complexContent>
+    <xs:simpleContent>
             
-      <xs:extension base="tns:restSecurityDefinition">
+      <xs:extension base="tns:namespaceAwareExpression">
                 
-        <xs:sequence>
-                    
-          <xs:element maxOccurs="unbounded" minOccurs="0" name="scopes" type="tns:restPropertyDefinition">
-            <xs:annotation>
-              <xs:documentation xml:lang="en"><![CDATA[
-The available scopes for an OAuth2 security scheme.
-              ]]></xs:documentation>
-            </xs:annotation>
-          </xs:element>
-                  
-        </xs:sequence>
+        <xs:attribute name="documentType" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Name of class for document type The default value is org.w3c.dom.Document.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
                 
-        <xs:attribute name="authorizationUrl" type="xs:string">
+        <xs:attribute name="resultType" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-The authorization URL to be used for this flow. This SHOULD be in the form of a
-URL. Required for implicit and access code flows.
+Sets the class name of the result type (type from output) The default result
+type is NodeSet. Default value: NODESET
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="tokenUrl" type="xs:string">
+        <xs:attribute name="saxon" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-The token URL to be used for this flow. This SHOULD be in the form of a URL.
-Required for password, application, and access code flows.
+Whether to use Saxon. Default value: false
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="refreshUrl" type="xs:string">
+        <xs:attribute name="factoryRef" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+References to a custom XPathFactory to lookup in the registry.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+                
+        <xs:attribute name="objectModel" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+The XPath object model to use.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+                
+        <xs:attribute name="logNamespaces" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Whether to log namespaces which can assist during troubleshooting. Default
+value: false
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+                
+        <xs:attribute name="threadSafety" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Whether to enable thread-safety for the returned result of the xpath expression.
+This applies to when using NODESET as the result type, and the returned set has
+multiple elements. In this situation there can be thread-safety issues if you
+process the NODESET concurrently such as from a Camel Splitter EIP in parallel
+processing mode. This option prevents concurrency issues by doing defensive
+copies of the nodes. It is recommended to turn this option on if you are using
+camel-saxon or Saxon in your application. Saxon has thread-safety issues which
+can be prevented by turning this option on. Default value: false
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+                
+        <xs:attribute name="preCompile" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Whether to enable pre-compiling the xpath expression during initialization
+phase. pre-compile is enabled by default. This can be used to turn off, for
+example in cases the compilation phase is desired at the starting phase, such as
+if the application is ahead of time compiled (for example with camel-quarkus)
+which would then load the xpath factory of the built operating system, and not a
+JVM runtime. Default value: true
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+              
+      </xs:extension>
+          
+    </xs:simpleContent>
+      
+  </xs:complexType>
+    
+  <xs:complexType name="xQueryExpression">
+        
+    <xs:simpleContent>
+            
+      <xs:extension base="tns:namespaceAwareExpression">
+                
+        <xs:attribute name="resultType" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Sets the class of the result type (type from output).
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+                
+        <xs:attribute name="type" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-The URL to be used for obtaining refresh tokens. This MUST be in the form of a
-URL.
+Sets the class name of the result type (type from output) The default result
+type is NodeSet.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
                 
-        <xs:attribute name="flow" type="xs:string">
+        <xs:attribute name="configurationRef" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-The flow used by the OAuth2 security scheme. Valid values are implicit,
-password, application or accessCode.
+Reference to a saxon configuration instance in the registry to use for xquery
+(requires camel-saxon). This may be needed to add custom functions to a saxon
+configuration, so these custom functions can be used in xquery expressions.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
               
       </xs:extension>
           
+    </xs:simpleContent>
+      
+  </xs:complexType>
+    
+  <xs:complexType name="deleteDefinition">
+        
+    <xs:complexContent>
+            
+      <xs:extension base="tns:verbDefinition">
+                
+        <xs:sequence/>
+              
+      </xs:extension>
+          
     </xs:complexContent>
       
   </xs:complexType>
     
-  <xs:complexType name="openIdConnectDefinition">
+  <xs:complexType name="getDefinition">
         
     <xs:complexContent>
             
-      <xs:extension base="tns:restSecurityDefinition">
+      <xs:extension base="tns:verbDefinition">
                 
         <xs:sequence/>
+              
+      </xs:extension>
+          
+    </xs:complexContent>
+      
+  </xs:complexType>
+    
+  <xs:complexType name="headDefinition">
+        
+    <xs:complexContent>
+            
+      <xs:extension base="tns:verbDefinition">
                 
-        <xs:attribute name="url" type="xs:string" use="required">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-OpenId Connect URL to discover OAuth2 configuration values.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
+        <xs:sequence/>
               
       </xs:extension>
           
@@ -19691,172 +19968,6 @@ to refer to an existing data format instance.
       
   </xs:complexType>
     
-  <xs:complexType name="restDefinition">
-        
-    <xs:complexContent>
-            
-      <xs:extension base="tns:optionalIdentifiedDefinition">
-                
-        <xs:sequence>
-                    
-          <xs:element minOccurs="0" ref="tns:securityDefinitions"/>
-                    
-          <xs:element maxOccurs="unbounded" minOccurs="0" name="securityRequirements" type="tns:securityDefinition">
-            <xs:annotation>
-              <xs:documentation xml:lang="en"><![CDATA[
-Sets the security requirement(s) for all endpoints.
-              ]]></xs:documentation>
-            </xs:annotation>
-          </xs:element>
-                    
-          <xs:choice maxOccurs="unbounded" minOccurs="0">
-                        
-            <xs:element ref="tns:delete"/>
-                        
-            <xs:element ref="tns:get"/>
-                        
-            <xs:element ref="tns:head"/>
-                        
-            <xs:element ref="tns:patch"/>
-                        
-            <xs:element ref="tns:post"/>
-                        
-            <xs:element ref="tns:put"/>
-                      
-          </xs:choice>
-                  
-        </xs:sequence>
-                
-        <xs:attribute name="path" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Path of the rest service, such as /foo.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-                
-        <xs:attribute name="consumes" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-To define the content type what the REST service consumes (accept as input),
-such as application/xml or application/json. This option will override what may
-be configured on a parent level.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-                
-        <xs:attribute name="produces" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-To define the content type what the REST service produces (uses for output),
-such as application/xml or application/json This option will override what may
-be configured on a parent level.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-                
-        <xs:attribute name="disabled" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Whether to disable this REST service from the route during build time. Once an
-REST service has been disabled then it cannot be enabled later at runtime.
-Default value: false
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-                
-        <xs:attribute name="bindingMode" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Sets the binding mode to use. This option will override what may be configured
-on a parent level The default value is auto. Default value: off
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-                
-        <xs:attribute name="skipBindingOnErrorCode" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Whether to skip binding on output if there is a custom HTTP error code header.
-This allows to build custom error messages that do not bind to json / xml etc,
-as success messages otherwise will do. This option will override what may be
-configured on a parent level. Default value: false
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-                
-        <xs:attribute name="clientRequestValidation" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Whether to enable validation of the client request to check: 1) Content-Type
-header matches what the Rest DSL consumes; returns HTTP Status 415 if validation
-error. 2) Accept header matches what the Rest DSL produces; returns HTTP Status
-406 if validation error. 3) Missing required data (query parameters, HTTP
-headers, body); returns HTTP Status 400 if validation error. 4) Parsing error of
-the message body (JSon, XML or Auto binding mode must be enabled); returns HTTP
-Status 400 if validation error. Default value: false
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-                
-        <xs:attribute name="enableCORS" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Whether to enable CORS headers in the HTTP response. This option will override
-what may be configured on a parent level The default value is false. Default
-value: false
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-                
-        <xs:attribute name="apiDocs" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Whether to include or exclude this rest operation in API documentation. This
-option will override what may be configured on a parent level. The default value
-is true. Default value: true
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-                
-        <xs:attribute name="tag" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-To configure a special tag for the operations within this rest definition.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-              
-      </xs:extension>
-          
-    </xs:complexContent>
-      
-  </xs:complexType>
-    
-  <xs:complexType name="restSecuritiesDefinition">
-        
-    <xs:sequence>
-            
-      <xs:choice maxOccurs="unbounded" minOccurs="0">
-                
-        <xs:element ref="tns:apiKey"/>
-                
-        <xs:element ref="tns:basicAuth"/>
-                
-        <xs:element name="bearer" type="tns:bearerTokenDefinition"/>
-                
-        <xs:element ref="tns:oauth2"/>
-                
-        <xs:element ref="tns:openIdConnect"/>
-                
-        <xs:element ref="tns:mutualTLS"/>
-              
-      </xs:choice>
-          
-    </xs:sequence>
-      
-  </xs:complexType>
-    
   <xs:complexType name="restsDefinition">
         
     <xs:complexContent>
@@ -21319,27 +21430,19 @@ multiple certificates.
       
   </xs:simpleType>
     
-  <xs:simpleType name="bindyType">
+  <xs:simpleType name="restParamType">
         
     <xs:restriction base="xs:string">
             
-      <xs:enumeration value="Csv"/>
+      <xs:enumeration value="body"/>
             
-      <xs:enumeration value="Fixed"/>
+      <xs:enumeration value="formData"/>
             
-      <xs:enumeration value="KeyValue"/>
-          
-    </xs:restriction>
-      
-  </xs:simpleType>
-    
-  <xs:simpleType name="yamlTypeFilterType">
-        
-    <xs:restriction base="xs:string">
+      <xs:enumeration value="header"/>
             
-      <xs:enumeration value="type"/>
+      <xs:enumeration value="path"/>
             
-      <xs:enumeration value="regexp"/>
+      <xs:enumeration value="query"/>
           
     </xs:restriction>
       
@@ -21363,19 +21466,27 @@ multiple certificates.
       
   </xs:simpleType>
     
-  <xs:simpleType name="restParamType">
+  <xs:simpleType name="bindyType">
         
     <xs:restriction base="xs:string">
             
-      <xs:enumeration value="body"/>
+      <xs:enumeration value="Csv"/>
             
-      <xs:enumeration value="formData"/>
+      <xs:enumeration value="Fixed"/>
             
-      <xs:enumeration value="header"/>
+      <xs:enumeration value="KeyValue"/>
+          
+    </xs:restriction>
+      
+  </xs:simpleType>
+    
+  <xs:simpleType name="yamlTypeFilterType">
+        
+    <xs:restriction base="xs:string">
             
-      <xs:enumeration value="path"/>
+      <xs:enumeration value="type"/>
             
-      <xs:enumeration value="query"/>
+      <xs:enumeration value="regexp"/>
           
     </xs:restriction>
       
diff --git a/core/camel-api/src/generated/java/org/apache/camel/spi/annotations/ExternalSchemaElement.java b/core/camel-api/src/generated/java/org/apache/camel/spi/annotations/ExternalSchemaElement.java
new file mode 100644
index 00000000000..da87308e0e9
--- /dev/null
+++ b/core/camel-api/src/generated/java/org/apache/camel/spi/annotations/ExternalSchemaElement.java
@@ -0,0 +1,57 @@
+/*
+ * 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.spi.annotations;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Annotation to be used for JAXB property (field or method) annotated with {@code @XmlAnyElement} to highlight which
+ * actual elements do we expect (not to be enforced by JAXB, but by Camel itself).
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+@Target({ ElementType.METHOD, ElementType.FIELD })
+public @interface ExternalSchemaElement {
+
+    /**
+     * Names of external XML element we expect
+     *
+     * @return
+     */
+    String[] names() default {};
+
+    /**
+     * XSD namespace of XML elements expected
+     *
+     * @return
+     */
+    String namespace() default "";
+
+    /**
+     * In JAXB, when an element is annotated with {@code @XmlAnyElement}, the actual objects used are of
+     * {@link org.w3c.dom.Element} class. These elements should be part of wrapping {@link org.w3c.dom.Document} and
+     * this parameter allows to specify this root element name (in {@link #namespace()}).
+     *
+     * @return
+     */
+    String documentElement();
+
+}
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/app/BeanPropertiesAdapter.java b/core/camel-core-model/src/main/java/org/apache/camel/model/app/BeanPropertiesAdapter.java
index 4a1091c8256..2b67a82c957 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/model/app/BeanPropertiesAdapter.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/model/app/BeanPropertiesAdapter.java
@@ -19,6 +19,7 @@ package org.apache.camel.model.app;
 import java.util.Arrays;
 import java.util.LinkedHashMap;
 import java.util.Map;
+
 import jakarta.xml.bind.annotation.adapters.XmlAdapter;
 
 public class BeanPropertiesAdapter extends XmlAdapter<BeanPropertiesDefinition, Map<String, Object>> {
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/app/BeanPropertiesDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/app/BeanPropertiesDefinition.java
index 9ef586e7605..73cec258070 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/model/app/BeanPropertiesDefinition.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/model/app/BeanPropertiesDefinition.java
@@ -17,6 +17,7 @@
 package org.apache.camel.model.app;
 
 import java.util.List;
+
 import jakarta.xml.bind.annotation.XmlAccessType;
 import jakarta.xml.bind.annotation.XmlAccessorType;
 import jakarta.xml.bind.annotation.XmlElement;
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/app/BeansDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/app/BeansDefinition.java
index a27b81b953e..fbb76e81f9d 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/model/app/BeansDefinition.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/model/app/BeansDefinition.java
@@ -26,19 +26,24 @@ import jakarta.xml.bind.annotation.XmlElement;
 import jakarta.xml.bind.annotation.XmlRootElement;
 import jakarta.xml.bind.annotation.XmlType;
 
+import org.w3c.dom.Element;
+
 import org.apache.camel.model.RouteConfigurationDefinition;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.RouteTemplateDefinition;
 import org.apache.camel.model.TemplatedRouteDefinition;
 import org.apache.camel.model.rest.RestDefinition;
 import org.apache.camel.spi.Metadata;
-import org.w3c.dom.Element;
+import org.apache.camel.spi.annotations.ExternalSchemaElement;
 
 /**
- * <p>A groupping POJO (and related XML root element) that's historically associated with "entire application" (or its
- * distinguished fragment).</p>
- * <p>This class is not meant to be used with Camel Java DSL, but it's needed to generate XML Schema and MX
- * parser methods.</p>
+ * <p>
+ * A groupping POJO (and related XML root element) that's historically associated with "entire application" (or its
+ * distinguished fragment).
+ * </p>
+ * <p>
+ * This class is not meant to be used with Camel Java DSL, but it's needed to generate XML Schema and MX parser methods.
+ * </p>
  */
 @Metadata(label = "configuration")
 @XmlRootElement(name = "beans")
@@ -70,7 +75,9 @@ public class BeansDefinition {
 
     // this is the only way I found to generate usable Schema without imports, while allowing elements
     // from different namespaces
-    @XmlAnyElement(lax = true)
+    @ExternalSchemaElement(names = { "bean", "alias" }, namespace = "http://www.springframework.org/schema/beans",
+                           documentElement = "beans")
+    @XmlAnyElement
     private List<Element> springBeans = new ArrayList<>();
 
     // the order comes from <camelContext> (org.apache.camel.spring.xml.CamelContextFactoryBean)
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/app/RegistryBeanDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/app/RegistryBeanDefinition.java
index 48863226933..13cd644a507 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/model/app/RegistryBeanDefinition.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/model/app/RegistryBeanDefinition.java
@@ -24,11 +24,12 @@ import jakarta.xml.bind.annotation.XmlAttribute;
 import jakarta.xml.bind.annotation.XmlElement;
 import jakarta.xml.bind.annotation.XmlType;
 import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
+
 import org.apache.camel.spi.Metadata;
 
 /**
- * A Pojo representing simplified "bean" element to declare registry beans using any DSL. This is not the same
- * as "bean processor".
+ * A Pojo representing simplified "bean" element to declare registry beans using any DSL. This is not the same as "bean
+ * processor".
  */
 @Metadata(label = "configuration")
 @XmlType
diff --git a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
index 210dcde035e..4275582c8b3 100644
--- a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
+++ b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
@@ -29,10 +29,9 @@ import java.io.Reader;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
+import org.w3c.dom.Element;
 import org.apache.camel.model.*;
-import org.apache.camel.model.app.ApplicationDefinition;
-import org.apache.camel.model.app.BeansDefinition;
-import org.apache.camel.model.app.ComponentScanDefinition;
+import org.apache.camel.model.app.*;
 import org.apache.camel.model.cloud.*;
 import org.apache.camel.model.config.BatchResequencerConfig;
 import org.apache.camel.model.config.ResequencerConfig;
@@ -1581,7 +1580,16 @@ public class ModelParser extends BaseParser {
     }
     protected <T extends BeansDefinition> ElementHandler<T> beansDefinitionElementHandler() {
         return (def, key) -> {
+            if ("http://www.springframework.org/schema/beans".equals(parser.getNamespace())) {
+                Element el = doParseDOMElement("beans", "http://www.springframework.org/schema/beans", def.getSpringBeans());
+                if (el != null) {
+                    doAddElement(el, def.getSpringBeans(), def::setSpringBeans);
+                    return true;
+                }
+                return false;
+            }
             switch (key) {
+                case "bean": doAdd(doParseRegistryBeanDefinition(), def.getBeans(), def::setBeans); break;
                 case "component-scan": doAdd(doParseComponentScanDefinition(), def.getComponentScanning(), def::setComponentScanning); break;
                 case "rest": doAdd(doParseRestDefinition(), def.getRests(), def::setRests); break;
                 case "routeConfiguration": doAdd(doParseRouteConfigurationDefinition(), def.getRouteConfigurations(), def::setRouteConfigurations); break;
@@ -1595,17 +1603,58 @@ public class ModelParser extends BaseParser {
     }
     protected BeansDefinition doParseBeansDefinition() throws IOException, XmlPullParserException {
         return doParse(new BeansDefinition(), 
-            noAttributeHandler(), beansDefinitionElementHandler(), noValueHandler());
+            noAttributeHandler(), beansDefinitionElementHandler(), noValueHandler(), true);
     }
     protected ComponentScanDefinition doParseComponentScanDefinition() throws IOException, XmlPullParserException {
         return doParse(new ComponentScanDefinition(), (def, key, val) -> {
+            if ("base-package".equals(key)) {
+                def.setBasePackage(val);
+                return true;
+            }
+            return false;
+        }, noElementHandler(), noValueHandler());
+    }
+    protected RegistryBeanDefinition doParseRegistryBeanDefinition() throws IOException, XmlPullParserException {
+        return doParse(new RegistryBeanDefinition(), (def, key, val) -> {
             switch (key) {
-                case "base-package": def.setBasePackage(val); break;
-                case "use-jsr-330": def.setUseJsr330(val); break;
+                case "name": def.setName(val); break;
+                case "type": def.setType(val); break;
                 default: return false;
             }
             return true;
-        }, noElementHandler(), noValueHandler());
+        }, (def, key) -> {
+            if ("properties".equals(key)) {
+                def.setProperties(new BeanPropertiesAdapter().unmarshal(doParseBeanPropertiesDefinition()));
+                return true;
+            }
+            return false;
+        }, noValueHandler());
+    }
+    protected BeanPropertiesDefinition doParseBeanPropertiesDefinition() throws IOException, XmlPullParserException {
+        return doParse(new BeanPropertiesDefinition(),
+            noAttributeHandler(), (def, key) -> {
+            if ("property".equals(key)) {
+                doAdd(doParseBeanPropertyDefinition(), def.getProperties(), def::setProperties);
+                return true;
+            }
+            return false;
+        }, noValueHandler());
+    }
+    protected BeanPropertyDefinition doParseBeanPropertyDefinition() throws IOException, XmlPullParserException {
+        return doParse(new BeanPropertyDefinition(), (def, key, val) -> {
+            switch (key) {
+                case "key": def.setKey(val); break;
+                case "value": def.setValue(val); break;
+                default: return false;
+            }
+            return true;
+        }, (def, key) -> {
+            if ("properties".equals(key)) {
+                def.setProperties(doParseBeanPropertiesDefinition());
+                return true;
+            }
+            return false;
+        }, noValueHandler());
     }
     protected BlacklistServiceCallServiceFilterConfiguration doParseBlacklistServiceCallServiceFilterConfiguration() throws IOException, XmlPullParserException {
         return doParse(new BlacklistServiceCallServiceFilterConfiguration(),
diff --git a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
index 0f513b54d1a..66abe00a04d 100644
--- a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
+++ b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
@@ -29,9 +29,7 @@ import java.util.ArrayList;
 import java.util.Base64;
 import java.util.List;
 import org.apache.camel.model.*;
-import org.apache.camel.model.app.ApplicationDefinition;
-import org.apache.camel.model.app.BeansDefinition;
-import org.apache.camel.model.app.ComponentScanDefinition;
+import org.apache.camel.model.app.*;
 import org.apache.camel.model.cloud.*;
 import org.apache.camel.model.config.BatchResequencerConfig;
 import org.apache.camel.model.config.ResequencerConfig;
@@ -2576,11 +2574,31 @@ public class ModelWriter extends BaseWriter {
         doWriteBeansDefinitionElements(def);
         endElement();
     }
+    protected void doWriteBeanPropertiesDefinition(
+            String name,
+            BeanPropertiesDefinition def)
+            throws IOException {
+        startElement(name);
+        doWriteList(null, "property", def.getProperties(), this::doWriteBeanPropertyDefinition);
+        endElement();
+    }
+    protected void doWriteBeanPropertyDefinition(
+            String name,
+            BeanPropertyDefinition def)
+            throws IOException {
+        startElement(name);
+        doWriteAttribute("value", def.getValue());
+        doWriteAttribute("key", def.getKey());
+        doWriteElement("properties", def.getProperties(), this::doWriteBeanPropertiesDefinition);
+        endElement();
+    }
     protected void doWriteBeansDefinitionElements(
             BeansDefinition def)
             throws IOException {
         doWriteList(null, "route", def.getRoutes(), this::doWriteRouteDefinition);
+        domElements(def.getSpringBeans());
         doWriteList(null, "component-scan", def.getComponentScanning(), this::doWriteComponentScanDefinition);
+        doWriteList(null, "bean", def.getBeans(), this::doWriteRegistryBeanDefinition);
         doWriteList(null, "rest", def.getRests(), this::doWriteRestDefinition);
         doWriteList(null, "routeConfiguration", def.getRouteConfigurations(), this::doWriteRouteConfigurationDefinition);
         doWriteList(null, "routeTemplate", def.getRouteTemplates(), this::doWriteRouteTemplateDefinition);
@@ -2600,7 +2618,16 @@ public class ModelWriter extends BaseWriter {
             throws IOException {
         startElement(name);
         doWriteAttribute("base-package", def.getBasePackage());
-        doWriteAttribute("use-jsr-330", def.getUseJsr330());
+        endElement();
+    }
+    protected void doWriteRegistryBeanDefinition(
+            String name,
+            RegistryBeanDefinition def)
+            throws IOException {
+        startElement(name);
+        doWriteAttribute("name", def.getName());
+        doWriteAttribute("type", def.getType());
+        doWriteElement("properties", new BeanPropertiesAdapter().marshal(def.getProperties()), this::doWriteBeanPropertiesDefinition);
         endElement();
     }
     protected void doWriteBlacklistServiceCallServiceFilterConfiguration(
diff --git a/core/camel-xml-io/src/main/java/org/apache/camel/xml/in/BaseParser.java b/core/camel-xml-io/src/main/java/org/apache/camel/xml/in/BaseParser.java
index 9e9e128a26b..d0c4db88240 100644
--- a/core/camel-xml-io/src/main/java/org/apache/camel/xml/in/BaseParser.java
+++ b/core/camel-xml-io/src/main/java/org/apache/camel/xml/in/BaseParser.java
@@ -31,10 +31,19 @@ import java.util.Set;
 import java.util.function.Consumer;
 import java.util.function.Supplier;
 
+import javax.xml.XMLConstants;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Text;
+
 import org.apache.camel.LineNumberAware;
 import org.apache.camel.model.language.ExpressionDefinition;
 import org.apache.camel.spi.NamespaceAware;
 import org.apache.camel.spi.Resource;
+import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.URISupport;
 import org.apache.camel.xml.io.MXParser;
 import org.apache.camel.xml.io.XmlPullParser;
@@ -81,6 +90,13 @@ public class BaseParser {
     protected <T> T doParse(
             T definition, AttributeHandler<T> attributeHandler, ElementHandler<T> elementHandler, ValueHandler<T> valueHandler)
             throws IOException, XmlPullParserException {
+        return doParse(definition, attributeHandler, elementHandler, valueHandler, false);
+    }
+
+    protected <T> T doParse(
+            T definition, AttributeHandler<T> attributeHandler, ElementHandler<T> elementHandler, ValueHandler<T> valueHandler,
+            boolean supportsExternalNamespaces)
+            throws IOException, XmlPullParserException {
         if (definition instanceof LineNumberAware) {
             // we want to get the line number where the tag starts (in case its multi-line)
             int line = parser.getStartLineNumber();
@@ -111,7 +127,7 @@ public class BaseParser {
             }
             if (Objects.equals(ns, "") || Objects.equals(ns, namespace)) {
                 if (attributeHandler == null || !attributeHandler.accept(definition, name, val)) {
-                    handleUnexpectedAttribute(namespace, name);
+                    handleUnexpectedAttribute(ns, name);
                 }
             } else {
                 handleOtherAttribute(definition, name, ns, val);
@@ -126,12 +142,20 @@ public class BaseParser {
             } else if (event == XmlPullParser.START_TAG) {
                 String ns = parser.getNamespace();
                 String name = parser.getName();
-                if (Objects.equals(ns, namespace)) {
+                if (supportsExternalNamespaces) {
+                    // pass element to the handler regardless of namespace
                     if (elementHandler == null || !elementHandler.accept(definition, name)) {
-                        handleUnexpectedElement(namespace, name);
+                        handleUnexpectedElement(ns, name);
                     }
                 } else {
-                    handleUnexpectedElement(ns, name);
+                    // pass element to the handler only if matches the declared namespace for the parser
+                    if (Objects.equals(ns, namespace)) {
+                        if (elementHandler == null || !elementHandler.accept(definition, name)) {
+                            handleUnexpectedElement(namespace, name);
+                        }
+                    } else {
+                        handleUnexpectedElement(ns, name);
+                    }
                 }
             } else if (event == XmlPullParser.END_TAG) {
                 return definition;
@@ -250,6 +274,42 @@ public class BaseParser {
         return s;
     }
 
+    protected Element doParseDOMElement(String rootElementName, String namespace, List<Element> existing)
+            throws XmlPullParserException, IOException {
+        Document doc = null;
+        if (existing != null && !existing.isEmpty()) {
+            doc = existing.get(0).getOwnerDocument();
+        } else {
+            // create a new one
+            try {
+                doc = createDocumentBuilderFactory().newDocumentBuilder().newDocument();
+                // with root element generated from @ExternalSchemaElement.documentElement
+                Element rootElement = doc.createElementNS(namespace, rootElementName);
+                doc.appendChild(rootElement);
+            } catch (ParserConfigurationException e) {
+                throw new XmlPullParserException(
+                        "Problem handling external element '{" + namespace + "}" + parser.getName()
+                                                 + ": " + e.getMessage());
+            }
+        }
+        if (doc == null) {
+            return null;
+        }
+
+        Element element = doc.createElementNS(namespace, parser.getName());
+        doc.getDocumentElement().appendChild(element);
+        doParse(element, domAttributeHandler(), domElementHandler(), domValueHandler(), true);
+        return element;
+    }
+
+    protected void doAddElement(Element element, List<Element> existing, Consumer<List<Element>> setter) {
+        if (existing == null) {
+            existing = new ArrayList<>();
+            setter.accept(existing);
+        }
+        existing.add(element);
+    }
+
     protected boolean handleUnexpectedAttribute(String namespace, String name) throws XmlPullParserException {
         throw new XmlPullParserException("Unexpected attribute '{" + namespace + "}" + name + "'");
     }
@@ -324,10 +384,68 @@ public class BaseParser {
         return (def, text) -> handleUnexpectedText(text);
     }
 
+    protected AttributeHandler<Element> domAttributeHandler() {
+        return (el, name, value) -> {
+            el.setAttribute(name, value);
+            return true;
+        };
+    }
+
+    protected ElementHandler<Element> domElementHandler() {
+        return (def, name) -> {
+            Element child = def.getOwnerDocument().createElementNS(parser.getNamespace(), name);
+            def.appendChild(child);
+            doParse(child, domAttributeHandler(), domElementHandler(), domValueHandler(), true);
+            return true;
+        };
+    }
+
+    protected ValueHandler<Element> domValueHandler() {
+        return (def, text) -> {
+            Text txt = def.getOwnerDocument().createTextNode(text);
+            def.appendChild(txt);
+        };
+    }
+
     protected <T extends ExpressionDefinition> ValueHandler<T> expressionDefinitionValueHandler() {
         return ExpressionDefinition::setExpression;
     }
 
+    // another one...
+    private static DocumentBuilderFactory createDocumentBuilderFactory() {
+        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+        factory.setNamespaceAware(true);
+        factory.setValidating(false);
+        factory.setIgnoringElementContentWhitespace(true);
+        factory.setIgnoringComments(true);
+        try {
+            // Set secure processing
+            factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE);
+        } catch (ParserConfigurationException e) {
+        }
+        try {
+            // Disable the external-general-entities by default
+            factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
+        } catch (ParserConfigurationException e) {
+        }
+        try {
+            // Disable the external-parameter-entities by default
+            factory.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
+        } catch (ParserConfigurationException e) {
+        }
+        // setup the SecurityManager by default if it's apache xerces
+        try {
+            Class<?> smClass = ObjectHelper.loadClass("org.apache.xerces.util.SecurityManager");
+            if (smClass != null) {
+                Object sm = smClass.getDeclaredConstructor().newInstance();
+                // Here we just use the default setting of the SeurityManager
+                factory.setAttribute("http://apache.org/xml/properties/security-manager", sm);
+            }
+        } catch (Exception e) {
+        }
+        return factory;
+    }
+
     interface AttributeHandler<T> {
         boolean accept(T definition, String name, String value) throws IOException, XmlPullParserException;
     }
diff --git a/core/camel-xml-io/src/main/java/org/apache/camel/xml/out/BaseWriter.java b/core/camel-xml-io/src/main/java/org/apache/camel/xml/out/BaseWriter.java
index ade6d9418d5..57d7b40a7ac 100644
--- a/core/camel-xml-io/src/main/java/org/apache/camel/xml/out/BaseWriter.java
+++ b/core/camel-xml-io/src/main/java/org/apache/camel/xml/out/BaseWriter.java
@@ -18,32 +18,57 @@ package org.apache.camel.xml.out;
 
 import java.io.IOException;
 import java.io.Writer;
+import java.util.Deque;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.w3c.dom.Attr;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.w3c.dom.Text;
 
 import org.apache.camel.xml.io.XMLWriter;
 
 public class BaseWriter {
 
     protected final XMLWriter writer;
-    protected final String namespace;
+    protected final Deque<String> namespacesStack = new LinkedList<>();
     protected boolean namespaceWritten;
 
     public BaseWriter(Writer writer, String namespace) throws IOException {
         this.writer = new XMLWriter(writer);
-        this.namespace = namespace;
+        this.namespacesStack.push(namespace);
     }
 
     protected void startElement(String name) throws IOException {
         writer.startElement(name);
-        if (!namespaceWritten && namespace != null) {
-            writer.addAttribute("xmlns", namespace);
+        if (!namespaceWritten && namespacesStack.peek() != null) {
+            writer.addAttribute("xmlns", namespacesStack.peek());
             namespaceWritten = true;
         }
     }
 
+    protected void startElement(String name, String namespace) throws IOException {
+        writer.startElement(name);
+        if (!namespacesStack.isEmpty() && !namespace.equals(namespacesStack.peek())) {
+            namespacesStack.push(namespace);
+            writer.addAttribute("xmlns", namespace);
+        }
+    }
+
     protected void endElement() throws IOException {
         writer.endElement();
     }
 
+    protected void endElement(String namespace) throws IOException {
+        endElement();
+        if (!namespacesStack.isEmpty() && namespacesStack.peek().equals(namespace)) {
+            namespacesStack.pop();
+        }
+    }
+
     protected void text(String text) throws IOException {
         writer.writeText(text);
     }
@@ -51,4 +76,34 @@ public class BaseWriter {
     protected void attribute(String name, String value) throws IOException {
         writer.addAttribute(name, value);
     }
+
+    protected void domElements(List<Element> elements) throws IOException {
+        for (Element e : elements) {
+            domElement(e);
+        }
+    }
+
+    protected void domElement(Element v) throws IOException {
+        if (v != null) {
+            startElement(v.getTagName(), v.getNamespaceURI());
+            NamedNodeMap nnm = v.getAttributes();
+            if (nnm != null) {
+                for (int i = 0; i < nnm.getLength(); i++) {
+                    Attr attr = (Attr) nnm.item(i);
+                    attribute(attr.getName(), attr.getValue());
+                }
+            }
+            NodeList children = v.getChildNodes();
+            for (int i = 0; i < children.getLength(); i++) {
+                Node item = children.item(i);
+                if (item instanceof Element) {
+                    domElement((Element) item);
+                } else if (item instanceof Text) {
+                    text(((Text) item).getWholeText());
+                }
+            }
+            endElement(v.getNamespaceURI());
+        }
+    }
+
 }
diff --git a/core/camel-xml-io/src/test/java/org/apache/camel/xml/in/ModelParserTest.java b/core/camel-xml-io/src/test/java/org/apache/camel/xml/in/ModelParserTest.java
index 73685c9b412..c6521a2fbd3 100644
--- a/core/camel-xml-io/src/test/java/org/apache/camel/xml/in/ModelParserTest.java
+++ b/core/camel-xml-io/src/test/java/org/apache/camel/xml/in/ModelParserTest.java
@@ -19,6 +19,7 @@ package org.apache.camel.xml.in;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.StringReader;
+import java.io.StringWriter;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -28,6 +29,12 @@ import java.util.Map;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
+import org.w3c.dom.Document;
+
 import org.apache.camel.model.FromDefinition;
 import org.apache.camel.model.PropertyDefinition;
 import org.apache.camel.model.RouteDefinition;
@@ -36,6 +43,8 @@ import org.apache.camel.model.RoutesDefinition;
 import org.apache.camel.model.SetBodyDefinition;
 import org.apache.camel.model.TemplatedRoutesDefinition;
 import org.apache.camel.model.ToDefinition;
+import org.apache.camel.model.app.BeansDefinition;
+import org.apache.camel.model.app.RegistryBeanDefinition;
 import org.apache.camel.model.language.XPathExpression;
 import org.apache.camel.model.rest.ParamDefinition;
 import org.apache.camel.model.rest.RestDefinition;
@@ -46,6 +55,9 @@ import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class ModelParserTest {
 
@@ -54,6 +66,8 @@ public class ModelParserTest {
             = Arrays.asList("barRest.xml", "simpleRest.xml", "simpleRestToD.xml", "restAllowedValues.xml");
     private static final List<String> TEMPLATE_XMLS = List.of("barTemplate.xml");
     private static final List<String> TEMPLATED_ROUTE_XMLS = List.of("barTemplatedRoute.xml");
+    private static final List<String> BEANS_XMLS
+            = Arrays.asList("beansEmpty.xml", "beansWithProperties.xml", "beansWithSpringNS.xml");
 
     @Test
     public void testNoNamespace() throws Exception {
@@ -92,6 +106,7 @@ public class ModelParserTest {
                 boolean isRest = REST_XMLS.contains(path.getFileName().toString());
                 boolean isTemplate = TEMPLATE_XMLS.contains(path.getFileName().toString());
                 boolean isTemplatedRoute = TEMPLATED_ROUTE_XMLS.contains(path.getFileName().toString());
+                boolean isBeans = BEANS_XMLS.contains(path.getFileName().toString());
                 if (isRest) {
                     RestsDefinition rests = parser.parseRestsDefinition().orElse(null);
                     assertNotNull(rests);
@@ -101,7 +116,7 @@ public class ModelParserTest {
                 } else if (isTemplatedRoute) {
                     TemplatedRoutesDefinition templatedRoutes = parser.parseTemplatedRoutesDefinition().orElse(null);
                     assertNotNull(templatedRoutes);
-                } else {
+                } else if (!isBeans) {
                     RoutesDefinition routes = parser.parseRoutesDefinition().orElse(null);
                     assertNotNull(routes);
                 }
@@ -202,6 +217,70 @@ public class ModelParserTest {
         Assertions.assertEquals(4, param.getAllowableValues().size());
     }
 
+    @Test
+    public void testEmptyBeans() throws Exception {
+        Path dir = getResourceFolder();
+        Path path = new File(dir.toFile(), "beansEmpty.xml").toPath();
+        ModelParser parser = new ModelParser(Files.newInputStream(path), NAMESPACE);
+        BeansDefinition beans = parser.parseBeansDefinition().orElse(null);
+        assertNotNull(beans);
+        assertTrue(beans.getBeans().isEmpty());
+        assertTrue(beans.getSpringBeans().isEmpty());
+    }
+
+    @Test
+    public void testBeansWithProperties() throws Exception {
+        Path dir = getResourceFolder();
+        Path path = new File(dir.toFile(), "beansWithProperties.xml").toPath();
+        ModelParser parser = new ModelParser(Files.newInputStream(path), NAMESPACE);
+        BeansDefinition beans = parser.parseBeansDefinition().orElse(null);
+        assertNotNull(beans);
+        assertEquals(2, beans.getBeans().size());
+        assertTrue(beans.getSpringBeans().isEmpty());
+
+        RegistryBeanDefinition b1 = beans.getBeans().get(0);
+        RegistryBeanDefinition b2 = beans.getBeans().get(1);
+
+        assertEquals("b1", b1.getName());
+        assertEquals("org.apache.camel.xml.in.ModelParserTest.MyBean", b1.getType());
+        assertEquals("v1", b1.getProperties().get("p1"));
+        assertEquals("v2", b1.getProperties().get("p2"));
+        assertNotNull(b1.getProperties().get("nested"));
+        assertEquals("v1a", ((Map<String, Object>) b1.getProperties().get("nested")).get("p1"));
+        assertEquals("v2a", ((Map<String, Object>) b1.getProperties().get("nested")).get("p2"));
+
+        assertEquals("b2", b2.getName());
+        assertEquals("org.apache.camel.xml.in.ModelParserTest.MyBean", b1.getType());
+        assertEquals("v1", b2.getProperties().get("p1"));
+        assertEquals("v2", b2.getProperties().get("p2"));
+        assertNull(b2.getProperties().get("nested"));
+        assertEquals("v1a", b2.getProperties().get("nested.p1"));
+        assertEquals("v2a", b2.getProperties().get("nested.p2"));
+    }
+
+    @Test
+    public void testSpringBeans() throws Exception {
+        Path dir = getResourceFolder();
+        Path path = new File(dir.toFile(), "beansWithSpringNS.xml").toPath();
+        final ModelParser parser = new ModelParser(Files.newInputStream(path), NAMESPACE);
+        BeansDefinition beans = parser.parseBeansDefinition().orElse(null);
+        assertNotNull(beans);
+        assertTrue(beans.getBeans().isEmpty());
+        assertEquals(2, beans.getSpringBeans().size());
+        Document dom = beans.getSpringBeans().get(0).getOwnerDocument();
+        StringWriter sw = new StringWriter();
+        TransformerFactory.newInstance().newTransformer().transform(new DOMSource(dom), new StreamResult(sw));
+        String document = sw.toString();
+        assertTrue(document.contains("class=\"java.lang.String\""));
+
+        assertSame(beans.getSpringBeans().get(0).getOwnerDocument(), beans.getSpringBeans().get(1).getOwnerDocument());
+        assertEquals("s1", beans.getSpringBeans().get(0).getAttribute("id"));
+        assertEquals("s2", beans.getSpringBeans().get(1).getAttribute("id"));
+
+        assertEquals(1, beans.getComponentScanning().size());
+        assertEquals("com.example", beans.getComponentScanning().get(0).getBasePackage());
+    }
+
     @Test
     public void testUriLineBreak() throws Exception {
         final String fromFrag1 = "seda:a?concurrentConsumers=2&amp;";
diff --git a/core/camel-xml-io/src/test/java/org/apache/camel/xml/out/ModelWriterTest.java b/core/camel-xml-io/src/test/java/org/apache/camel/xml/out/ModelWriterTest.java
index 9932a5b375b..65d316e0546 100644
--- a/core/camel-xml-io/src/test/java/org/apache/camel/xml/out/ModelWriterTest.java
+++ b/core/camel-xml-io/src/test/java/org/apache/camel/xml/out/ModelWriterTest.java
@@ -29,9 +29,12 @@ import java.util.stream.Stream;
 
 import jakarta.xml.bind.annotation.XmlTransient;
 
+import org.w3c.dom.Element;
+
 import org.apache.camel.model.RouteTemplatesDefinition;
 import org.apache.camel.model.RoutesDefinition;
 import org.apache.camel.model.TemplatedRoutesDefinition;
+import org.apache.camel.model.app.BeansDefinition;
 import org.apache.camel.model.rest.RestsDefinition;
 import org.apache.camel.xml.in.ModelParser;
 import org.junit.jupiter.api.DisplayName;
@@ -102,6 +105,20 @@ public class ModelWriterTest {
         }
     }
 
+    @ParameterizedTest
+    @MethodSource("beans")
+    @DisplayName("Test xml roundtrip for <beans>")
+    void testBeans(String xml, String ns) throws Exception {
+        try (InputStream is = getClass().getClassLoader().getResourceAsStream(xml)) {
+            BeansDefinition expected = new ModelParser(is, NAMESPACE).parseBeansDefinition().get();
+            StringWriter sw = new StringWriter();
+            new ModelWriter(sw, ns).writeBeansDefinition(expected);
+            BeansDefinition actual
+                    = new ModelParser(new StringReader(sw.toString()), ns).parseBeansDefinition().get();
+            assertDeepEquals(expected, actual, sw.toString());
+        }
+    }
+
     private static Stream<Arguments> routes() {
         return definitions("routes");
     }
@@ -118,6 +135,10 @@ public class ModelWriterTest {
         return definitions("templatedRoutes");
     }
 
+    private static Stream<Arguments> beans() {
+        return definitions("beans");
+    }
+
     private static Stream<Arguments> definitions(String xml) {
         try {
             return Files.list(Paths.get("src/test/resources"))
@@ -173,6 +194,10 @@ public class ModelWriterTest {
             assertEquals(((Enum) expected).name(), ((Enum) actual).name(), path);
         } else if (expected.getClass().getName().startsWith("java.")) {
             assertEquals(expected, actual, path);
+        } else if (Element.class.isAssignableFrom(expected.getClass())) {
+            // TODO: deep check
+            assertEquals(((Element) expected).getTagName(), ((Element) actual).getTagName(), path);
+            assertEquals(((Element) expected).getNamespaceURI(), ((Element) actual).getNamespaceURI(), path);
         } else {
             for (Class<?> clazz = expected.getClass(); clazz != Object.class; clazz = clazz.getSuperclass()) {
                 for (Field field : clazz.getDeclaredFields()) {
diff --git a/dsl/camel-xml-io-dsl/src/test/resources/org/apache/camel/dsl/xml/io/camel-app2.xml b/core/camel-xml-io/src/test/resources/beansEmpty.xml
similarity index 78%
copy from dsl/camel-xml-io-dsl/src/test/resources/org/apache/camel/dsl/xml/io/camel-app2.xml
copy to core/camel-xml-io/src/test/resources/beansEmpty.xml
index 05d51ea6329..eaaca1e32d2 100644
--- a/dsl/camel-xml-io-dsl/src/test/resources/org/apache/camel/dsl/xml/io/camel-app2.xml
+++ b/core/camel-xml-io/src/test/resources/beansEmpty.xml
@@ -17,14 +17,5 @@
     limitations under the License.
 
 -->
-<camel-app>
-
-    <component-scan base-package="org.apache.camel.dsl.xml.io.beans" />
-
-    <route id="r2">
-        <from uri="direct:x2"/>
-        <bean ref="bean-from-registry" />
-        <to uri="mock:y2"/>
-    </route>
-
-</camel-app>
+<beans xmlns="http://camel.apache.org/schema/spring">
+</beans>
diff --git a/core/camel-xml-io/src/test/resources/beansWithProperties.xml b/core/camel-xml-io/src/test/resources/beansWithProperties.xml
new file mode 100644
index 00000000000..e999a95fea9
--- /dev/null
+++ b/core/camel-xml-io/src/test/resources/beansWithProperties.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    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.
+
+-->
+<beans xmlns="http://camel.apache.org/schema/spring" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+xsi:schemaLocation="http://camel.apache.org/schema/spring file:/data/sources/github.com/apache/camel-upstream/components/camel-spring-xml/target/classes/camel-spring.xsd">
+
+	<bean name="b1" type="org.apache.camel.xml.in.ModelParserTest.MyBean">
+		<properties>
+			<property key="p1" value="v1" />
+			<property key="p2" value="v2" />
+			<property key="nested">
+				<properties>
+					<property key="p1" value="v1a" />
+					<property key="p2" value="v2a" />
+				</properties>
+			</property>
+		</properties>
+	</bean>
+
+	<bean name="b2" type="org.apache.camel.xml.in.ModelParserTest.MyBean">
+		<properties>
+			<property key="p1" value="v1" />
+			<property key="p2" value="v2" />
+			<property key="nested.p1" value="v1a" />
+			<property key="nested.p2" value="v2a" />
+		</properties>
+	</bean>
+
+</beans>
diff --git a/dsl/camel-xml-io-dsl/src/test/resources/org/apache/camel/dsl/xml/io/camel-app2.xml b/core/camel-xml-io/src/test/resources/beansWithSpringNS.xml
similarity index 58%
copy from dsl/camel-xml-io-dsl/src/test/resources/org/apache/camel/dsl/xml/io/camel-app2.xml
copy to core/camel-xml-io/src/test/resources/beansWithSpringNS.xml
index 05d51ea6329..46b157f014d 100644
--- a/dsl/camel-xml-io-dsl/src/test/resources/org/apache/camel/dsl/xml/io/camel-app2.xml
+++ b/core/camel-xml-io/src/test/resources/beansWithSpringNS.xml
@@ -17,14 +17,24 @@
     limitations under the License.
 
 -->
-<camel-app>
+<beans xmlns="http://camel.apache.org/schema/spring" xmlns:s="http://www.springframework.org/schema/beans">
 
-    <component-scan base-package="org.apache.camel.dsl.xml.io.beans" />
+	<s:bean id="s1" class="java.lang.String">
+		<s:description>Real Spring Bean</s:description>
+		<s:constructor-arg index="0" value="Hello " />
+		<s:constructor-arg index="1" value="World!" />
+	</s:bean>
 
-    <route id="r2">
-        <from uri="direct:x2"/>
-        <bean ref="bean-from-registry" />
-        <to uri="mock:y2"/>
-    </route>
+	<s:bean id="s2" class="java.lang.String">
+		<s:property name="a" ref="x" />
+		<s:property name="b">
+			<s:list value-type="java.lang.Integer">
+				<s:null />
+				<s:value>there's value in it</s:value>
+			</s:list>
+		</s:property>
+	</s:bean>
 
-</camel-app>
+	<component-scan base-package="com.example" />
+
+</beans>
diff --git a/dsl/camel-xml-io-dsl/src/main/java/org/apache/camel/dsl/xml/io/XmlRoutesBuilderLoader.java b/dsl/camel-xml-io-dsl/src/main/java/org/apache/camel/dsl/xml/io/XmlRoutesBuilderLoader.java
index 917d51c0843..e4e1a02c3ed 100644
--- a/dsl/camel-xml-io-dsl/src/main/java/org/apache/camel/dsl/xml/io/XmlRoutesBuilderLoader.java
+++ b/dsl/camel-xml-io-dsl/src/main/java/org/apache/camel/dsl/xml/io/XmlRoutesBuilderLoader.java
@@ -44,7 +44,6 @@ import org.apache.camel.spi.PackageScanClassResolver;
 import org.apache.camel.spi.Resource;
 import org.apache.camel.spi.annotations.RoutesLoader;
 import org.apache.camel.support.CachedResource;
-import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.DIRegistry;
 import org.apache.camel.support.DefaultRegistry;
 import org.apache.camel.xml.in.ModelParser;
@@ -131,10 +130,7 @@ public class XmlRoutesBuilderLoader extends RouteBuilderLoaderSupport {
 
                 List<String> packagesToScan = new ArrayList<>();
                 app.getComponentScanning().forEach(cs -> {
-                    Boolean useJakartaInject = CamelContextHelper.parseBoolean(getCamelContext(), cs.getUseJsr330());
-                    if (useJakartaInject != null && useJakartaInject) {
-                        packagesToScan.add(cs.getBasePackage());
-                    }
+                    packagesToScan.add(cs.getBasePackage());
                 });
                 if (!packagesToScan.isEmpty()) {
                     DIRegistry registry = null;
diff --git a/dsl/camel-xml-io-dsl/src/test/resources/org/apache/camel/dsl/xml/io/camel-app1.xml b/dsl/camel-xml-io-dsl/src/test/resources/org/apache/camel/dsl/xml/io/camel-app1.xml
index c0075882276..e163f0cd11a 100644
--- a/dsl/camel-xml-io-dsl/src/test/resources/org/apache/camel/dsl/xml/io/camel-app1.xml
+++ b/dsl/camel-xml-io-dsl/src/test/resources/org/apache/camel/dsl/xml/io/camel-app1.xml
@@ -19,7 +19,7 @@
 -->
 <camel-app xmlns="http://camel.apache.org/schema/spring">
 
-    <component-scan use-jsr-330="true" base-package="org.apache.camel.dsl.xml.io.beans" />
+    <component-scan base-package="org.apache.camel.dsl.xml.io.beans" />
 
     <route id="r1">
         <from uri="direct:x1"/>
diff --git a/dsl/camel-xml-io-dsl/src/test/resources/org/apache/camel/dsl/xml/io/camel-app2.xml b/dsl/camel-xml-io-dsl/src/test/resources/org/apache/camel/dsl/xml/io/camel-app2.xml
index 05d51ea6329..968495ac991 100644
--- a/dsl/camel-xml-io-dsl/src/test/resources/org/apache/camel/dsl/xml/io/camel-app2.xml
+++ b/dsl/camel-xml-io-dsl/src/test/resources/org/apache/camel/dsl/xml/io/camel-app2.xml
@@ -17,9 +17,7 @@
     limitations under the License.
 
 -->
-<camel-app>
-
-    <component-scan base-package="org.apache.camel.dsl.xml.io.beans" />
+<camel-app xmlns:s="http://www.springframework.org/schema/beans">
 
     <route id="r2">
         <from uri="direct:x2"/>
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
index 35ca7a626cc..229062f100c 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
@@ -100,8 +100,11 @@ import org.apache.camel.model.WhenDefinition;
 import org.apache.camel.model.WhenSkipSendToEndpointDefinition;
 import org.apache.camel.model.WireTapDefinition;
 import org.apache.camel.model.app.ApplicationDefinition;
+import org.apache.camel.model.app.BeanPropertiesDefinition;
+import org.apache.camel.model.app.BeanPropertyDefinition;
 import org.apache.camel.model.app.BeansDefinition;
 import org.apache.camel.model.app.ComponentScanDefinition;
+import org.apache.camel.model.app.RegistryBeanDefinition;
 import org.apache.camel.model.cloud.BlacklistServiceCallServiceFilterConfiguration;
 import org.apache.camel.model.cloud.CachingServiceCallServiceDiscoveryConfiguration;
 import org.apache.camel.model.cloud.CombinedServiceCallServiceDiscoveryConfiguration;
@@ -590,6 +593,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport {
             types = org.apache.camel.model.app.ApplicationDefinition.class,
             order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1,
             properties = {
+                    @YamlProperty(name = "bean", type = "array:org.apache.camel.model.app.RegistryBeanDefinition"),
                     @YamlProperty(name = "component-scan", type = "array:org.apache.camel.model.app.ComponentScanDefinition"),
                     @YamlProperty(name = "rest", type = "array:org.apache.camel.model.rest.RestDefinition"),
                     @YamlProperty(name = "route", type = "array:org.apache.camel.model.RouteDefinition"),
@@ -612,6 +616,11 @@ public final class ModelDeserializers extends YamlDeserializerSupport {
         protected boolean setProperty(ApplicationDefinition target, String propertyKey,
                 String propertyName, Node node) {
             switch(propertyKey) {
+                case "bean": {
+                    java.util.List<org.apache.camel.model.app.RegistryBeanDefinition> val = asFlatList(node, org.apache.camel.model.app.RegistryBeanDefinition.class);
+                    target.setBeans(val);
+                    break;
+                }
                 case "component-scan": {
                     java.util.List<org.apache.camel.model.app.ComponentScanDefinition> val = asFlatList(node, org.apache.camel.model.app.ComponentScanDefinition.class);
                     target.setComponentScanning(val);
@@ -1108,11 +1117,90 @@ public final class ModelDeserializers extends YamlDeserializerSupport {
         }
     }
 
+    @YamlType(
+            types = org.apache.camel.model.app.BeanPropertiesDefinition.class,
+            order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1,
+            properties = @YamlProperty(name = "property", type = "array:org.apache.camel.model.app.BeanPropertyDefinition")
+    )
+    public static class BeanPropertiesDefinitionDeserializer extends YamlDeserializerBase<BeanPropertiesDefinition> {
+        public BeanPropertiesDefinitionDeserializer() {
+            super(BeanPropertiesDefinition.class);
+        }
+
+        @Override
+        protected BeanPropertiesDefinition newInstance() {
+            return new BeanPropertiesDefinition();
+        }
+
+        @Override
+        protected boolean setProperty(BeanPropertiesDefinition target, String propertyKey,
+                String propertyName, Node node) {
+            switch(propertyKey) {
+                case "property": {
+                    java.util.List<org.apache.camel.model.app.BeanPropertyDefinition> val = asFlatList(node, org.apache.camel.model.app.BeanPropertyDefinition.class);
+                    target.setProperties(val);
+                    break;
+                }
+                default: {
+                    return false;
+                }
+            }
+            return true;
+        }
+    }
+
+    @YamlType(
+            types = org.apache.camel.model.app.BeanPropertyDefinition.class,
+            order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1,
+            properties = {
+                    @YamlProperty(name = "key", type = "string"),
+                    @YamlProperty(name = "properties", type = "object:org.apache.camel.model.app.BeanPropertiesDefinition"),
+                    @YamlProperty(name = "value", type = "string")
+            }
+    )
+    public static class BeanPropertyDefinitionDeserializer extends YamlDeserializerBase<BeanPropertyDefinition> {
+        public BeanPropertyDefinitionDeserializer() {
+            super(BeanPropertyDefinition.class);
+        }
+
+        @Override
+        protected BeanPropertyDefinition newInstance() {
+            return new BeanPropertyDefinition();
+        }
+
+        @Override
+        protected boolean setProperty(BeanPropertyDefinition target, String propertyKey,
+                String propertyName, Node node) {
+            switch(propertyKey) {
+                case "key": {
+                    String val = asText(node);
+                    target.setKey(val);
+                    break;
+                }
+                case "properties": {
+                    org.apache.camel.model.app.BeanPropertiesDefinition val = asType(node, org.apache.camel.model.app.BeanPropertiesDefinition.class);
+                    target.setProperties(val);
+                    break;
+                }
+                case "value": {
+                    String val = asText(node);
+                    target.setValue(val);
+                    break;
+                }
+                default: {
+                    return false;
+                }
+            }
+            return true;
+        }
+    }
+
     @YamlType(
             nodes = "beans",
             types = org.apache.camel.model.app.BeansDefinition.class,
             order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1,
             properties = {
+                    @YamlProperty(name = "bean", type = "array:org.apache.camel.model.app.RegistryBeanDefinition"),
                     @YamlProperty(name = "component-scan", type = "array:org.apache.camel.model.app.ComponentScanDefinition"),
                     @YamlProperty(name = "rest", type = "array:org.apache.camel.model.rest.RestDefinition"),
                     @YamlProperty(name = "route", type = "array:org.apache.camel.model.RouteDefinition"),
@@ -1135,6 +1223,11 @@ public final class ModelDeserializers extends YamlDeserializerSupport {
         protected boolean setProperty(BeansDefinition target, String propertyKey,
                 String propertyName, Node node) {
             switch(propertyKey) {
+                case "bean": {
+                    java.util.List<org.apache.camel.model.app.RegistryBeanDefinition> val = asFlatList(node, org.apache.camel.model.app.RegistryBeanDefinition.class);
+                    target.setBeans(val);
+                    break;
+                }
                 case "component-scan": {
                     java.util.List<org.apache.camel.model.app.ComponentScanDefinition> val = asFlatList(node, org.apache.camel.model.app.ComponentScanDefinition.class);
                     target.setComponentScanning(val);
@@ -2112,10 +2205,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport {
     @YamlType(
             types = org.apache.camel.model.app.ComponentScanDefinition.class,
             order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1,
-            properties = {
-                    @YamlProperty(name = "base-package", type = "string"),
-                    @YamlProperty(name = "use-jsr-330", type = "boolean")
-            }
+            properties = @YamlProperty(name = "base-package", type = "string")
     )
     public static class ComponentScanDefinitionDeserializer extends YamlDeserializerBase<ComponentScanDefinition> {
         public ComponentScanDefinitionDeserializer() {
@@ -2136,11 +2226,6 @@ public final class ModelDeserializers extends YamlDeserializerSupport {
                     target.setBasePackage(val);
                     break;
                 }
-                case "use-jsr-330": {
-                    String val = asText(node);
-                    target.setUseJsr330(val);
-                    break;
-                }
                 default: {
                     return false;
                 }
@@ -11682,6 +11767,52 @@ public final class ModelDeserializers extends YamlDeserializerSupport {
         }
     }
 
+    @YamlType(
+            types = org.apache.camel.model.app.RegistryBeanDefinition.class,
+            order = org.apache.camel.dsl.yaml.common.YamlDeserializerResolver.ORDER_LOWEST - 1,
+            properties = {
+                    @YamlProperty(name = "name", type = "string"),
+                    @YamlProperty(name = "properties", type = "object"),
+                    @YamlProperty(name = "type", type = "string")
+            }
+    )
+    public static class RegistryBeanDefinitionDeserializer extends YamlDeserializerBase<RegistryBeanDefinition> {
+        public RegistryBeanDefinitionDeserializer() {
+            super(RegistryBeanDefinition.class);
+        }
+
+        @Override
+        protected RegistryBeanDefinition newInstance() {
+            return new RegistryBeanDefinition();
+        }
+
+        @Override
+        protected boolean setProperty(RegistryBeanDefinition target, String propertyKey,
+                String propertyName, Node node) {
+            switch(propertyKey) {
+                case "name": {
+                    String val = asText(node);
+                    target.setName(val);
+                    break;
+                }
+                case "properties": {
+                    java.util.Map val = asMap(node);
+                    target.setProperties(val);
+                    break;
+                }
+                case "type": {
+                    String val = asText(node);
+                    target.setType(val);
+                    break;
+                }
+                default: {
+                    return false;
+                }
+            }
+            return true;
+        }
+    }
+
     @YamlType(
             nodes = {
                     "remove-header",
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializersResolver.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializersResolver.java
index 1cd50129800..0b0785c531d 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializersResolver.java
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializersResolver.java
@@ -37,6 +37,8 @@ public final class ModelDeserializersResolver implements YamlDeserializerResolve
             case "org.apache.camel.model.config.BatchResequencerConfig": return new ModelDeserializers.BatchResequencerConfigDeserializer();
             case "bean": return new ModelDeserializers.BeanDefinitionDeserializer();
             case "org.apache.camel.model.BeanDefinition": return new ModelDeserializers.BeanDefinitionDeserializer();
+            case "org.apache.camel.model.app.BeanPropertiesDefinition": return new ModelDeserializers.BeanPropertiesDefinitionDeserializer();
+            case "org.apache.camel.model.app.BeanPropertyDefinition": return new ModelDeserializers.BeanPropertyDefinitionDeserializer();
             case "beans": return new ModelDeserializers.BeansDefinitionDeserializer();
             case "org.apache.camel.model.app.BeansDefinition": return new ModelDeserializers.BeansDefinitionDeserializer();
             case "bearer-token": return new ModelDeserializers.BearerTokenDefinitionDeserializer();
@@ -322,6 +324,7 @@ public final class ModelDeserializersResolver implements YamlDeserializerResolve
             case "org.apache.camel.model.errorhandler.RefErrorHandlerDefinition": return new ModelDeserializers.RefErrorHandlerDefinitionDeserializer();
             case "ref": return new ModelDeserializers.RefExpressionDeserializer();
             case "org.apache.camel.model.language.RefExpression": return new ModelDeserializers.RefExpressionDeserializer();
+            case "org.apache.camel.model.app.RegistryBeanDefinition": return new ModelDeserializers.RegistryBeanDefinitionDeserializer();
             case "remove-header": return new ModelDeserializers.RemoveHeaderDefinitionDeserializer();
             case "removeHeader": return new ModelDeserializers.RemoveHeaderDefinitionDeserializer();
             case "org.apache.camel.model.RemoveHeaderDefinition": return new ModelDeserializers.RemoveHeaderDefinitionDeserializer();
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/BeansDeserializer.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/BeansDeserializer.java
index c29a6fc66d7..ea6ab6fdc6f 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/BeansDeserializer.java
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/BeansDeserializer.java
@@ -24,10 +24,12 @@ import org.apache.camel.dsl.yaml.common.YamlDeserializationContext;
 import org.apache.camel.dsl.yaml.common.YamlDeserializerResolver;
 import org.apache.camel.dsl.yaml.common.YamlDeserializerSupport;
 import org.apache.camel.dsl.yaml.common.YamlSupport;
+import org.apache.camel.model.app.RegistryBeanDefinition;
 import org.apache.camel.spi.CamelContextCustomizer;
 import org.apache.camel.spi.annotations.YamlIn;
 import org.apache.camel.spi.annotations.YamlProperty;
 import org.apache.camel.spi.annotations.YamlType;
+import org.apache.camel.support.PropertyBindingSupport;
 import org.apache.camel.util.ObjectHelper;
 import org.snakeyaml.engine.v2.api.ConstructNode;
 import org.snakeyaml.engine.v2.nodes.Node;
@@ -39,7 +41,7 @@ import org.snakeyaml.engine.v2.nodes.SequenceNode;
           order = YamlDeserializerResolver.ORDER_DEFAULT,
           properties = {
                   @YamlProperty(name = "__extends",
-                                type = "array:org.apache.camel.dsl.yaml.deserializers.NamedBeanDefinition")
+                                type = "array:org.apache.camel.model.app.RegistryBeanDefinition")
           })
 public class BeansDeserializer extends YamlDeserializerSupport implements ConstructNode {
     @Override
@@ -51,10 +53,13 @@ public class BeansDeserializer extends YamlDeserializerSupport implements Constr
         for (Node item : sn.getValue()) {
             setDeserializationContext(item, dc);
 
-            NamedBeanDefinition bean = asType(item, NamedBeanDefinition.class);
+            RegistryBeanDefinition bean = asType(item, RegistryBeanDefinition.class);
 
             ObjectHelper.notNull(bean.getName(), "The bean name must be set");
             ObjectHelper.notNull(bean.getType(), "The bean type must be set");
+            if (!bean.getType().startsWith("#class:")) {
+                bean.setType("#class:" + bean.getType());
+            }
 
             customizers.add(new CamelContextCustomizer() {
                 @Override
@@ -65,7 +70,7 @@ public class BeansDeserializer extends YamlDeserializerSupport implements Constr
                         camelContext.getRegistry().unbind(name);
                         camelContext.getRegistry().bind(
                                 name,
-                                bean.newInstance(camelContext));
+                                newInstance(bean, camelContext));
                     } catch (Exception e) {
                         throw new RuntimeException(e);
                     }
@@ -75,4 +80,15 @@ public class BeansDeserializer extends YamlDeserializerSupport implements Constr
 
         return YamlSupport.customizer(customizers);
     }
+
+    public Object newInstance(RegistryBeanDefinition bean, CamelContext context) throws Exception {
+        final Object target = PropertyBindingSupport.resolveBean(context, bean.getType());
+
+        if (bean.getProperties() != null && !bean.getProperties().isEmpty()) {
+            YamlSupport.setPropertiesOnTarget(context, target, bean.getProperties());
+        }
+
+        return target;
+    }
+
 }
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/CustomResolver.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/CustomResolver.java
index e974d64cb73..6c4855aa07f 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/CustomResolver.java
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/CustomResolver.java
@@ -54,8 +54,6 @@ public class CustomResolver implements YamlDeserializerResolver {
                 return new RouteTemplateBeanDefinitionDeserializer();
             case "org.apache.camel.model.TemplatedRouteBeanDefinition":
                 return new TemplatedRouteBeanDefinitionDeserializer();
-            case "org.apache.camel.dsl.yaml.deserializers.NamedBeanDefinition":
-                return new NamedBeanDeserializer();
             case "org.apache.camel.dsl.yaml.deserializers.OutputAwareFromDefinition":
                 return new OutputAwareFromDefinitionDeserializer();
 
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/NamedBeanDefinition.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/NamedBeanDefinition.java
deleted file mode 100644
index 6c60be2b76d..00000000000
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/NamedBeanDefinition.java
+++ /dev/null
@@ -1,72 +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.dsl.yaml.deserializers;
-
-import java.util.Map;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.dsl.yaml.common.YamlSupport;
-import org.apache.camel.support.PropertyBindingSupport;
-
-public class NamedBeanDefinition {
-    private String name;
-    private String type;
-    private Map<String, Object> properties;
-
-    public NamedBeanDefinition() {
-    }
-
-    public NamedBeanDefinition(String name, String type, Map<String, Object> properties) {
-        this.name = name;
-        this.type = type;
-        this.properties = properties;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getType() {
-        return type;
-    }
-
-    public void setType(String type) {
-        this.type = type;
-    }
-
-    public Map<String, Object> getProperties() {
-        return properties;
-    }
-
-    public void setProperties(Map<String, Object> properties) {
-        this.properties = properties;
-    }
-
-    public Object newInstance(CamelContext context) throws Exception {
-        final Object target = PropertyBindingSupport.resolveBean(context, this.type);
-
-        if (this.properties != null && !this.properties.isEmpty()) {
-            YamlSupport.setPropertiesOnTarget(context, target, this.properties);
-        }
-
-        return target;
-    }
-}
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/NamedBeanDeserializer.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/NamedBeanDeserializer.java
deleted file mode 100644
index 1476ef10d4d..00000000000
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/NamedBeanDeserializer.java
+++ /dev/null
@@ -1,81 +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.dsl.yaml.deserializers;
-
-import org.apache.camel.dsl.yaml.common.YamlDeserializerBase;
-import org.apache.camel.dsl.yaml.common.YamlDeserializerResolver;
-import org.apache.camel.dsl.yaml.common.exception.UnsupportedFieldException;
-import org.apache.camel.spi.annotations.YamlProperty;
-import org.apache.camel.spi.annotations.YamlType;
-import org.apache.camel.util.ObjectHelper;
-import org.snakeyaml.engine.v2.nodes.MappingNode;
-import org.snakeyaml.engine.v2.nodes.Node;
-import org.snakeyaml.engine.v2.nodes.NodeTuple;
-
-@YamlType(
-          types = NamedBeanDefinition.class,
-          order = YamlDeserializerResolver.ORDER_DEFAULT,
-          properties = {
-                  @YamlProperty(name = "name", type = "string", required = true),
-                  @YamlProperty(name = "type", type = "string", required = true),
-                  @YamlProperty(name = "properties", type = "object")
-          })
-public class NamedBeanDeserializer extends YamlDeserializerBase<NamedBeanDefinition> {
-
-    public NamedBeanDeserializer() {
-        super(NamedBeanDefinition.class);
-    }
-
-    @Override
-    protected NamedBeanDefinition newInstance() {
-        return new NamedBeanDefinition();
-    }
-
-    @Override
-    public NamedBeanDefinition construct(Node node) {
-        final MappingNode bn = asMappingNode(node);
-        final NamedBeanDefinition answer = new NamedBeanDefinition();
-
-        for (NodeTuple tuple : bn.getValue()) {
-            final String key = asText(tuple.getKeyNode());
-            final Node val = tuple.getValueNode();
-
-            switch (key) {
-                case "name":
-                    answer.setName(asText(val));
-                    break;
-                case "type":
-                    String type = asText(val);
-                    if (!type.startsWith("#class:")) {
-                        type = "#class:" + type;
-                    }
-                    answer.setType(type);
-                    break;
-                case "properties":
-                    answer.setProperties(asMap(val));
-                    break;
-                default:
-                    throw new UnsupportedFieldException(val, key);
-            }
-        }
-
-        ObjectHelper.notNull(answer.getName(), "The bean name must be set");
-        ObjectHelper.notNull(answer.getType(), "The bean type must be set");
-
-        return answer;
-    }
-}
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteTemplateDefinitionDeserializer.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteTemplateDefinitionDeserializer.java
index f68aaae710c..bfe52657a44 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteTemplateDefinitionDeserializer.java
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteTemplateDefinitionDeserializer.java
@@ -45,7 +45,7 @@ import org.snakeyaml.engine.v2.nodes.Node;
                   @YamlProperty(name = "parameters",
                                 type = "array:org.apache.camel.model.RouteTemplateParameterDefinition"),
                   @YamlProperty(name = "beans",
-                                type = "array:org.apache.camel.dsl.yaml.deserializers.NamedBeanDefinition")
+                                type = "array:org.apache.camel.model.app.RegistryBeanDefinition")
           })
 public class RouteTemplateDefinitionDeserializer extends YamlDeserializerBase<RouteTemplateDefinition> {
     public RouteTemplateDefinitionDeserializer() {
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/TemplatedRouteDefinitionDeserializer.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/TemplatedRouteDefinitionDeserializer.java
index fd9f8747ffe..4d7fcc20e6b 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/TemplatedRouteDefinitionDeserializer.java
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/TemplatedRouteDefinitionDeserializer.java
@@ -43,7 +43,7 @@ import org.snakeyaml.engine.v2.nodes.Node;
                   @YamlProperty(name = "parameters",
                                 type = "array:org.apache.camel.model.TemplatedRouteParameterDefinition"),
                   @YamlProperty(name = "beans",
-                                type = "array:org.apache.camel.dsl.yaml.deserializers.NamedBeanDefinition")
+                                type = "array:org.apache.camel.model.app.RegistryBeanDefinition")
           })
 public class TemplatedRouteDefinitionDeserializer extends YamlDeserializerBase<TemplatedRouteDefinition> {
     public TemplatedRouteDefinitionDeserializer() {
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlDeserializersMojo.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlDeserializersMojo.java
index 7f1b64acd12..54fab99f323 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlDeserializersMojo.java
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlDeserializersMojo.java
@@ -847,7 +847,33 @@ public class GenerateYamlDeserializersMojo extends GenerateYamlSupportMojo {
         cb.beginControlFlow("case $S:", fieldName);
 
         ClassInfo c = view.getClassByName(field.type().name());
-        if (c != null && c.isEnum()) {
+        if (hasAnnotation(field, XML_JAVA_TYPE_ADAPTER_CLASS)) {
+            // conversion using JAXB Adapter of known class
+            Optional<AnnotationValue> adapter = annotationValue(field, XML_JAVA_TYPE_ADAPTER_CLASS, "value");
+            if (adapter.isEmpty()) {
+                return false;
+            }
+            String adapterClass = adapter.get().asClass().name().toString();
+            ClassInfo adapterClassInfo = view.getClassByName(adapter.get().asClass().name());
+            if (adapterClassInfo.superClassType().kind() == Type.Kind.PARAMETERIZED_TYPE) {
+                List<Type> arguments = adapterClassInfo.superClassType().asParameterizedType().arguments();
+                if (arguments.size() == 2) {
+                    // extends XmlAdapter<BeanPropertiesDefinition, Map<String, Object>>
+//                    Type type = arguments.get(0);
+//                    cb.addStatement("$L val = new $L().unmarshal(asType(node, $L.class))",
+//                            field.type().name().toString(), adapterClass, type.name());
+                    Type type = arguments.get(1);
+                    if (type.name().toString().equals("java.util.Map")) {
+                        cb.addStatement("$L val = asMap(node)", field.type().name().toString());
+                        cb.addStatement("target.set$L(val)", StringHelper.capitalize(field.name()));
+                        cb.addStatement("break");
+                        annotations.add(
+                                yamlProperty(fieldName, "object", isRequired(field), isDeprecated(field))
+                        );
+                    }
+                }
+            }
+        } else if (c != null && c.isEnum()) {
             cb.addStatement("target.set$L(asEnum(node, $L.class))", StringHelper.capitalize(field.name()), field.type().name().toString());
             cb.addStatement("break");
 
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlSupportMojo.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlSupportMojo.java
index 736c29982df..1afc5c42a74 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlSupportMojo.java
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlSupportMojo.java
@@ -83,6 +83,10 @@ public abstract class GenerateYamlSupportMojo extends AbstractMojo {
             = DotName.createSimple("jakarta.xml.bind.annotation.XmlElements");
     public static final DotName XML_TRANSIENT_CLASS
             = DotName.createSimple("jakarta.xml.bind.annotation.XmlTransient");
+    public static final DotName XML_ANY_ELEMENT_CLASS
+            = DotName.createSimple("jakarta.xml.bind.annotation.XmlAnyElement");
+    public static final DotName XML_JAVA_TYPE_ADAPTER_CLASS
+            = DotName.createSimple("jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter");
 
     public static final DotName METADATA_ANNOTATION_CLASS
             = DotName.createSimple("org.apache.camel.spi.Metadata");
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camel-yaml-dsl.json b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camel-yaml-dsl.json
index dc9ea6efc51..1d09c023e61 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camel-yaml-dsl.json
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camel-yaml-dsl.json
@@ -292,7 +292,7 @@
       "org.apache.camel.dsl.yaml.deserializers.BeansDeserializer" : {
         "type" : "array",
         "items" : {
-          "$ref" : "#/items/definitions/org.apache.camel.dsl.yaml.deserializers.NamedBeanDefinition"
+          "$ref" : "#/items/definitions/org.apache.camel.model.app.RegistryBeanDefinition"
         }
       },
       "org.apache.camel.dsl.yaml.deserializers.ErrorHandlerBuilderDeserializer" : {
@@ -318,21 +318,6 @@
           }
         }
       },
-      "org.apache.camel.dsl.yaml.deserializers.NamedBeanDefinition" : {
-        "type" : "object",
-        "properties" : {
-          "name" : {
-            "type" : "string"
-          },
-          "properties" : {
-            "type" : "object"
-          },
-          "type" : {
-            "type" : "string"
-          }
-        },
-        "required" : [ "name", "type" ]
-      },
       "org.apache.camel.dsl.yaml.deserializers.OutputAwareFromDefinition" : {
         "type" : "object",
         "properties" : {
@@ -2568,7 +2553,7 @@
           "beans" : {
             "type" : "array",
             "items" : {
-              "$ref" : "#/items/definitions/org.apache.camel.dsl.yaml.deserializers.NamedBeanDefinition"
+              "$ref" : "#/items/definitions/org.apache.camel.model.app.RegistryBeanDefinition"
             }
           },
           "from" : {
@@ -3037,7 +3022,7 @@
           "beans" : {
             "type" : "array",
             "items" : {
-              "$ref" : "#/items/definitions/org.apache.camel.dsl.yaml.deserializers.NamedBeanDefinition"
+              "$ref" : "#/items/definitions/org.apache.camel.model.app.RegistryBeanDefinition"
             }
           },
           "parameters" : {
@@ -3668,6 +3653,12 @@
       "org.apache.camel.model.app.ApplicationDefinition" : {
         "type" : "object",
         "properties" : {
+          "bean" : {
+            "type" : "array",
+            "items" : {
+              "$ref" : "#/items/definitions/org.apache.camel.model.app.RegistryBeanDefinition"
+            }
+          },
           "component-scan" : {
             "type" : "array",
             "items" : {
@@ -3706,9 +3697,40 @@
           }
         }
       },
+      "org.apache.camel.model.app.BeanPropertiesDefinition" : {
+        "type" : "object",
+        "properties" : {
+          "property" : {
+            "type" : "array",
+            "items" : {
+              "$ref" : "#/items/definitions/org.apache.camel.model.app.BeanPropertyDefinition"
+            }
+          }
+        }
+      },
+      "org.apache.camel.model.app.BeanPropertyDefinition" : {
+        "type" : "object",
+        "properties" : {
+          "key" : {
+            "type" : "string"
+          },
+          "properties" : {
+            "$ref" : "#/items/definitions/org.apache.camel.model.app.BeanPropertiesDefinition"
+          },
+          "value" : {
+            "type" : "string"
+          }
+        }
+      },
       "org.apache.camel.model.app.BeansDefinition" : {
         "type" : "object",
         "properties" : {
+          "bean" : {
+            "type" : "array",
+            "items" : {
+              "$ref" : "#/items/definitions/org.apache.camel.model.app.RegistryBeanDefinition"
+            }
+          },
           "component-scan" : {
             "type" : "array",
             "items" : {
@@ -3752,9 +3774,20 @@
         "properties" : {
           "base-package" : {
             "type" : "string"
+          }
+        }
+      },
+      "org.apache.camel.model.app.RegistryBeanDefinition" : {
+        "type" : "object",
+        "properties" : {
+          "name" : {
+            "type" : "string"
           },
-          "use-jsr-330" : {
-            "type" : "boolean"
+          "properties" : {
+            "type" : "object"
+          },
+          "type" : {
+            "type" : "string"
           }
         }
       },
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
index 6f904d77af0..38ead52d5ac 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
@@ -205,7 +205,7 @@
       "org.apache.camel.dsl.yaml.deserializers.BeansDeserializer" : {
         "type" : "array",
         "items" : {
-          "$ref" : "#/items/definitions/org.apache.camel.dsl.yaml.deserializers.NamedBeanDefinition"
+          "$ref" : "#/items/definitions/org.apache.camel.model.app.RegistryBeanDefinition"
         }
       },
       "org.apache.camel.dsl.yaml.deserializers.ErrorHandlerBuilderDeserializer" : {
@@ -231,21 +231,6 @@
           }
         }
       },
-      "org.apache.camel.dsl.yaml.deserializers.NamedBeanDefinition" : {
-        "type" : "object",
-        "properties" : {
-          "name" : {
-            "type" : "string"
-          },
-          "properties" : {
-            "type" : "object"
-          },
-          "type" : {
-            "type" : "string"
-          }
-        },
-        "required" : [ "name", "type" ]
-      },
       "org.apache.camel.dsl.yaml.deserializers.OutputAwareFromDefinition" : {
         "type" : "object",
         "properties" : {
@@ -2478,7 +2463,7 @@
           "beans" : {
             "type" : "array",
             "items" : {
-              "$ref" : "#/items/definitions/org.apache.camel.dsl.yaml.deserializers.NamedBeanDefinition"
+              "$ref" : "#/items/definitions/org.apache.camel.model.app.RegistryBeanDefinition"
             }
           },
           "from" : {
@@ -2947,7 +2932,7 @@
           "beans" : {
             "type" : "array",
             "items" : {
-              "$ref" : "#/items/definitions/org.apache.camel.dsl.yaml.deserializers.NamedBeanDefinition"
+              "$ref" : "#/items/definitions/org.apache.camel.model.app.RegistryBeanDefinition"
             }
           },
           "parameters" : {
@@ -3578,6 +3563,12 @@
       "org.apache.camel.model.app.ApplicationDefinition" : {
         "type" : "object",
         "properties" : {
+          "bean" : {
+            "type" : "array",
+            "items" : {
+              "$ref" : "#/items/definitions/org.apache.camel.model.app.RegistryBeanDefinition"
+            }
+          },
           "componentScan" : {
             "type" : "array",
             "items" : {
@@ -3616,9 +3607,40 @@
           }
         }
       },
+      "org.apache.camel.model.app.BeanPropertiesDefinition" : {
+        "type" : "object",
+        "properties" : {
+          "property" : {
+            "type" : "array",
+            "items" : {
+              "$ref" : "#/items/definitions/org.apache.camel.model.app.BeanPropertyDefinition"
+            }
+          }
+        }
+      },
+      "org.apache.camel.model.app.BeanPropertyDefinition" : {
+        "type" : "object",
+        "properties" : {
+          "key" : {
+            "type" : "string"
+          },
+          "properties" : {
+            "$ref" : "#/items/definitions/org.apache.camel.model.app.BeanPropertiesDefinition"
+          },
+          "value" : {
+            "type" : "string"
+          }
+        }
+      },
       "org.apache.camel.model.app.BeansDefinition" : {
         "type" : "object",
         "properties" : {
+          "bean" : {
+            "type" : "array",
+            "items" : {
+              "$ref" : "#/items/definitions/org.apache.camel.model.app.RegistryBeanDefinition"
+            }
+          },
           "componentScan" : {
             "type" : "array",
             "items" : {
@@ -3662,9 +3684,20 @@
         "properties" : {
           "basePackage" : {
             "type" : "string"
+          }
+        }
+      },
+      "org.apache.camel.model.app.RegistryBeanDefinition" : {
+        "type" : "object",
+        "properties" : {
+          "name" : {
+            "type" : "string"
           },
-          "useJsr330" : {
-            "type" : "boolean"
+          "properties" : {
+            "type" : "object"
+          },
+          "type" : {
+            "type" : "string"
           }
         }
       },
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ModelXmlParserGeneratorMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ModelXmlParserGeneratorMojo.java
index 407b6d2aae7..ebf277f8a3c 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ModelXmlParserGeneratorMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ModelXmlParserGeneratorMojo.java
@@ -48,6 +48,7 @@ import java.util.stream.Stream;
 import jakarta.xml.bind.annotation.XmlAccessType;
 import jakarta.xml.bind.annotation.XmlAccessorType;
 import jakarta.xml.bind.annotation.XmlAnyAttribute;
+import jakarta.xml.bind.annotation.XmlAnyElement;
 import jakarta.xml.bind.annotation.XmlAttribute;
 import jakarta.xml.bind.annotation.XmlElement;
 import jakarta.xml.bind.annotation.XmlElementRef;
@@ -62,6 +63,7 @@ import jakarta.xml.bind.annotation.adapters.XmlAdapter;
 import jakarta.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
 import org.apache.camel.maven.packaging.generics.JandexStore;
+import org.apache.camel.spi.annotations.ExternalSchemaElement;
 import org.apache.camel.tooling.util.srcgen.GenericType;
 import org.apache.camel.tooling.util.srcgen.JavaClass;
 import org.apache.maven.artifact.DependencyResolutionRequiredException;
@@ -230,6 +232,7 @@ public class ModelXmlParserGeneratorMojo extends AbstractGeneratorMojo {
         parser.addImport(Array.class);
         parser.addImport(List.class);
         parser.addImport(ArrayList.class);
+        parser.addImport(org.w3c.dom.Element.class);
         parser.addAnnotation(SuppressWarnings.class).setLiteralValue("\"unused\"");
         parser.addMethod().setConstructor(true).setPublic().setName("ModelParser").addParameter("org.apache.camel.spi.Resource", "input").addThrows(IOException.class)
                 .addThrows(XML_PULL_PARSER_EXCEPTION).setBody("super(input);");
@@ -315,6 +318,8 @@ public class ModelXmlParserGeneratorMojo extends AbstractGeneratorMojo {
                 .collect(Collectors.toList());
             Map<String, String> expressionHandlersDefs = new LinkedHashMap<>();
             Map<String, String> cases = new LinkedHashMap<>();
+            // to handle elements from external namespaces
+            List<String[]> externalNamespaces = new ArrayList<>();
             // XmlElementRef
             elementMembers.stream().filter(member -> ((AccessibleObject)member).getAnnotation(XmlElementRef.class) != null
                                                      || (clazz == outputDefinitionClass && "setOutputs".equals(member.getName())))
@@ -407,9 +412,9 @@ public class ModelXmlParserGeneratorMojo extends AbstractGeneratorMojo {
                     Class<?> c = new GenericType(t).getRawClass();
                     String n = adapter.getDeclaringClass() != null ? adapter.getDeclaringClass().getSimpleName() + "." + adapter.getSimpleName() : adapter.getSimpleName();
                     if (c == String.class) {
-                        pc = "unmarshal(new " + n + "(), doParseText())";
+                        pc = "new " + n + "().unmarshal(doParseText())";
                     } else if (model.contains(c)) {
-                        pc = "unmarshal(new " + n + "(), doParse" + c.getSimpleName() + "())";
+                        pc = "new " + n + "().unmarshal(doParse" + c.getSimpleName() + "())";
                     } else {
                         throw new UnsupportedOperationException("Class " + clazz.getName() + " / member " + member + ": unsupported @XmlJavaTypeAdapter");
                     }
@@ -421,11 +426,19 @@ public class ModelXmlParserGeneratorMojo extends AbstractGeneratorMojo {
                 } else if (root == String.class) {
                     pc = "doParseText()";
                 } else {
-                    String n = root.getName();
-                    if (n.startsWith("java.lang.")) {
-                        n = tn;
+                    XmlAnyElement any = ((AccessibleObject) member).getAnnotation(XmlAnyElement.class);
+                    ExternalSchemaElement external = ((AccessibleObject) member).getAnnotation(ExternalSchemaElement.class);
+                    if (any != null && external != null) {
+                        // a case for external "namespace handler"
+                        externalNamespaces.add(new String[] { external.documentElement(), external.namespace(), gn, sn });
+                        return;
+                    } else {
+                        String n = root.getName();
+                        if (n.startsWith("java.lang.")) {
+                            n = tn;
+                        }
+                        pc = n + ".valueOf(doParseText())";
                     }
-                    pc = n + ".valueOf(doParseText())";
                 }
 
                 // special for allowableValues
@@ -448,6 +461,29 @@ public class ModelXmlParserGeneratorMojo extends AbstractGeneratorMojo {
             if (expressionHandlersDefs.size() > 1) {
                 throw new IllegalStateException();
             }
+            String externalElements = "";
+            if (!externalNamespaces.isEmpty()) {
+                boolean first = true;
+                StringBuilder sb = new StringBuilder();
+                for (String[] nn : externalNamespaces) {
+                    String gn = nn[2];
+                    String sn = nn[3];
+                    if (first) {
+                        sb.append("    if (\"" + nn[1] + "\".equals(parser.getNamespace())) {\n");
+                        first = false;
+                    } else {
+                        sb.append("    else if (\"" + nn[1] + "\".equals(parser.getNamespace())) {\n");
+                    }
+                    sb.append("        Element el = doParseDOMElement(\"" + nn[0] + "\", \"" + nn[1] + "\", def." + gn + "());\n");
+                    sb.append("        if (el != null) {\n");
+                    sb.append("            doAddElement(el, def." + gn + "(), def::" + sn + ");\n");
+                    sb.append("            return true;\n");
+                    sb.append("        }\n");
+                    sb.append("        return false;\n");
+                    sb.append("    }\n");
+                }
+                externalElements = sb.toString();
+            }
             String elements;
             if (cases.isEmpty()) {
                 if (expressionHandlersDefs.isEmpty()) {
@@ -461,11 +497,11 @@ public class ModelXmlParserGeneratorMojo extends AbstractGeneratorMojo {
                                       + (expressionHandler == null ? "return false;" : "return " + expressionHandler + ".accept(def, key);");
                 if (cases.size() == 1) {
                     Map.Entry<String, String> entry = cases.entrySet().iterator().next();
-                    elements = " (def, key) -> {\n" + "    if (\"" + entry.getKey() + "\".equals(key)) {\n" + "        " + entry.getValue() + "\n" + "        return true;\n"
+                    elements = " (def, key) -> {\n" + externalElements + "    if (\"" + entry.getKey() + "\".equals(key)) {\n" + "        " + entry.getValue() + "\n" + "        return true;\n"
                                + "    }\n" + "    " + returnClause + "\n" + "}";
                 } else {
                     StringBuilder sb = new StringBuilder();
-                    sb.append(" (def, key) -> {\n" + "    switch (key) {\n");
+                    sb.append(" (def, key) -> {\n" + externalElements + "    switch (key) {\n");
                     for (Map.Entry<String, String> entry : cases.entrySet()) {
                         sb.append("        case \"").append(entry.getKey()).append("\": ").append(entry.getValue()).append(" break;\n");
                     }
@@ -564,9 +600,15 @@ public class ModelXmlParserGeneratorMojo extends AbstractGeneratorMojo {
                         .setBody("return" + elements + ";");
                 }
                 if (!Modifier.isAbstract(clazz.getModifiers())) {
-                    parser.addMethod().setSignature("protected " + qname + " doParse" + name + "() throws IOException, XmlPullParserException")
-                        .setBody("return doParse(new " + qname + "(), " + (attributeMembers.isEmpty() ? attributes : lowercase(name) + "AttributeHandler()") + ", "
-                                 + (elementMembers.isEmpty() ? elements : lowercase(name) + "ElementHandler()") + "," + value + ");\n");
+                    if (externalNamespaces.isEmpty()) {
+                        parser.addMethod().setSignature("protected " + qname + " doParse" + name + "() throws IOException, XmlPullParserException")
+                            .setBody("return doParse(new " + qname + "(), " + (attributeMembers.isEmpty() ? attributes : lowercase(name) + "AttributeHandler()") + ", "
+                                     + (elementMembers.isEmpty() ? elements : lowercase(name) + "ElementHandler()") + "," + value + ");\n");
+                    } else {
+                        parser.addMethod().setSignature("protected " + qname + " doParse" + name + "() throws IOException, XmlPullParserException")
+                            .setBody("return doParse(new " + qname + "(), " + (attributeMembers.isEmpty() ? attributes : lowercase(name) + "AttributeHandler()") + ", "
+                                     + (elementMembers.isEmpty() ? elements : lowercase(name) + "ElementHandler()") + "," + value + ", true);\n");
+                    }
                 }
             } else {
                 // special for value definition
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ModelXmlWriterGeneratorMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ModelXmlWriterGeneratorMojo.java
index e367aebc5c8..3e510dc9d8b 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ModelXmlWriterGeneratorMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/ModelXmlWriterGeneratorMojo.java
@@ -49,6 +49,7 @@ import java.util.stream.Stream;
 import jakarta.xml.bind.annotation.XmlAccessType;
 import jakarta.xml.bind.annotation.XmlAccessorType;
 import jakarta.xml.bind.annotation.XmlAnyAttribute;
+import jakarta.xml.bind.annotation.XmlAnyElement;
 import jakarta.xml.bind.annotation.XmlAttribute;
 import jakarta.xml.bind.annotation.XmlElement;
 import jakarta.xml.bind.annotation.XmlElementRef;
@@ -364,9 +365,29 @@ public class ModelXmlWriterGeneratorMojo extends AbstractGeneratorMojo {
                         elements.add("doWriteList(" + (w != null ? "\"" + w + "\"" : "null") + ", " +
                                 "\"" + n + "\", def." + gn + "(), this::doWrite" + t + ");");
                     } else {
-                        elements.add("doWriteElement(" +
-                                "\"" + n + "\", def." + gn + "(), this::doWrite" + t + ");");
+                        XmlJavaTypeAdapter adapter = member.getAnnotation(XmlJavaTypeAdapter.class);
+                        if (adapter != null) {
+                            Class<? extends XmlAdapter> cl = adapter.value();
+                            Class<?> actualType = null;
+                            for (Method m : cl.getDeclaredMethods()) {
+                                if (m.getName().equals("marshal") && m.getReturnType() != Object.class) {
+                                    actualType = m.getReturnType();
+                                    break;
+                                }
+                            }
+                            if (actualType == null) {
+                                throw new IllegalArgumentException("Unable to determine property name for JAXB" +
+                                        " adapted member: " + member);
+                            }
+                            elements.add("doWriteElement(" +
+                                    "\"" + n + "\", new " + cl.getSimpleName() + "().marshal(def." + gn + "()), this::doWrite" + actualType.getSimpleName() + ");");
+                        } else {
+                            elements.add("doWriteElement(" +
+                                    "\"" + n + "\", def." + gn + "(), this::doWrite" + t + ");");
+                        }
                     }
+                } else if (member.getAnnotation(XmlAnyElement.class) != null) {
+                    elements.add("domElements(def." + gn + "());");
                 } else {
                     String t = root.getSimpleName();
                     String n = root.getAnnotation(XmlRootElement.class) != null
@@ -779,7 +800,7 @@ public class ModelXmlWriterGeneratorMojo extends AbstractGeneratorMojo {
         } else if (accessType == XmlAccessType.FIELD) {
             return m -> m.getDeclaringClass() == clazz
                     && ((isSetter(m) || isGetter(m)) && isXmlBindAnnotated(m)
-                            || isField(m) && !Modifier.isStatic(m.getModifiers()) && !Modifier.isTransient(m.getModifiers()));
+                            || isField(m) && /*isNotAnyXml(m) && */!Modifier.isStatic(m.getModifiers()) && !Modifier.isTransient(m.getModifiers()));
         } else if (accessType == XmlAccessType.PUBLIC_MEMBER) {
             return m -> m.getDeclaringClass() == clazz
                     && (Modifier.isPublic(m.getModifiers()) || isXmlBindAnnotated(m));
@@ -791,7 +812,13 @@ public class ModelXmlWriterGeneratorMojo extends AbstractGeneratorMojo {
 
     private boolean isXmlBindAnnotated(Member m) {
         return Stream.of(((AnnotatedElement) m).getAnnotations())
-                .anyMatch(a -> a.getClass().getAnnotatedInterfaces()[0].getType().getTypeName().startsWith("jakarta.xml.bind.annotation."));
+                .anyMatch(a -> a.getClass().getAnnotatedInterfaces()[0].getType().getTypeName().startsWith("jakarta.xml.bind.annotation.")
+                        /*&& !a.getClass().getAnnotatedInterfaces()[0].getType().getTypeName().endsWith("XmlAnyElement")*/);
+    }
+
+    private boolean isNotAnyXml(Member m) {
+        return Stream.of(((AnnotatedElement) m).getAnnotations())
+                .noneMatch(a -> a.getClass().getAnnotatedInterfaces()[0].getType().getTypeName().equals("jakarta.xml.bind.annotation.XmlAnyElement"));
     }
 
     private boolean isField(Member member) {
diff --git a/tooling/spi-annotations/src/main/java/org/apache/camel/spi/annotations/ExternalSchemaElement.java b/tooling/spi-annotations/src/main/java/org/apache/camel/spi/annotations/ExternalSchemaElement.java
new file mode 100644
index 00000000000..da87308e0e9
--- /dev/null
+++ b/tooling/spi-annotations/src/main/java/org/apache/camel/spi/annotations/ExternalSchemaElement.java
@@ -0,0 +1,57 @@
+/*
+ * 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.spi.annotations;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * Annotation to be used for JAXB property (field or method) annotated with {@code @XmlAnyElement} to highlight which
+ * actual elements do we expect (not to be enforced by JAXB, but by Camel itself).
+ */
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+@Target({ ElementType.METHOD, ElementType.FIELD })
+public @interface ExternalSchemaElement {
+
+    /**
+     * Names of external XML element we expect
+     *
+     * @return
+     */
+    String[] names() default {};
+
+    /**
+     * XSD namespace of XML elements expected
+     *
+     * @return
+     */
+    String namespace() default "";
+
+    /**
+     * In JAXB, when an element is annotated with {@code @XmlAnyElement}, the actual objects used are of
+     * {@link org.w3c.dom.Element} class. These elements should be part of wrapping {@link org.w3c.dom.Document} and
+     * this parameter allows to specify this root element name (in {@link #namespace()}).
+     *
+     * @return
+     */
+    String documentElement();
+
+}