You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2026/05/08 07:55:07 UTC

(camel) branch code-massel-CAMEL-23352 created (now 096833c2e365)

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

davsclaus pushed a change to branch code-massel-CAMEL-23352
in repository https://gitbox.apache.org/repos/asf/camel.git


      at 096833c2e365 Regen

This branch includes the following new commits:

     new 8333f01d8e7b CAMEL-23387: camel-telemetry - Add span decorators for AWS Athena, CloudWatch, KMS, MSK, Step Functions, Timestream, Redshift Data and CloudTrail (#23045)
     new ba2d9ee3490f feat(components): distinguish core processors from custom processors
     new 82b0586c8b0a chore(doc): explain core processors changes
     new a8edab7659d9 chore(components): test to check log span
     new 3f8acc3da4d3 chore(components): telemetry dev  core processors
     new 1cd28d70eabe chore(components):  opentelemetry2 core processors
     new 78a524275f4c chore(components): micrometer-observability core processors
     new 6f0cf4556078 chore(proposals): provide latest design changes
     new 096833c2e365 Regen

The 9 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



(camel) 08/09: chore(proposals): provide latest design changes

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch code-massel-CAMEL-23352
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 6f0cf4556078e86e53d5e237481c7e8955b8ce4f
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Fri May 8 09:13:58 2026 +0200

    chore(proposals): provide latest design changes
    
    Ref CAMEL-23432
---
 proposals/tracing.adoc | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/proposals/tracing.adoc b/proposals/tracing.adoc
index 9d91978df7e2..2dad31f57653 100644
--- a/proposals/tracing.adoc
+++ b/proposals/tracing.adoc
@@ -9,7 +9,7 @@ approvers:
   - "@zbendhiba"
   - "@davsclaus"
 creation-date: 2025-01-08
-last-updated: 2026-05-04
+last-updated: 2026-05-07
 status: implemented
 see-also: []
 replaces: []
@@ -167,3 +167,9 @@ As described in https://issues.apache.org/jira/browse/CAMEL-23380 any version be
 In order to prevent this problem we need to rethink the implementation details of `camel-opentelemetry2` and remove the explicit `Scope` management that, when asynchronous, was opening the `Scope` in a thread and closing in another (what we had called "dirty" context). We are now removing this explicit management and moving this part exclusively in the custom Camel `Processors`. Here Camel will take care to open the Opentelemetry scope and close it within the same thread.
 
 What it means is that, from now on we get rid of the leak but the final user or any third party dependency can only access the Opentelemetry context within the boundary of a Processor execution.
+
+=== Distinguish custom Processors from core Processors (2026-05-07)
+
+The custom processors must be distinguished from core processors in order to let the user disable span generation only for custom processors. This is an **important design constraint** required to ensure that the core processors spans are always generated during an execution. With this constraint we ensure that any third party instrumentation span (which generally happens at core Processor level) is correctly nested.
+
+Disabling this feature is possible and could work for simple tracing. However it is not recommended and the user should always fine tune the exclusions of processors explicitly in case he wants to reduce the number of generated spans.


(camel) 07/09: chore(components): micrometer-observability core processors

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch code-massel-CAMEL-23352
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 78a524275f4cae8fa0111b0edd3130a1c485a4fa
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Thu May 7 11:15:03 2026 +0200

    chore(components): micrometer-observability core processors
    
    Ref CAMEL-23432
---
 .../MicrometerObservabilityTracerConfigurer.java   |  6 +++
 .../src/main/docs/micrometer-observability.adoc    |  5 ++-
 .../observability/BaggageInjectionTest.java        |  5 ++-
 .../observability/EnableProcessorsTest.java        |  5 ++-
 ...rObservabilityTracerPropagationTestSupport.java |  1 +
 ...panCustomizationTest.java => SpanBeanTest.java} | 44 +++++++++++++---------
 .../observability/SpanCustomizationTest.java       |  5 ++-
 .../observability/SpanInjectionTest.java           |  5 ++-
 .../java/org/apache/camel/telemetry/Tracer.java    |  2 +-
 proposals/tracing.adoc                             |  8 +---
 10 files changed, 55 insertions(+), 31 deletions(-)

diff --git a/components/camel-micrometer-observability/src/generated/java/org/apache/camel/micrometer/observability/MicrometerObservabilityTracerConfigurer.java b/components/camel-micrometer-observability/src/generated/java/org/apache/camel/micrometer/observability/MicrometerObservabilityTracerConfigurer.java
index 81a5e30fb4b1..35a9d8baf3a8 100644
--- a/components/camel-micrometer-observability/src/generated/java/org/apache/camel/micrometer/observability/MicrometerObservabilityTracerConfigurer.java
+++ b/components/camel-micrometer-observability/src/generated/java/org/apache/camel/micrometer/observability/MicrometerObservabilityTracerConfigurer.java
@@ -25,6 +25,8 @@ public class MicrometerObservabilityTracerConfigurer extends org.apache.camel.su
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "camelcontext":
         case "camelContext": target.setCamelContext(property(camelContext, org.apache.camel.CamelContext.class, value)); return true;
+        case "disablecoreprocessors":
+        case "disableCoreProcessors": target.setDisableCoreProcessors(property(camelContext, boolean.class, value)); return true;
         case "excludepatterns":
         case "excludePatterns": target.setExcludePatterns(property(camelContext, java.lang.String.class, value)); return true;
         case "observationregistry":
@@ -46,6 +48,8 @@ public class MicrometerObservabilityTracerConfigurer extends org.apache.camel.su
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "camelcontext":
         case "camelContext": return org.apache.camel.CamelContext.class;
+        case "disablecoreprocessors":
+        case "disableCoreProcessors": return boolean.class;
         case "excludepatterns":
         case "excludePatterns": return java.lang.String.class;
         case "observationregistry":
@@ -68,6 +72,8 @@ public class MicrometerObservabilityTracerConfigurer extends org.apache.camel.su
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "camelcontext":
         case "camelContext": return target.getCamelContext();
+        case "disablecoreprocessors":
+        case "disableCoreProcessors": return target.isDisableCoreProcessors();
         case "excludepatterns":
         case "excludePatterns": return target.getExcludePatterns();
         case "observationregistry":
diff --git a/components/camel-micrometer-observability/src/main/docs/micrometer-observability.adoc b/components/camel-micrometer-observability/src/main/docs/micrometer-observability.adoc
index 017e1b79b822..45bf7e99be2b 100644
--- a/components/camel-micrometer-observability/src/main/docs/micrometer-observability.adoc
+++ b/components/camel-micrometer-observability/src/main/docs/micrometer-observability.adoc
@@ -28,9 +28,10 @@ The configuration properties for the component are:
 [width="100%",cols="10%,10%,80%",options="header",]
 |=======================================================================
 |Option |Default |Description
+|`enabled`| false | Turn the tracing on/off.
+|`traceProcessors`| false | Trace inner custom processors (i.e., any `process` configured in the route).
+|`disableCoreProcessors`| false | Disable any inner core processors (any core DSL processor provided in the route, for example `bean`, `log`, ...).
 |`excludePatterns` |  | Sets exclude pattern that will disable tracing for those spans that matches the pattern. The variable is a comma separated values of filters to execute (eg, `log*,direct*,setBody*`, ...)
-|`traceProcessors` | `false` | Setting this to true will create new spans for each Camel Processors.
-Use the excludePattern property to filter out Processors
 |`traceHeadersInclusion`| false | Add the generated telemetry `CAMEL_TRACE_ID` and `CAMEL_SPAN_ID` Exchange headers.
 |=======================================================================
 
diff --git a/components/camel-micrometer-observability/src/test/java/org/apache/camel/micrometer/observability/BaggageInjectionTest.java b/components/camel-micrometer-observability/src/test/java/org/apache/camel/micrometer/observability/BaggageInjectionTest.java
index 0fa31081e97e..c83666f608d0 100644
--- a/components/camel-micrometer-observability/src/test/java/org/apache/camel/micrometer/observability/BaggageInjectionTest.java
+++ b/components/camel-micrometer-observability/src/test/java/org/apache/camel/micrometer/observability/BaggageInjectionTest.java
@@ -44,8 +44,11 @@ public class BaggageInjectionTest extends MicrometerObservabilityTracerPropagati
 
     @Override
     protected CamelContext createCamelContext() throws Exception {
+        CamelContext ctx = super.createCamelContext();
         tst.setTraceProcessors(true);
-        return super.createCamelContext();
+        tst.setDisableCoreProcessors(false);
+
+        return ctx;
     }
 
     @Test
diff --git a/components/camel-micrometer-observability/src/test/java/org/apache/camel/micrometer/observability/EnableProcessorsTest.java b/components/camel-micrometer-observability/src/test/java/org/apache/camel/micrometer/observability/EnableProcessorsTest.java
index 84395878723b..13b42a399b8b 100644
--- a/components/camel-micrometer-observability/src/test/java/org/apache/camel/micrometer/observability/EnableProcessorsTest.java
+++ b/components/camel-micrometer-observability/src/test/java/org/apache/camel/micrometer/observability/EnableProcessorsTest.java
@@ -39,8 +39,11 @@ public class EnableProcessorsTest extends MicrometerObservabilityTracerPropagati
 
     @Override
     protected CamelContext createCamelContext() throws Exception {
+        CamelContext ctx = super.createCamelContext();
         tst.setTraceProcessors(true);
-        return super.createCamelContext();
+        tst.setDisableCoreProcessors(false);
+
+        return ctx;
     }
 
     @Test
diff --git a/components/camel-micrometer-observability/src/test/java/org/apache/camel/micrometer/observability/MicrometerObservabilityTracerPropagationTestSupport.java b/components/camel-micrometer-observability/src/test/java/org/apache/camel/micrometer/observability/MicrometerObservabilityTracerPropagationTestSupport.java
index f5b266408de9..b99d1c8c2e6e 100644
--- a/components/camel-micrometer-observability/src/test/java/org/apache/camel/micrometer/observability/MicrometerObservabilityTracerPropagationTestSupport.java
+++ b/components/camel-micrometer-observability/src/test/java/org/apache/camel/micrometer/observability/MicrometerObservabilityTracerPropagationTestSupport.java
@@ -74,6 +74,7 @@ public class MicrometerObservabilityTracerPropagationTestSupport extends Exchang
 
         CamelContextAware.trySetCamelContext(tst, context);
         tst.init(context);
+        tst.setDisableCoreProcessors(true);
         return context;
     }
 
diff --git a/components/camel-micrometer-observability/src/test/java/org/apache/camel/micrometer/observability/SpanCustomizationTest.java b/components/camel-micrometer-observability/src/test/java/org/apache/camel/micrometer/observability/SpanBeanTest.java
similarity index 76%
copy from components/camel-micrometer-observability/src/test/java/org/apache/camel/micrometer/observability/SpanCustomizationTest.java
copy to components/camel-micrometer-observability/src/test/java/org/apache/camel/micrometer/observability/SpanBeanTest.java
index 8e866bbf8d37..aedb256e9f2c 100644
--- a/components/camel-micrometer-observability/src/test/java/org/apache/camel/micrometer/observability/SpanCustomizationTest.java
+++ b/components/camel-micrometer-observability/src/test/java/org/apache/camel/micrometer/observability/SpanBeanTest.java
@@ -20,7 +20,6 @@ import java.io.IOException;
 import java.util.List;
 import java.util.Map;
 
-import io.micrometer.tracing.Span;
 import io.opentelemetry.api.common.AttributeKey;
 import io.opentelemetry.sdk.trace.data.SpanData;
 import org.apache.camel.CamelContext;
@@ -36,12 +35,14 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-public class SpanCustomizationTest extends MicrometerObservabilityTracerPropagationTestSupport {
+public class SpanBeanTest extends MicrometerObservabilityTracerPropagationTestSupport {
 
     @Override
     protected CamelContext createCamelContext() throws Exception {
-        tst.setTraceProcessors(true);
-        return super.createCamelContext();
+        CamelContext ctx = super.createCamelContext();
+        tst.setDisableCoreProcessors(false);
+
+        return ctx;
     }
 
     @Test
@@ -58,7 +59,7 @@ public class SpanCustomizationTest extends MicrometerObservabilityTracerPropagat
         SpanData testProducer = spans.get(0);
         SpanData direct = spans.get(1);
         SpanData innerLog = spans.get(2);
-        SpanData innerProcessor = spans.get(3);
+        SpanData beanProcessor = spans.get(3);
         SpanData customSpan = spans.get(4);
         SpanData log = spans.get(5);
         SpanData innerToLog = spans.get(6);
@@ -67,7 +68,7 @@ public class SpanCustomizationTest extends MicrometerObservabilityTracerPropagat
         assertTrue(testProducer.hasEnded());
         assertTrue(direct.hasEnded());
         assertTrue(innerLog.hasEnded());
-        assertTrue(innerProcessor.hasEnded());
+        assertTrue(beanProcessor.hasEnded());
         assertTrue(customSpan.hasEnded());
         assertTrue(log.hasEnded());
         assertTrue(innerToLog.hasEnded());
@@ -76,20 +77,20 @@ public class SpanCustomizationTest extends MicrometerObservabilityTracerPropagat
         assertEquals(testProducer.getSpanContext().getTraceId(), direct.getSpanContext().getTraceId());
         assertEquals(testProducer.getSpanContext().getTraceId(), direct.getSpanContext().getTraceId());
         assertEquals(testProducer.getSpanContext().getTraceId(), innerLog.getSpanContext().getTraceId());
-        assertEquals(testProducer.getSpanContext().getTraceId(), innerProcessor.getSpanContext().getTraceId());
+        assertEquals(testProducer.getSpanContext().getTraceId(), beanProcessor.getSpanContext().getTraceId());
         assertEquals(testProducer.getSpanContext().getTraceId(), customSpan.getSpanContext().getTraceId());
         assertEquals(testProducer.getSpanContext().getTraceId(), log.getSpanContext().getTraceId());
         assertEquals(testProducer.getSpanContext().getTraceId(), innerToLog.getSpanContext().getTraceId());
 
         // Validate operations
         assertEquals(Op.EVENT_RECEIVED.toString(), direct.getAttributes().get(AttributeKey.stringKey("op")));
-        assertEquals(Op.EVENT_PROCESS.toString(), innerProcessor.getAttributes().get(AttributeKey.stringKey("op")));
+        assertEquals(Op.EVENT_PROCESS.toString(), beanProcessor.getAttributes().get(AttributeKey.stringKey("op")));
 
         // Validate hierarchy
         assertFalse(testProducer.getParentSpanContext().isValid());
         assertEquals(testProducer.getSpanContext().getSpanId(), direct.getParentSpanContext().getSpanId());
-        assertEquals(direct.getSpanContext().getSpanId(), innerProcessor.getParentSpanContext().getSpanId());
-        assertEquals(innerProcessor.getSpanContext().getSpanId(), customSpan.getParentSpanContext().getSpanId());
+        assertEquals(direct.getSpanContext().getSpanId(), beanProcessor.getParentSpanContext().getSpanId());
+        assertEquals(beanProcessor.getSpanContext().getSpanId(), customSpan.getParentSpanContext().getSpanId());
 
         // Validate custom span
         assertEquals("mySpan", customSpan.getName());
@@ -100,23 +101,32 @@ public class SpanCustomizationTest extends MicrometerObservabilityTracerPropagat
         return new RouteBuilder() {
             @Override
             public void configure() {
+                MyBean myBean = new MyBean();
+                this.getCamelContext().getRegistry().bind("myBean", myBean);
+
                 from("direct:start")
                         .routeId("start")
                         .log("A message")
+                        .bean(MyBean.class)
                         .process(new Processor() {
                             @Override
                             public void process(Exchange exchange) throws Exception {
-                                exchange.getIn().setHeader("operation", "fake");
-                                // We add a span during the processing. We need to verify this span is correctly
-                                // created and belong to the proper hierarchy. Important: the user has to know which is the
-                                // tracer, likely, setting it on the camel-telemetry Tracer component explicitly.
-                                Span mySpan = tracer.nextSpan().name("mySpan").start();
-                                // Do the work here
-                                mySpan.end();
+                                // noop
                             }
                         })
                         .to("log:info");
             }
         };
     }
+
+    class MyBean {
+        // NOTE: the commented annotation below would work only when an agent or a runtime framework (quarkus or spring)
+        // is available. We simulate it creating the Span by hand instead.
+        //@WithSpan
+        public void helloWorld() {
+            io.opentelemetry.api.trace.Span mySpan = otelTracer.spanBuilder("mySpan").startSpan();
+            // Do the work here
+            mySpan.end();
+        }
+    }
 }
diff --git a/components/camel-micrometer-observability/src/test/java/org/apache/camel/micrometer/observability/SpanCustomizationTest.java b/components/camel-micrometer-observability/src/test/java/org/apache/camel/micrometer/observability/SpanCustomizationTest.java
index 8e866bbf8d37..4b86e4480cfc 100644
--- a/components/camel-micrometer-observability/src/test/java/org/apache/camel/micrometer/observability/SpanCustomizationTest.java
+++ b/components/camel-micrometer-observability/src/test/java/org/apache/camel/micrometer/observability/SpanCustomizationTest.java
@@ -40,8 +40,11 @@ public class SpanCustomizationTest extends MicrometerObservabilityTracerPropagat
 
     @Override
     protected CamelContext createCamelContext() throws Exception {
+        CamelContext ctx = super.createCamelContext();
         tst.setTraceProcessors(true);
-        return super.createCamelContext();
+        tst.setDisableCoreProcessors(false);
+
+        return ctx;
     }
 
     @Test
diff --git a/components/camel-micrometer-observability/src/test/java/org/apache/camel/micrometer/observability/SpanInjectionTest.java b/components/camel-micrometer-observability/src/test/java/org/apache/camel/micrometer/observability/SpanInjectionTest.java
index 3a236df892dd..908b5343c312 100644
--- a/components/camel-micrometer-observability/src/test/java/org/apache/camel/micrometer/observability/SpanInjectionTest.java
+++ b/components/camel-micrometer-observability/src/test/java/org/apache/camel/micrometer/observability/SpanInjectionTest.java
@@ -43,8 +43,11 @@ public class SpanInjectionTest extends MicrometerObservabilityTracerPropagationT
 
     @Override
     protected CamelContext createCamelContext() throws Exception {
+        CamelContext ctx = super.createCamelContext();
         tst.setTraceProcessors(true);
-        return super.createCamelContext();
+        tst.setDisableCoreProcessors(false);
+
+        return ctx;
     }
 
     @Test
diff --git a/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/Tracer.java b/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/Tracer.java
index 6b2af88b9dd2..9677ee55e505 100644
--- a/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/Tracer.java
+++ b/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/Tracer.java
@@ -56,7 +56,7 @@ public abstract class Tracer extends ServiceSupport implements CamelTracingServi
      */
     private String excludePatterns;
     private boolean traceProcessors;
-    private boolean disableCoreProcessors = false;
+    private boolean disableCoreProcessors;
     private boolean traceHeadersInclusion;
 
     private final TracingEventNotifier eventNotifier = new TracingEventNotifier();
diff --git a/proposals/tracing.adoc b/proposals/tracing.adoc
index 2dad31f57653..9d91978df7e2 100644
--- a/proposals/tracing.adoc
+++ b/proposals/tracing.adoc
@@ -9,7 +9,7 @@ approvers:
   - "@zbendhiba"
   - "@davsclaus"
 creation-date: 2025-01-08
-last-updated: 2026-05-07
+last-updated: 2026-05-04
 status: implemented
 see-also: []
 replaces: []
@@ -167,9 +167,3 @@ As described in https://issues.apache.org/jira/browse/CAMEL-23380 any version be
 In order to prevent this problem we need to rethink the implementation details of `camel-opentelemetry2` and remove the explicit `Scope` management that, when asynchronous, was opening the `Scope` in a thread and closing in another (what we had called "dirty" context). We are now removing this explicit management and moving this part exclusively in the custom Camel `Processors`. Here Camel will take care to open the Opentelemetry scope and close it within the same thread.
 
 What it means is that, from now on we get rid of the leak but the final user or any third party dependency can only access the Opentelemetry context within the boundary of a Processor execution.
-
-=== Distinguish custom Processors from core Processors (2026-05-07)
-
-The custom processors must be distinguished from core processors in order to let the user disable span generation only for custom processors. This is an **important design constraint** required to ensure that the core processors spans are always generated during an execution. With this constraint we ensure that any third party instrumentation span (which generally happens at core Processor level) is correctly nested.
-
-Disabling this feature is possible and could work for simple tracing. However it is not recommended and the user should always fine tune the exclusions of processors explicitly in case he wants to reduce the number of generated spans.


(camel) 05/09: chore(components): telemetry dev core processors

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch code-massel-CAMEL-23352
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 3f8acc3da4d3abcee0b95e5d4d660ff34f00de77
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Thu May 7 09:42:53 2026 +0200

    chore(components): telemetry dev  core processors
    
    Ref CAMEL-23432
---
 .../telemetrydev/TelemetryDevTracerConfigurer.java |  6 ++
 .../src/main/docs/telemetry-dev.adoc               |  3 +-
 .../apache/camel/telemetrydev/AsyncCXFTest.java    |  1 +
 .../apache/camel/telemetrydev/AsyncDirectTest.java |  1 +
 .../org/apache/camel/telemetrydev/AsyncTest.java   |  1 +
 .../camel/telemetrydev/AsyncWiretapTest.java       |  1 +
 .../camel/telemetrydev/MDCHeadersTraceTest.java    |  1 +
 ...lemetryDevTracerTest.java => SpanBeanTest.java} | 88 +++++++++++++---------
 .../SpanPropagationDownstreamTest.java             |  1 +
 .../telemetrydev/SpanPropagationUpstreamTest.java  |  1 +
 .../camel/telemetrydev/TelemetryDevTracerTest.java |  1 +
 .../apache/camel/telemetry/mock/MockTracer.java    |  5 +-
 12 files changed, 69 insertions(+), 41 deletions(-)

diff --git a/components/camel-telemetry-dev/src/generated/java/org/apache/camel/telemetrydev/TelemetryDevTracerConfigurer.java b/components/camel-telemetry-dev/src/generated/java/org/apache/camel/telemetrydev/TelemetryDevTracerConfigurer.java
index 20d9f04a5fee..ba9d4911c60d 100644
--- a/components/camel-telemetry-dev/src/generated/java/org/apache/camel/telemetrydev/TelemetryDevTracerConfigurer.java
+++ b/components/camel-telemetry-dev/src/generated/java/org/apache/camel/telemetrydev/TelemetryDevTracerConfigurer.java
@@ -25,6 +25,8 @@ public class TelemetryDevTracerConfigurer extends org.apache.camel.support.compo
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "camelcontext":
         case "camelContext": target.setCamelContext(property(camelContext, org.apache.camel.CamelContext.class, value)); return true;
+        case "disablecoreprocessors":
+        case "disableCoreProcessors": target.setDisableCoreProcessors(property(camelContext, boolean.class, value)); return true;
         case "excludepatterns":
         case "excludePatterns": target.setExcludePatterns(property(camelContext, java.lang.String.class, value)); return true;
         case "spanlifecyclemanager":
@@ -44,6 +46,8 @@ public class TelemetryDevTracerConfigurer extends org.apache.camel.support.compo
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "camelcontext":
         case "camelContext": return org.apache.camel.CamelContext.class;
+        case "disablecoreprocessors":
+        case "disableCoreProcessors": return boolean.class;
         case "excludepatterns":
         case "excludePatterns": return java.lang.String.class;
         case "spanlifecyclemanager":
@@ -64,6 +68,8 @@ public class TelemetryDevTracerConfigurer extends org.apache.camel.support.compo
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "camelcontext":
         case "camelContext": return target.getCamelContext();
+        case "disablecoreprocessors":
+        case "disableCoreProcessors": return target.isDisableCoreProcessors();
         case "excludepatterns":
         case "excludePatterns": return target.getExcludePatterns();
         case "spanlifecyclemanager":
diff --git a/components/camel-telemetry-dev/src/main/docs/telemetry-dev.adoc b/components/camel-telemetry-dev/src/main/docs/telemetry-dev.adoc
index d3d9894814be..2eba44a3a767 100644
--- a/components/camel-telemetry-dev/src/main/docs/telemetry-dev.adoc
+++ b/components/camel-telemetry-dev/src/main/docs/telemetry-dev.adoc
@@ -28,7 +28,8 @@ The configuration properties for the Telemetry component are:
 |Option |Default |Description
 |`enabled`| false | Turn the tracing on/off.
 |`traceFormat`| default | The format used to trace in the log (default, tree, json).
-|`traceProcessors`| false | Trace inner processors.
+|`traceProcessors`| false | Trace inner custom processors (i.e., any `process` configured in the route).
+|`disableCoreProcessors`| false | Disable any inner core processors (any core DSL processor provided in the route, for example `bean`, `log`, ...).
 |`excludePatterns` |  | Sets exclude pattern that will disable tracing for those spans that matches the pattern. The variable is a comma separated values of filters to execute (eg, `log*,direct*,setBody*`, ...)
 |`traceHeadersInclusion`| false | Add the generated telemetry `CAMEL_TRACE_ID` and `CAMEL_SPAN_ID` Exchange headers.
 |=======================================================================
diff --git a/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/AsyncCXFTest.java b/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/AsyncCXFTest.java
index 2ca776917e17..a2887afead91 100644
--- a/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/AsyncCXFTest.java
+++ b/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/AsyncCXFTest.java
@@ -45,6 +45,7 @@ public class AsyncCXFTest extends TelemetryDevTracerTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         TelemetryDevTracer tst = new TelemetryDevTracer();
         tst.setTraceFormat("json");
+        tst.setDisableCoreProcessors(true);
         CamelContext context = super.createCamelContext();
         CamelContextAware.trySetCamelContext(tst, context);
         tst.init(context);
diff --git a/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/AsyncDirectTest.java b/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/AsyncDirectTest.java
index d41399686f84..0fc1c1731da8 100644
--- a/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/AsyncDirectTest.java
+++ b/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/AsyncDirectTest.java
@@ -37,6 +37,7 @@ public class AsyncDirectTest extends TelemetryDevTracerTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         TelemetryDevTracer tst = new TelemetryDevTracer();
         tst.setTraceFormat("json");
+        tst.setDisableCoreProcessors(true);
         CamelContext context = super.createCamelContext();
         CamelContextAware.trySetCamelContext(tst, context);
         tst.init(context);
diff --git a/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/AsyncTest.java b/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/AsyncTest.java
index ff794ef5a348..c8fc668b02e3 100644
--- a/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/AsyncTest.java
+++ b/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/AsyncTest.java
@@ -41,6 +41,7 @@ public class AsyncTest extends TelemetryDevTracerTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         TelemetryDevTracer tst = new TelemetryDevTracer();
         tst.setTraceFormat("json");
+        tst.setDisableCoreProcessors(true);
         CamelContext context = super.createCamelContext();
         CamelContextAware.trySetCamelContext(tst, context);
         tst.init(context);
diff --git a/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/AsyncWiretapTest.java b/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/AsyncWiretapTest.java
index 67fd4384ddab..3f08e4f18f13 100644
--- a/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/AsyncWiretapTest.java
+++ b/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/AsyncWiretapTest.java
@@ -42,6 +42,7 @@ public class AsyncWiretapTest extends TelemetryDevTracerTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         TelemetryDevTracer tst = new TelemetryDevTracer();
         tst.setTraceFormat("json");
+        tst.setDisableCoreProcessors(true);
         CamelContext context = super.createCamelContext();
         CamelContextAware.trySetCamelContext(tst, context);
         tst.init(context);
diff --git a/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/MDCHeadersTraceTest.java b/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/MDCHeadersTraceTest.java
index 2e9472aece6b..0bfe182dd0dd 100644
--- a/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/MDCHeadersTraceTest.java
+++ b/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/MDCHeadersTraceTest.java
@@ -38,6 +38,7 @@ public class MDCHeadersTraceTest extends TelemetryDevTracerTestSupport {
         TelemetryDevTracer tst = new TelemetryDevTracer();
         tst.setTraceFormat("json");
         tst.setTraceHeadersInclusion(true);
+        tst.setDisableCoreProcessors(true);
         CamelContextAware.trySetCamelContext(tst, context);
         tst.init(context);
         return context;
diff --git a/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/TelemetryDevTracerTest.java b/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/SpanBeanTest.java
similarity index 52%
copy from components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/TelemetryDevTracerTest.java
copy to components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/SpanBeanTest.java
index 6fea7695553d..b0f02f990bda 100644
--- a/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/TelemetryDevTracerTest.java
+++ b/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/SpanBeanTest.java
@@ -26,21 +26,25 @@ import org.apache.camel.Exchange;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.telemetry.Op;
+import org.apache.camel.telemetry.Span;
+import org.apache.camel.telemetry.SpanStorageManagerExchange;
 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;
 
-public class TelemetryDevTracerTest extends TelemetryDevTracerTestSupport {
+public class SpanBeanTest extends TelemetryDevTracerTestSupport {
+
+    TelemetryDevTracer tracer;
 
     @Override
     protected CamelContext createCamelContext() throws Exception {
-        TelemetryDevTracer tst = new TelemetryDevTracer();
-        tst.setTraceFormat("json");
+        tracer = new TelemetryDevTracer();
+        tracer.setTraceFormat("json");
         CamelContext context = super.createCamelContext();
-        CamelContextAware.trySetCamelContext(tst, context);
-        tst.init(context);
+        CamelContextAware.trySetCamelContext(tracer, context);
+        tracer.init(context);
         return context;
     }
 
@@ -54,59 +58,52 @@ public class TelemetryDevTracerTest extends TelemetryDevTracerTestSupport {
         checkTrace(traces.values().iterator().next(), null);
     }
 
-    @Test
-    void testRouteMultipleRequests() throws IOException {
-        for (int i = 1; i <= 10; i++) {
-            context.createProducerTemplate().sendBody("direct:start", "Hello!");
-        }
-        Map<String, DevTrace> traces = tracesFromLog();
-        // Each trace should have a unique trace id. It is enough to assert that
-        // the number of elements in the map is the same of the requests to prove
-        // all traces have been generated uniquely.
-        assertEquals(10, traces.size());
-        // Each trace should have the same structure
-        for (DevTrace trace : traces.values()) {
-            checkTrace(trace, "Hello!");
-        }
-
-    }
-
     private void checkTrace(DevTrace trace, String expectedBody) {
         List<DevSpanAdapter> spans = trace.getSpans();
-        assertEquals(3, spans.size());
+        assertEquals(7, spans.size());
         DevSpanAdapter testProducer = spans.get(0);
         DevSpanAdapter direct = spans.get(1);
-        DevSpanAdapter log = spans.get(2);
+        DevSpanAdapter logProcessor = spans.get(2);
+        DevSpanAdapter beanProcessor = spans.get(3);
+        DevSpanAdapter beanMySpan = spans.get(4);
+        DevSpanAdapter to = spans.get(5);
+        DevSpanAdapter toProcessor = spans.get(6);
 
         // Validate span completion
         assertEquals("true", testProducer.getTag("isDone"));
         assertEquals("true", direct.getTag("isDone"));
-        assertEquals("true", log.getTag("isDone"));
+        assertEquals("true", logProcessor.getTag("isDone"));
+        assertEquals("true", beanProcessor.getTag("isDone"));
+        assertEquals("true", beanMySpan.getTag("isDone"));
+        assertEquals("true", to.getTag("isDone"));
+        assertEquals("true", toProcessor.getTag("isDone"));
 
         // Validate same trace
         assertEquals(testProducer.getTag("traceid"), direct.getTag("traceid"));
-        assertEquals(direct.getTag("traceid"), log.getTag("traceid"));
+        assertEquals(direct.getTag("traceid"), to.getTag("traceid"));
+        assertEquals(testProducer.getTag("traceid"), logProcessor.getTag("traceid"));
+        assertEquals(testProducer.getTag("traceid"), toProcessor.getTag("traceid"));
+        assertEquals(testProducer.getTag("traceid"), beanProcessor.getTag("traceid"));
+        assertEquals(testProducer.getTag("traceid"), beanMySpan.getTag("traceid"));
 
         // Validate hierarchy
         assertNull(testProducer.getTag("parentSpan"));
         assertEquals(testProducer.getTag("spanid"), direct.getTag("parentSpan"));
-        assertEquals(direct.getTag("spanid"), log.getTag("parentSpan"));
+        assertEquals(direct.getTag("spanid"), logProcessor.getTag("parentSpan"));
+        assertEquals(direct.getTag("spanid"), beanProcessor.getTag("parentSpan"));
+        assertEquals(beanProcessor.getTag("spanid"), beanMySpan.getTag("parentSpan"));
+        assertEquals(direct.getTag("spanid"), to.getTag("parentSpan"));
+        assertEquals(to.getTag("spanid"), toProcessor.getTag("parentSpan"));
 
         // Validate operations
         assertEquals(Op.EVENT_SENT.toString(), testProducer.getTag("op"));
         assertEquals(Op.EVENT_RECEIVED.toString(), direct.getTag("op"));
 
         // Validate message logging
-        assertEquals("A message", direct.getLogEntries().get(0).getFields().get("message"));
-        if (expectedBody == null) {
-            assertEquals(
-                    "Exchange[ExchangePattern: InOut, BodyType: null, Body: [Body is null]]",
-                    log.getLogEntries().get(0).getFields().get("message"));
-        } else {
-            assertEquals(
-                    "Exchange[ExchangePattern: InOnly, BodyType: String, Body: " + expectedBody + "]",
-                    log.getLogEntries().get(0).getFields().get("message"));
-        }
+        assertEquals("A message", logProcessor.getLogEntries().get(0).getFields().get("message"));
+        assertEquals(
+                "Exchange[ExchangePattern: InOut, BodyType: null, Body: [Body is null]]",
+                toProcessor.getLogEntries().get(0).getFields().get("message"));
 
     }
 
@@ -115,12 +112,29 @@ public class TelemetryDevTracerTest extends TelemetryDevTracerTestSupport {
         return new RouteBuilder() {
             @Override
             public void configure() {
+                MyBean myBean = new MyBean();
+                this.getCamelContext().getRegistry().bind("myBean", myBean);
+
                 from("direct:start")
                         .routeId("start")
                         .log("A message")
+                        .bean(MyBean.class)
                         .to("log:info");
             }
         };
     }
 
+    class MyBean {
+        // We simulate the creation of a Span by hand.
+        public void helloWorld(Exchange exchange) {
+            // We just simulate the creation of a span and proper nesting. In a real implementation
+            // it is up to the telemetry technology to do so (for example, via method annotations)
+            Span parentSpan = new SpanStorageManagerExchange().peek(exchange);
+            Span span = tracer.getSpanLifecycleManager().create("mySpan", "empty", parentSpan, null);
+            tracer.getSpanLifecycleManager().activate(span);
+            tracer.getSpanLifecycleManager().deactivate(span);
+            tracer.getSpanLifecycleManager().close(span);
+        }
+    }
+
 }
diff --git a/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/SpanPropagationDownstreamTest.java b/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/SpanPropagationDownstreamTest.java
index 840a3b2e1800..09b43abf3bfb 100644
--- a/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/SpanPropagationDownstreamTest.java
+++ b/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/SpanPropagationDownstreamTest.java
@@ -32,6 +32,7 @@ public class SpanPropagationDownstreamTest extends ExchangeTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         TelemetryDevTracer tst = new TelemetryDevTracer();
         tst.setTraceFormat("json");
+        tst.setDisableCoreProcessors(true);
         CamelContext context = super.createCamelContext();
         CamelContextAware.trySetCamelContext(tst, context);
         tst.init(context);
diff --git a/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/SpanPropagationUpstreamTest.java b/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/SpanPropagationUpstreamTest.java
index 19af81965cc1..44c8b3b6b40a 100644
--- a/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/SpanPropagationUpstreamTest.java
+++ b/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/SpanPropagationUpstreamTest.java
@@ -34,6 +34,7 @@ public class SpanPropagationUpstreamTest extends TelemetryDevTracerTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         TelemetryDevTracer tst = new TelemetryDevTracer();
         tst.setTraceFormat("json");
+        tst.setDisableCoreProcessors(true);
         CamelContext context = super.createCamelContext();
         CamelContextAware.trySetCamelContext(tst, context);
         tst.init(context);
diff --git a/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/TelemetryDevTracerTest.java b/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/TelemetryDevTracerTest.java
index 6fea7695553d..cd0c4f838bf3 100644
--- a/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/TelemetryDevTracerTest.java
+++ b/components/camel-telemetry-dev/src/test/java/org/apache/camel/telemetrydev/TelemetryDevTracerTest.java
@@ -38,6 +38,7 @@ public class TelemetryDevTracerTest extends TelemetryDevTracerTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         TelemetryDevTracer tst = new TelemetryDevTracer();
         tst.setTraceFormat("json");
+        tst.setDisableCoreProcessors(true);
         CamelContext context = super.createCamelContext();
         CamelContextAware.trySetCamelContext(tst, context);
         tst.init(context);
diff --git a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/mock/MockTracer.java b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/mock/MockTracer.java
index ae32f58b5d56..6479e8ebf213 100644
--- a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/mock/MockTracer.java
+++ b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/mock/MockTracer.java
@@ -35,7 +35,7 @@ import org.apache.camel.telemetry.Tracer;
 @ManagedResource(description = "MockTracer")
 public class MockTracer extends Tracer {
 
-    public MockSpanLifecycleManager slcm;
+    MockSpanLifecycleManager slcm;
 
     @Override
     protected void initTracer() {
@@ -47,8 +47,7 @@ public class MockTracer extends Tracer {
         return slcm.traces();
     }
 
-    // NOTE: public because we're using directly in a test case to generate a custom span
-    public class MockSpanLifecycleManager implements SpanLifecycleManager {
+    private class MockSpanLifecycleManager implements SpanLifecycleManager {
 
         // Used to collect the traces for later evaluation as traces
         Map<String, Span> inMemoryStorageMap = new HashMap<>();


(camel) 04/09: chore(components): test to check log span

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch code-massel-CAMEL-23352
in repository https://gitbox.apache.org/repos/asf/camel.git

commit a8edab7659d9a676b27272fb21ac7d2a21c9fc7f
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Thu May 7 09:41:48 2026 +0200

    chore(components): test to check log span
---
 .../java/org/apache/camel/telemetry/SpanBeanTest.java  | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/SpanBeanTest.java b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/SpanBeanTest.java
index 5480b7db1bda..ed2cba75226d 100644
--- a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/SpanBeanTest.java
+++ b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/SpanBeanTest.java
@@ -96,6 +96,16 @@ public class SpanBeanTest extends ExchangeTestSupport {
         assertEquals(direct.getTag("spanid"), bean.getTag("parentSpan"));
         assertEquals(bean.getTag("spanid"), beanMethod.getTag("parentSpan"));
         assertEquals(log.getTag("spanid"), innerToLog.getTag("parentSpan"));
+
+        // Validate operations
+        assertEquals(Op.EVENT_SENT.toString(), testProducer.getTag("op"));
+        assertEquals(Op.EVENT_RECEIVED.toString(), direct.getTag("op"));
+
+        // Validate message logging
+        assertEquals("A message", innerLog.logEntries().get(0).fields().get("message"));
+        assertEquals(
+                "Exchange[ExchangePattern: InOnly, BodyType: String, Body: my-body]",
+                innerToLog.logEntries().get(0).fields().get("message"));
     }
 
     @Override
@@ -127,10 +137,10 @@ public class SpanBeanTest extends ExchangeTestSupport {
             // We just simulate the creation of a span and proper nesting. In a real implementation
             // it is up to the telemetry technology to do so (for example, via method annotations)
             Span parentSpan = new SpanStorageManagerExchange().peek(exchange);
-            Span span = mockTracer.slcm.create("mySpan", "bo", parentSpan, null);
-            mockTracer.slcm.activate(span);
-            mockTracer.slcm.deactivate(span);
-            mockTracer.slcm.close(span);
+            Span span = mockTracer.getSpanLifecycleManager().create("mySpan", "bo", parentSpan, null);
+            mockTracer.getSpanLifecycleManager().activate(span);
+            mockTracer.getSpanLifecycleManager().deactivate(span);
+            mockTracer.getSpanLifecycleManager().close(span);
         }
     }
 


(camel) 09/09: Regen

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch code-massel-CAMEL-23352
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 096833c2e365fc6410269de28c06bcc2860d0ffb
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri May 8 09:54:49 2026 +0200

    Regen
---
 .../apache/camel/catalog/schemas/camel-spring.xsd  | 36578 +++++++++----------
 .../apache/camel/catalog/schemas/camel-xml-io.xsd  | 32094 ++++++++--------
 2 files changed, 34336 insertions(+), 34336 deletions(-)

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 09605321373c..3195e51d6614 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
@@ -1,18432 +1,18432 @@
-<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://camel.apache.org/schema/spring" elementFormDefault="qualified" targetNamespace="http://camel.apache.org/schema/spring" version="1.0">
-  <xs:element name="aggregate" type="tns:aggregateDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Aggregates many messages into a single message
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="apiKey" type="tns:apiKeyDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Rest security basic auth definition
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="asn1" type="tns:asn1DataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Encode and decode data structures using Abstract Syntax Notation One (ASN.1).
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="avro" type="tns:avroDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Serialize and deserialize messages using Apache Avro binary data format.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="barcode" type="tns:barcodeDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Transform strings to various 1D/2D barcode bitmap formats and back.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="base64" type="tns:base64DataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Encode and decode data using Base64.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="basicAuth" type="tns:basicAuthDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Rest security basic auth definition
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="batchConfig" type="tns:batchResequencerConfig">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Configures batch-processing resequence eip.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="bean" type="tns:beanDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Calls a Java bean
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="beanFactory" type="tns:beanFactoryDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Define custom beans that can be used in your Camel routes and in general.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="beanPostProcessor" type="tns:camelBeanPostProcessor">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Spring specific DefaultCamelBeanPostProcessor which uses Spring BeanPostProcessor to post process beans.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="beanio" type="tns:beanioDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Marshal and unmarshal Java beans to and from flat files (such as CSV, delimited, or fixed length formats).
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="beans" type="tns:beansDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Container for beans, routes, and more. Important this is only supported when using XML DSL with camel-xml-io-dsl. This
-is NOT for the classic old Spring XML DSL used by Camel 1.x/2.x.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="bearerToken" type="tns:bearerTokenDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Rest security bearer token authentication definition
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="bindy" type="tns:bindyDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Marshal and unmarshal Java beans from and to flat payloads (such as CSV, delimited, fixed length formats, or FIX
-messages).
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="camel" type="tns:applicationDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Root tag for Camel application, that can contain beans, routes, and more. Important this is only supported when using
-XML DSL with camel-xml-io-dsl. This is NOT for the classic old Spring XML DSL used by Camel 1.x/2.x.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="camelContext" type="tns:camelContextFactoryBean">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-CamelContext using XML configuration.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="cbor" type="tns:cborDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Unmarshal a CBOR payload to POJO and back.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="choice" type="tns:choiceDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Route messages based on a series of predicates
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="circuitBreaker" type="tns:circuitBreakerDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Route messages in a fault tolerance way using Circuit Breaker
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="claimCheck" type="tns:claimCheckDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-The Claim Check EIP allows you to replace message content with a claim check (a unique key), which can be used to
-retrieve the message content at a later time.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="constant" type="tns:constantExpression">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-A fixed value set only once during the route startup.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="consumerTemplate" type="tns:camelConsumerTemplateFactoryBean">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Configures a ConsumerTemplate
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="contextScan" type="tns:contextScanDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Scans for Java org.apache.camel.builder.RouteBuilder instances in the context org.apache.camel.spi.Registry .
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="convertBodyTo" type="tns:convertBodyDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Converts the message body to another type
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="convertHeaderTo" type="tns:convertHeaderDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Converts the message header to another type
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="convertVariableTo" type="tns:convertVariableDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Converts the variable to another type
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="crypto" type="tns:cryptoDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Encrypt and decrypt messages using Java Cryptography Extension (JCE).
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="csimple" type="tns:cSimpleExpression">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Deprecated: Evaluate a compiled simple expression.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="csv" type="tns:csvDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Handle CSV (Comma Separated Values) payloads.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="custom" type="tns:customDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Delegate to a custom org.apache.camel.spi.DataFormat implementation via Camel registry.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="customLoadBalancer" type="tns:customLoadBalancerDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To use a custom load balancer implementation.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="customTransformer" type="tns:customTransformerDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To use a custom transformer on a route level.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="customValidator" type="tns:customValidatorDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To use a custom validator on the route level.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="dataFormatTransformer" type="tns:dataFormatTransformerDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Represents a org.apache.camel.processor.transformer.DataFormatTransformer which leverages
-org.apache.camel.spi.DataFormat to perform transformation. One of the DataFormat 'ref' or DataFormat 'type' needs to be
-specified.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="dataFormats" type="tns:dataFormatsDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Configure data formats.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="datasonnet" type="tns:datasonnetExpression">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To use DataSonnet scripts for message transformations.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="deadLetterChannel" type="tns:deadLetterChannelDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Error handler with dead letter queue.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="defaultErrorHandler" type="tns:defaultErrorHandlerDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-The default error handler.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="delay" type="tns:delayDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Delays processing for a specified length of time
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="delete" type="tns:deleteDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Rest DELETE command
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="dfdl" type="tns:dfdlDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Transforms fixed format data such as EDI message from/to XML using a Data Format Description Language (DFDL).
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="doCatch" type="tns:catchDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Catches exceptions as part of a try, catch, finally block
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="doFinally" type="tns:finallyDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Path traversed when a try, catch, finally block exits
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="doTry" type="tns:tryDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Marks the beginning of a try, catch, finally block
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="dynamicRouter" type="tns:dynamicRouterDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Route messages based on dynamic rules
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="endpoint" type="tns:camelEndpointFactoryBean">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Camel endpoint configuration
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="endpointTransformer" type="tns:endpointTransformerDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To use a Camel endpoint to perform transformation on the route level.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="endpointValidator" type="tns:endpointValidatorDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To use a Camel endpoint to perform validation on the route level.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="enrich" type="tns:enrichDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Enriches a message with data from a secondary resource
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="errorHandler" nillable="true" type="xs:anyType">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Camel error handling.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="exchangeProperty" type="tns:exchangePropertyExpression">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Gets a property from the Exchange.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="expression" type="tns:expressionSubElementDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-A useful base class for an expression
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="expressionDefinition" type="tns:expression"/>
-  <xs:element name="failoverLoadBalancer" type="tns:failoverLoadBalancerDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-In case of failures the exchange will be tried on the next endpoint.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="faultToleranceConfiguration" type="tns:faultToleranceConfigurationDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-MicroProfile Fault Tolerance Circuit Breaker EIP configuration
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="fhirJson" type="tns:fhirJsonDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Marshall and unmarshall FHIR objects to/from JSON.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="fhirXml" type="tns:fhirXmlDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Marshall and unmarshall FHIR objects to/from XML.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="filter" type="tns:filterDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Filter out messages based using a predicate
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="flatpack" type="tns:flatpackDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Marshal and unmarshal Java lists and maps to/from flat files (such as CSV, delimited, or fixed length formats) using
-Flatpack library.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="fluentTemplate" type="tns:camelFluentProducerTemplateFactoryBean">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Configures a org.apache.camel.FluentProducerTemplate
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="fory" type="tns:foryDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Serialize and deserialize messages using Apache Fory
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="from" type="tns:fromDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Act as a message source as input to a route
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="get" type="tns:getDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Rest GET command
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="globalOption" type="tns:globalOptionDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Models a string key/value pair for configuring some global options on a Camel context such as max debug log length.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="globalOptions" type="tns:globalOptionsDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Models a series of string key/value pairs for configuring some global options on a Camel context such as max debug log
-length.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="grok" type="tns:grokDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Unmarshal unstructured data to objects using Logstash based Grok patterns.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="groovy" type="tns:groovyExpression">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Evaluates a Groovy script.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="groovyJson" type="tns:groovyJSonDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Transform between JSon and java.util.Map or java.util.List objects.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="groovyXml" type="tns:groovyXmlDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Transform between XML and Groovy Node (Map structure) objects.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="gzipDeflater" type="tns:gzipDeflaterDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Compress and decompress messages using java.util.zip.GZIPStream.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="head" type="tns:headDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Rest HEAD command
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="header" type="tns:headerExpression">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Gets a header from the Exchange.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="hl7" type="tns:hl7DataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Marshal and unmarshal HL7 (Health Care) model objects using the HL7 MLLP codec.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="hl7terser" type="tns:hl7TerserExpression">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Get the value of a HL7 message field specified by terse location specification syntax.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="ical" type="tns:icalDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Marshal and unmarshal iCal (.ics) documents to/from model objects.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="idempotentConsumer" type="tns:idempotentConsumerDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Filters out duplicate messages
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="inputType" type="tns:inputTypeDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Set the expected data type of the input message. If the actual message type is different at runtime, camel look for a
-required Transformer and apply if exists. If validate attribute is true then camel applies Validator as well. Type name
-consists of two parts, 'scheme' and 'name' connected with ':'. For Java type 'name' is a fully qualified class name. For
-example {code java:java.lang.String} , {code json:ABCOrder} . It's also possible to specify only scheme part, so that it
-works like a wildcard. If only 'xml' is specified, all the XML message matches. It's handy to add only one
-transformer/validator for all the transformation from/to XML.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="intercept" type="tns:interceptDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Intercepts a message at each step in the route
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="interceptFrom" type="tns:interceptFromDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Intercepts incoming messages
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="interceptSendToEndpoint" type="tns:interceptSendToEndpointDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Intercepts messages being sent to an endpoint
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="iso8583" type="tns:iso8583DataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Create, edit and read ISO-8583 messages.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="jacksonXml" type="tns:jacksonXMLDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Unmarshal an XML payloads to POJOs and back using XMLMapper extension of Jackson.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="java" type="tns:javaExpression">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Evaluates a Java (Java compiled once at runtime) expression.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="jaxb" type="tns:jaxbDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Unmarshal XML payloads to POJOs and back using JAXB2 XML marshalling standard.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="jmxAgent" type="tns:camelJMXAgentDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-JMX configuration.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="joor" type="tns:joorExpression">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Deprecated: Evaluates a jOOR (Java compiled once at runtime) expression.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="jq" type="tns:jqExpression">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Evaluates a JQ expression against a JSON message body.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="js" type="tns:javaScriptExpression">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Evaluates a JavaScript expression.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="json" type="tns:jsonDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Marshal POJOs to JSON and back.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="jsonApi" type="tns:jsonApiDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Marshal and unmarshal JSON:API resources using JSONAPI-Converter library.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="jsonpath" type="tns:jsonPathExpression">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Evaluates a JSONPath expression against a JSON message body.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="jtaTransactionErrorHandler" type="tns:jtaTransactionErrorHandlerDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-JTA based transactional error handler (requires camel-jta).
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="kamelet" type="tns:kameletDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To call Kamelets in special situations. By default, calling kamelets should be done as endpoints with the kamelet
-component, such as to(kamelet:mykamelet). When a Kamelet is designed for a special use-case such as aggregating
-messages, and returning a response message only when a group of aggregated messages is completed. In other words,
-kamelet does not return a response message for every incoming message. In special situations like these, then you must
-use this Kamelet EIP instead of using the kamelet component.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="keyStoreParameters" type="tns:keyStoreParametersFactoryBean">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Key store facility for cryptographic keys and certificates
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="langChain4jCharacterTokenizer" type="tns:langChain4JCharacterTokenizerDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Camel AI: Tokenizer for splitting by character.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="langChain4jLineTokenizer" type="tns:langChain4JLineTokenizerDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Camel AI: Tokenizer for splitting line by line.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="langChain4jParagraphTokenizer" type="tns:langChain4JParagraphTokenizerDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Camel AI: Tokenizer for splitting by paragraphs.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="langChain4jSentenceTokenizer" type="tns:langChain4JSentenceTokenizerDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Camel AI: Tokenizer for splitting by sentences.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="langChain4jWordTokenizer" type="tns:langChain4JWordTokenizerDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Camel AI: Tokenizer for splitting by word.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="language" type="tns:languageExpression">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Evaluates a custom language.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="loadBalance" type="tns:loadBalanceDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Balances message processing among a number of nodes
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="loadTransformer" type="tns:loadTransformerDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To load custom transformers from classpath scanning to be used for route level transformations.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="log" type="tns:logDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Used for printing custom messages to the logger.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="loop" type="tns:loopDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Processes a message multiple times
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="lzf" type="tns:lzfDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Compress and decompress streams using LZF deflate algorithm.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="marshal" type="tns:marshalDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Marshals data into a specified format for transmission over a transport or component
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="method" type="tns:methodCallExpression">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Calls a Java bean method.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="mimeMultipart" type="tns:mimeMultipartDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Marshal Camel messages with attachments into MIME-Multipart messages and back.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="multicast" type="tns:multicastDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Routes the same message to multiple paths either sequentially or in parallel.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="mutualTLS" type="tns:mutualTLSDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Rest security mutual TLS authentication definition
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="mvel" type="tns:mvelExpression">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Evaluates a MVEL template.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="noErrorHandler" type="tns:noErrorHandlerDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To not use an error handler.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="oauth2" type="tns:oAuth2Definition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Rest security OAuth2 definition
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="ocsf" type="tns:ocsfDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Marshal and unmarshal OCSF (Open Cybersecurity Schema Framework) security events to/from JSON.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="ognl" type="tns:ognlExpression">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Deprecated: Evaluates an OGNL expression (Apache Commons OGNL).
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="onCompletion" type="tns:onCompletionDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Route to be executed when normal route processing completes
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="onException" type="tns:onExceptionDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Route to be executed when an exception is thrown
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="onFallback" type="tns:onFallbackDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Route to be executed when Circuit Breaker EIP executes fallback
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="onWhen" type="tns:onWhenDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To use a predicate to determine when to trigger this.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="openApi" type="tns:openApiDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To use OpenApi as contract-first with Camel Rest DSL.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="openIdConnect" type="tns:openIdConnectDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Rest security OpenID Connect definition
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="optimisticLockRetryPolicy" type="tns:optimisticLockRetryPolicyDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To configure optimistic locking
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="otherwise" type="tns:otherwiseDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Route to be executed when all other choices evaluate to false
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="outputType" type="tns:outputTypeDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Set the expected data type of the output message. If the actual message type is different at runtime, camel look for a
-required Transformer and apply if exists. If validate attribute is true then camel applies Validator as well. Type name
-consists of two parts, 'scheme' and 'name' connected with ':'. For Java type 'name' is a fully qualified class name. For
-example {code java:java.lang.String} , {code json:ABCOrder} . It's also possible to specify only scheme part, so that it
-works like a wildcard. If only 'xml' is specified, all the XML message matches. It's handy to add only one
-transformer/validator for all the XML-Java transformation.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="packageScan" type="tns:packageScanDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Scans for Java org.apache.camel.builder.RouteBuilder classes in java packages
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="param" type="tns:paramDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To specify the rest operation parameters.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="parquetAvro" type="tns:parquetAvroDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Parquet Avro serialization and de-serialization.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="patch" type="tns:patchDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Rest PATCH command
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="pausable" type="tns:pausableDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Pausable EIP to support resuming processing from last known offset.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="pgp" type="tns:pgpDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Encrypt and decrypt messages using Java Cryptographic Extension (JCE) and PGP.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="pipeline" type="tns:pipelineDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Routes the message to a sequence of processors.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="policy" type="tns:policyDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Defines a policy the route will use
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="poll" type="tns:pollDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Polls a message from a static endpoint
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="pollEnrich" type="tns:pollEnrichDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Enriches messages with data polled from a secondary resource
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="post" type="tns:postDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Rest POST command
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="pqc" type="tns:pqcDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Encrypt and decrypt messages using Post-Quantum Cryptography Key Encapsulation Mechanisms (KEM).
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="predicateValidator" type="tns:predicateValidatorDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To use a predicate to perform validation on the route level.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="process" type="tns:processDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Calls a Camel processor
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="propertiesFunction" type="tns:camelPropertyPlaceholderFunctionDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Function to use with properties placeholder
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="propertiesLocation" type="tns:camelPropertyPlaceholderLocationDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Properties to use with properties placeholder
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="property" type="tns:propertyDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-A key value pair where the value is a literal value
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="propertyExpression" type="tns:propertyExpressionDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-A key value pair where the value is an expression.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="propertyPlaceholder" type="tns:camelPropertyPlaceholderDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Properties placeholder
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="protobuf" type="tns:protobufDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Serialize and deserialize Java objects using Google's Protocol buffers.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="put" type="tns:putDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Rest PUT command
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="python" type="tns:pythonExpression">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Evaluates a Python expression.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="randomLoadBalancer" type="tns:randomLoadBalancerDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-The destination endpoints are selected randomly.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="recipientList" type="tns:recipientListDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Route messages to a number of dynamically specified recipients
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="redeliveryPolicy" type="tns:redeliveryPolicyDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To configure re-delivery for error handling
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="redeliveryPolicyProfile" type="tns:camelRedeliveryPolicyFactoryBean">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Configuration of redelivery policy.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="ref" type="tns:refExpression">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Uses an existing expression from the registry.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="refErrorHandler" type="tns:refErrorHandlerDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-References to an existing or custom error handler.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="removeHeader" type="tns:removeHeaderDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Removes a named header from the message
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="removeHeaders" type="tns:removeHeadersDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Removes message headers whose name matches a specified pattern
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="removeProperties" type="tns:removePropertiesDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Removes message exchange properties whose name matches a specified pattern
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="removeProperty" type="tns:removePropertyDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Removes a named property from the message exchange
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="removeVariable" type="tns:removeVariableDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Removes a named variable
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="resequence" type="tns:resequenceDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Resequences (re-order) messages based on an expression
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="resilience4jConfiguration" type="tns:resilience4JConfigurationDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Resilience4j Circuit Breaker EIP configuration
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="responseHeader" type="tns:responseHeaderDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To specify the rest operation response headers.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="responseMessage" type="tns:responseMessageDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To specify the rest operation response messages.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="rest" type="tns:restDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Defines a rest service using the rest-dsl
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="restBinding" type="tns:restBindingDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To configure rest binding
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="restConfiguration" type="tns:restConfigurationDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To configure rest
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="restContext" type="tns:camelRestContextFactoryBean">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Configuration of REST services using rest-dsl using XML
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="restContextRef" type="tns:restContextRefDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To refer to an XML file with rest services defined using the rest-dsl
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="restProperty" type="tns:restPropertyDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-A key value pair
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="rests" type="tns:restsDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-A series of rest services defined using the rest-dsl
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="resumable" type="tns:resumableDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Resume EIP to support resuming processing from last known offset.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="rollback" type="tns:rollbackDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Forces a rollback by stopping routing the message
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="roundRobinLoadBalancer" type="tns:roundRobinLoadBalancerDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-The destination endpoints are selected in a round-robin fashion. This is a well-known and classic policy, which spreads
-the load evenly.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="route" type="tns:routeDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-A Camel route
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="routeBuilder" type="tns:routeBuilderDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To refer to a Java org.apache.camel.builder.RouteBuilder instance to use.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="routeConfiguration" type="tns:routeConfigurationDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Reusable configuration for Camel route(s).
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="routeConfigurationContext" type="tns:camelRouteConfigurationContextFactoryBean">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Configuration of route configurations using XML
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="routeConfigurationContextRef" type="tns:routeConfigurationContextRefDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To refer to an XML file with route configuration defined using the xml-dsl
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="routeConfigurations" type="tns:routeConfigurationsDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-A series of route configurations
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="routeContext" type="tns:camelRouteContextFactoryBean">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Configuration of routes using XML
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="routeContextRef" type="tns:routeContextRefDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To refer to an XML file with routes defined using the xml-dsl
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="routeController" type="tns:camelRouteControllerDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Route controller configuration.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="routeTemplate" type="tns:routeTemplateDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Defines a route template (parameterized routes)
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="routeTemplateContext" type="tns:camelRouteTemplateContextFactoryBean">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Configuration of route templates using XML
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="routeTemplateContextRef" type="tns:routeTemplateContextRefDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To refer to an XML file with route templates defined using the xml-dsl
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="routeTemplates" type="tns:routeTemplatesDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-A series of route templates
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="routes" type="tns:routesDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-A series of Camel routes
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="routingSlip" type="tns:routingSlipDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Routes a message through a series of steps that are pre-determined (the slip)
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="rss" type="tns:rssDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Transform from ROME SyndFeed Java Objects to XML and vice-versa.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="saga" type="tns:sagaDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Enables Sagas on the route
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="sample" type="tns:samplingDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Extract a sample of the messages passing through a route
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="script" type="tns:scriptDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Executes a script from a language which does not change the message body.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="secureRandomParameters" type="tns:secureRandomParametersFactoryBean">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Cryptographically strong random number generator
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="security" type="tns:securityDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Rest security definition
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="securityDefinitions" type="tns:restSecuritiesDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To configure rest security definitions.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="setBody" type="tns:setBodyDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the contents of the message body
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="setExchangePattern" type="tns:setExchangePatternDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the exchange pattern on the message exchange
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="setHeader" type="tns:setHeaderDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the value of a message header
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="setHeaders" type="tns:setHeadersDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Allows setting multiple headers on the message at the same time.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="setProperty" type="tns:setPropertyDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Sets a named property on the message exchange
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="setVariable" type="tns:setVariableDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the value of a variable
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="setVariables" type="tns:setVariablesDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Allows setting multiple variables at the same time.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="simple" type="tns:simpleExpression">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Evaluates a Camel simple expression.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="smooks" type="tns:smooksDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Transform and bind XML as well as non-XML data, including EDI, CSV, JSON, and YAML using Smooks.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="soap" type="tns:soapDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Marshal Java objects to SOAP messages and back.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="sort" type="tns:sortDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Sorts the contents of the message
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="spel" type="tns:spELExpression">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Evaluates a Spring expression (SpEL).
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="split" type="tns:splitDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Splits a single message into many sub-messages.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="springTransactionErrorHandler" type="tns:springTransactionErrorHandlerDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Spring based transactional error handler (requires camel-spring).
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="sslContextParameters" type="tns:sslContextParametersFactoryBean">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Secure socket protocol configuration
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="step" type="tns:stepDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Routes the message to a sequence of processors which is grouped together as one logical name
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="stickyLoadBalancer" type="tns:stickyLoadBalancerDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Sticky load balancing using an expression to calculate a correlation key to perform the sticky load balancing.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="stop" type="tns:stopDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Stops the processing of the current message
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="streamCaching" type="tns:camelStreamCachingStrategyDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Stream caching configuration.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="streamConfig" type="tns:streamResequencerConfig">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Configures stream-processing resequence eip.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="swiftMt" type="tns:swiftMtDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Encode and decode SWIFT MT messages.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="swiftMx" type="tns:swiftMxDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Encode and decode SWIFT MX messages.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="syslog" type="tns:syslogDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Marshall SyslogMessages to RFC3164 and RFC5424 messages and back.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="tarFile" type="tns:tarFileDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Archive files into tarballs or extract files from tarballs.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="template" type="tns:camelProducerTemplateFactoryBean">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Configures a ProducerTemplate
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="templateParameter" type="tns:routeTemplateParameterDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-A route template parameter
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="templatedRoute" type="tns:templatedRouteDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Defines a templated route (a route built from a route template)
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="templatedRouteParameter" type="tns:templatedRouteParameterDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-An input parameter of a route template.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="templatedRoutes" type="tns:templatedRoutesDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-A series of templated routes
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="threadPool" type="tns:camelThreadPoolFactoryBean">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Configuration of thread pools
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="threadPoolProfile" type="tns:threadPoolProfileDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To configure thread pools
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="threads" type="tns:threadsDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Specifies that all steps after this node are processed asynchronously
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="thrift" type="tns:thriftDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Serialize and deserialize messages using Apache Thrift binary data format.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="throttle" type="tns:throttleDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Controls the rate at which messages are passed to the next node in the route
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="throwException" type="tns:throwExceptionDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Throws an exception
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="to" type="tns:toDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Sends the message to a static endpoint
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="toD" type="tns:toDynamicDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Sends the message to a dynamic endpoint
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="tokenize" type="tns:tokenizerExpression">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Tokenize text payloads using delimiter patterns.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="tokenizer" type="tns:tokenizerDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Represents a Camel tokenizer for AI.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="topicLoadBalancer" type="tns:topicLoadBalancerDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Topic which sends to all destinations.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="transacted" type="tns:transactedDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Enables transaction on the route
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="transform" type="tns:transformDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Transforms the message body based on an expression
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="transformDataType" type="tns:transformDataTypeDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Transforms the message body based on known data type transformers.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="transformers" type="tns:transformersDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To configure transformers.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="univocityCsv" type="tns:uniVocityCsvDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Marshal and unmarshal Java objects from and to CSV (Comma Separated Values) using UniVocity Parsers.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="univocityFixed" type="tns:uniVocityFixedDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Marshal and unmarshal Java objects from and to fixed length records using UniVocity Parsers.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="univocityHeader" type="tns:uniVocityHeader">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To configure headers for UniVocity data formats.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="univocityTsv" type="tns:uniVocityTsvDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Marshal and unmarshal Java objects from and to TSV (Tab-Separated Values) records using UniVocity Parsers.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="unmarshal" type="tns:unmarshalDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Converts the message data received from the wire into a format that Apache Camel processors can consume
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="validate" type="tns:validateDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Validates a message based on an expression
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="validators" type="tns:validatorsDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-To configure validators.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="value" type="tns:valueDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-A single value
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="variable" type="tns:variableExpression">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Gets a variable
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="wasm" type="tns:wasmExpression">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Call a wasm (web assembly) function.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="weightedLoadBalancer" type="tns:weightedLoadBalancerDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Uses a weighted load distribution ratio for each server with respect to others.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="when" type="tns:whenDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Triggers a route when the expression evaluates to true
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="wireTap" type="tns:wireTapDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Routes a copy of a message (or creates a new message) to a secondary destination while continue routing the original
-message.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="xmlSecurity" type="tns:xmlSecurityDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Encrypt and decrypt XML payloads using Apache Santuario.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="xpath" type="tns:xPathExpression">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Evaluates an XPath expression against an XML payload.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="xquery" type="tns:xQueryExpression">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Evaluates an XQuery expressions against an XML payload.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="xtokenize" type="tns:xmlTokenizerExpression">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Tokenize XML payloads.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="yaml" type="tns:yamlDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Marshal and unmarshal Java objects to and from YAML.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="zipDeflater" type="tns:zipDeflaterDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Compress and decompress streams using java.util.zip.Deflater and java.util.zip.Inflater.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:element name="zipFile" type="tns:zipFileDataFormat">
-    <xs:annotation>
-      <xs:documentation xml:lang="en">
-<![CDATA[
-Compression and decompress streams using java.util.zip.ZipStream.
-]]>
-      </xs:documentation>
-    </xs:annotation>
-  </xs:element>
-  <xs:complexType abstract="true" name="abstractCamelConsumerTemplateFactoryBean">
-    <xs:complexContent>
-      <xs:extension base="tns:abstractCamelFactoryBean">
-        <xs:sequence/>
-        <xs:attribute name="maximumCacheSize" type="xs:int">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets a custom maximum cache size to use in the backing cache pools.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType abstract="true" name="abstractCamelFactoryBean">
-    <xs:complexContent>
-      <xs:extension base="tns:identifiedType">
-        <xs:sequence/>
-        <xs:attribute name="camelContextId" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Id of CamelContext to use if there are multiple CamelContexts in the same JVM.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType abstract="true" name="identifiedType">
-    <xs:sequence/>
-    <xs:attribute name="id" type="xs:ID">
-      <xs:annotation>
+<?xml version="1.0" encoding="UTF-8"?><xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://camel.apache.org/schema/spring" elementFormDefault="qualified" targetNamespace="http://camel.apache.org/schema/spring" version="1.0">
+  <xs:element name="aggregate" type="tns:aggregateDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Aggregates many messages into a single message
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="apiKey" type="tns:apiKeyDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Rest security basic auth definition
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="asn1" type="tns:asn1DataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Encode and decode data structures using Abstract Syntax Notation One (ASN.1).
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="avro" type="tns:avroDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Serialize and deserialize messages using Apache Avro binary data format.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="barcode" type="tns:barcodeDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Transform strings to various 1D/2D barcode bitmap formats and back.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="base64" type="tns:base64DataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Encode and decode data using Base64.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="basicAuth" type="tns:basicAuthDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Rest security basic auth definition
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="batchConfig" type="tns:batchResequencerConfig">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Configures batch-processing resequence eip.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="bean" type="tns:beanDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Calls a Java bean
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="beanFactory" type="tns:beanFactoryDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Define custom beans that can be used in your Camel routes and in general.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="beanPostProcessor" type="tns:camelBeanPostProcessor">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Spring specific DefaultCamelBeanPostProcessor which uses Spring BeanPostProcessor to post process beans.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="beanio" type="tns:beanioDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Marshal and unmarshal Java beans to and from flat files (such as CSV, delimited, or fixed length formats).
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="beans" type="tns:beansDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Container for beans, routes, and more. Important this is only supported when using XML DSL with camel-xml-io-dsl. This
+is NOT for the classic old Spring XML DSL used by Camel 1.x/2.x.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="bearerToken" type="tns:bearerTokenDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Rest security bearer token authentication definition
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="bindy" type="tns:bindyDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Marshal and unmarshal Java beans from and to flat payloads (such as CSV, delimited, fixed length formats, or FIX
+messages).
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="camel" type="tns:applicationDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Root tag for Camel application, that can contain beans, routes, and more. Important this is only supported when using
+XML DSL with camel-xml-io-dsl. This is NOT for the classic old Spring XML DSL used by Camel 1.x/2.x.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="camelContext" type="tns:camelContextFactoryBean">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+CamelContext using XML configuration.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="cbor" type="tns:cborDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Unmarshal a CBOR payload to POJO and back.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="choice" type="tns:choiceDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Route messages based on a series of predicates
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="circuitBreaker" type="tns:circuitBreakerDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Route messages in a fault tolerance way using Circuit Breaker
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="claimCheck" type="tns:claimCheckDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+The Claim Check EIP allows you to replace message content with a claim check (a unique key), which can be used to
+retrieve the message content at a later time.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="constant" type="tns:constantExpression">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+A fixed value set only once during the route startup.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="consumerTemplate" type="tns:camelConsumerTemplateFactoryBean">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Configures a ConsumerTemplate
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="contextScan" type="tns:contextScanDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Scans for Java org.apache.camel.builder.RouteBuilder instances in the context org.apache.camel.spi.Registry .
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="convertBodyTo" type="tns:convertBodyDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Converts the message body to another type
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="convertHeaderTo" type="tns:convertHeaderDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Converts the message header to another type
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="convertVariableTo" type="tns:convertVariableDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Converts the variable to another type
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="crypto" type="tns:cryptoDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Encrypt and decrypt messages using Java Cryptography Extension (JCE).
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="csimple" type="tns:cSimpleExpression">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Deprecated: Evaluate a compiled simple expression.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="csv" type="tns:csvDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Handle CSV (Comma Separated Values) payloads.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="custom" type="tns:customDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Delegate to a custom org.apache.camel.spi.DataFormat implementation via Camel registry.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="customLoadBalancer" type="tns:customLoadBalancerDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To use a custom load balancer implementation.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="customTransformer" type="tns:customTransformerDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To use a custom transformer on a route level.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="customValidator" type="tns:customValidatorDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To use a custom validator on the route level.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="dataFormatTransformer" type="tns:dataFormatTransformerDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Represents a org.apache.camel.processor.transformer.DataFormatTransformer which leverages
+org.apache.camel.spi.DataFormat to perform transformation. One of the DataFormat 'ref' or DataFormat 'type' needs to be
+specified.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="dataFormats" type="tns:dataFormatsDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Configure data formats.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="datasonnet" type="tns:datasonnetExpression">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To use DataSonnet scripts for message transformations.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="deadLetterChannel" type="tns:deadLetterChannelDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Error handler with dead letter queue.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="defaultErrorHandler" type="tns:defaultErrorHandlerDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+The default error handler.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="delay" type="tns:delayDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Delays processing for a specified length of time
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="delete" type="tns:deleteDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Rest DELETE command
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="dfdl" type="tns:dfdlDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Transforms fixed format data such as EDI message from/to XML using a Data Format Description Language (DFDL).
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="doCatch" type="tns:catchDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Catches exceptions as part of a try, catch, finally block
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="doFinally" type="tns:finallyDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Path traversed when a try, catch, finally block exits
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="doTry" type="tns:tryDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Marks the beginning of a try, catch, finally block
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="dynamicRouter" type="tns:dynamicRouterDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Route messages based on dynamic rules
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="endpoint" type="tns:camelEndpointFactoryBean">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Camel endpoint configuration
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="endpointTransformer" type="tns:endpointTransformerDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To use a Camel endpoint to perform transformation on the route level.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="endpointValidator" type="tns:endpointValidatorDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To use a Camel endpoint to perform validation on the route level.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="enrich" type="tns:enrichDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Enriches a message with data from a secondary resource
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="errorHandler" nillable="true" type="xs:anyType">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Camel error handling.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="exchangeProperty" type="tns:exchangePropertyExpression">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Gets a property from the Exchange.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="expression" type="tns:expressionSubElementDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+A useful base class for an expression
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="expressionDefinition" type="tns:expression"/>
+  <xs:element name="failoverLoadBalancer" type="tns:failoverLoadBalancerDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+In case of failures the exchange will be tried on the next endpoint.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="faultToleranceConfiguration" type="tns:faultToleranceConfigurationDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+MicroProfile Fault Tolerance Circuit Breaker EIP configuration
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="fhirJson" type="tns:fhirJsonDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Marshall and unmarshall FHIR objects to/from JSON.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="fhirXml" type="tns:fhirXmlDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Marshall and unmarshall FHIR objects to/from XML.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="filter" type="tns:filterDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Filter out messages based using a predicate
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="flatpack" type="tns:flatpackDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Marshal and unmarshal Java lists and maps to/from flat files (such as CSV, delimited, or fixed length formats) using
+Flatpack library.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="fluentTemplate" type="tns:camelFluentProducerTemplateFactoryBean">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Configures a org.apache.camel.FluentProducerTemplate
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="fory" type="tns:foryDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Serialize and deserialize messages using Apache Fory
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="from" type="tns:fromDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Act as a message source as input to a route
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="get" type="tns:getDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Rest GET command
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="globalOption" type="tns:globalOptionDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Models a string key/value pair for configuring some global options on a Camel context such as max debug log length.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="globalOptions" type="tns:globalOptionsDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Models a series of string key/value pairs for configuring some global options on a Camel context such as max debug log
+length.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="grok" type="tns:grokDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Unmarshal unstructured data to objects using Logstash based Grok patterns.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="groovy" type="tns:groovyExpression">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Evaluates a Groovy script.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="groovyJson" type="tns:groovyJSonDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Transform between JSon and java.util.Map or java.util.List objects.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="groovyXml" type="tns:groovyXmlDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Transform between XML and Groovy Node (Map structure) objects.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="gzipDeflater" type="tns:gzipDeflaterDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Compress and decompress messages using java.util.zip.GZIPStream.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="head" type="tns:headDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Rest HEAD command
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="header" type="tns:headerExpression">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Gets a header from the Exchange.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="hl7" type="tns:hl7DataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Marshal and unmarshal HL7 (Health Care) model objects using the HL7 MLLP codec.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="hl7terser" type="tns:hl7TerserExpression">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Get the value of a HL7 message field specified by terse location specification syntax.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="ical" type="tns:icalDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Marshal and unmarshal iCal (.ics) documents to/from model objects.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="idempotentConsumer" type="tns:idempotentConsumerDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Filters out duplicate messages
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="inputType" type="tns:inputTypeDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Set the expected data type of the input message. If the actual message type is different at runtime, camel look for a
+required Transformer and apply if exists. If validate attribute is true then camel applies Validator as well. Type name
+consists of two parts, 'scheme' and 'name' connected with ':'. For Java type 'name' is a fully qualified class name. For
+example {code java:java.lang.String} , {code json:ABCOrder} . It's also possible to specify only scheme part, so that it
+works like a wildcard. If only 'xml' is specified, all the XML message matches. It's handy to add only one
+transformer/validator for all the transformation from/to XML.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="intercept" type="tns:interceptDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Intercepts a message at each step in the route
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="interceptFrom" type="tns:interceptFromDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Intercepts incoming messages
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="interceptSendToEndpoint" type="tns:interceptSendToEndpointDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Intercepts messages being sent to an endpoint
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="iso8583" type="tns:iso8583DataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Create, edit and read ISO-8583 messages.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="jacksonXml" type="tns:jacksonXMLDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Unmarshal an XML payloads to POJOs and back using XMLMapper extension of Jackson.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="java" type="tns:javaExpression">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Evaluates a Java (Java compiled once at runtime) expression.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="jaxb" type="tns:jaxbDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Unmarshal XML payloads to POJOs and back using JAXB2 XML marshalling standard.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="jmxAgent" type="tns:camelJMXAgentDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+JMX configuration.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="joor" type="tns:joorExpression">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Deprecated: Evaluates a jOOR (Java compiled once at runtime) expression.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="jq" type="tns:jqExpression">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Evaluates a JQ expression against a JSON message body.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="js" type="tns:javaScriptExpression">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Evaluates a JavaScript expression.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="json" type="tns:jsonDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Marshal POJOs to JSON and back.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="jsonApi" type="tns:jsonApiDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Marshal and unmarshal JSON:API resources using JSONAPI-Converter library.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="jsonpath" type="tns:jsonPathExpression">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Evaluates a JSONPath expression against a JSON message body.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="jtaTransactionErrorHandler" type="tns:jtaTransactionErrorHandlerDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+JTA based transactional error handler (requires camel-jta).
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="kamelet" type="tns:kameletDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To call Kamelets in special situations. By default, calling kamelets should be done as endpoints with the kamelet
+component, such as to(kamelet:mykamelet). When a Kamelet is designed for a special use-case such as aggregating
+messages, and returning a response message only when a group of aggregated messages is completed. In other words,
+kamelet does not return a response message for every incoming message. In special situations like these, then you must
+use this Kamelet EIP instead of using the kamelet component.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="keyStoreParameters" type="tns:keyStoreParametersFactoryBean">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Key store facility for cryptographic keys and certificates
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="langChain4jCharacterTokenizer" type="tns:langChain4JCharacterTokenizerDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Camel AI: Tokenizer for splitting by character.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="langChain4jLineTokenizer" type="tns:langChain4JLineTokenizerDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Camel AI: Tokenizer for splitting line by line.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="langChain4jParagraphTokenizer" type="tns:langChain4JParagraphTokenizerDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Camel AI: Tokenizer for splitting by paragraphs.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="langChain4jSentenceTokenizer" type="tns:langChain4JSentenceTokenizerDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Camel AI: Tokenizer for splitting by sentences.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="langChain4jWordTokenizer" type="tns:langChain4JWordTokenizerDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Camel AI: Tokenizer for splitting by word.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="language" type="tns:languageExpression">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Evaluates a custom language.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="loadBalance" type="tns:loadBalanceDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Balances message processing among a number of nodes
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="loadTransformer" type="tns:loadTransformerDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To load custom transformers from classpath scanning to be used for route level transformations.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="log" type="tns:logDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Used for printing custom messages to the logger.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="loop" type="tns:loopDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Processes a message multiple times
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="lzf" type="tns:lzfDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Compress and decompress streams using LZF deflate algorithm.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="marshal" type="tns:marshalDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Marshals data into a specified format for transmission over a transport or component
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="method" type="tns:methodCallExpression">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Calls a Java bean method.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="mimeMultipart" type="tns:mimeMultipartDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Marshal Camel messages with attachments into MIME-Multipart messages and back.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="multicast" type="tns:multicastDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Routes the same message to multiple paths either sequentially or in parallel.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="mutualTLS" type="tns:mutualTLSDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Rest security mutual TLS authentication definition
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="mvel" type="tns:mvelExpression">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Evaluates a MVEL template.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="noErrorHandler" type="tns:noErrorHandlerDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To not use an error handler.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="oauth2" type="tns:oAuth2Definition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Rest security OAuth2 definition
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="ocsf" type="tns:ocsfDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Marshal and unmarshal OCSF (Open Cybersecurity Schema Framework) security events to/from JSON.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="ognl" type="tns:ognlExpression">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Deprecated: Evaluates an OGNL expression (Apache Commons OGNL).
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="onCompletion" type="tns:onCompletionDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Route to be executed when normal route processing completes
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="onException" type="tns:onExceptionDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Route to be executed when an exception is thrown
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="onFallback" type="tns:onFallbackDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Route to be executed when Circuit Breaker EIP executes fallback
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="onWhen" type="tns:onWhenDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To use a predicate to determine when to trigger this.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="openApi" type="tns:openApiDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To use OpenApi as contract-first with Camel Rest DSL.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="openIdConnect" type="tns:openIdConnectDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Rest security OpenID Connect definition
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="optimisticLockRetryPolicy" type="tns:optimisticLockRetryPolicyDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To configure optimistic locking
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="otherwise" type="tns:otherwiseDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Route to be executed when all other choices evaluate to false
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="outputType" type="tns:outputTypeDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Set the expected data type of the output message. If the actual message type is different at runtime, camel look for a
+required Transformer and apply if exists. If validate attribute is true then camel applies Validator as well. Type name
+consists of two parts, 'scheme' and 'name' connected with ':'. For Java type 'name' is a fully qualified class name. For
+example {code java:java.lang.String} , {code json:ABCOrder} . It's also possible to specify only scheme part, so that it
+works like a wildcard. If only 'xml' is specified, all the XML message matches. It's handy to add only one
+transformer/validator for all the XML-Java transformation.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="packageScan" type="tns:packageScanDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Scans for Java org.apache.camel.builder.RouteBuilder classes in java packages
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="param" type="tns:paramDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To specify the rest operation parameters.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="parquetAvro" type="tns:parquetAvroDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Parquet Avro serialization and de-serialization.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="patch" type="tns:patchDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Rest PATCH command
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="pausable" type="tns:pausableDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Pausable EIP to support resuming processing from last known offset.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="pgp" type="tns:pgpDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Encrypt and decrypt messages using Java Cryptographic Extension (JCE) and PGP.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="pipeline" type="tns:pipelineDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Routes the message to a sequence of processors.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="policy" type="tns:policyDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Defines a policy the route will use
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="poll" type="tns:pollDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Polls a message from a static endpoint
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="pollEnrich" type="tns:pollEnrichDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Enriches messages with data polled from a secondary resource
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="post" type="tns:postDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Rest POST command
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="pqc" type="tns:pqcDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Encrypt and decrypt messages using Post-Quantum Cryptography Key Encapsulation Mechanisms (KEM).
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="predicateValidator" type="tns:predicateValidatorDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To use a predicate to perform validation on the route level.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="process" type="tns:processDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Calls a Camel processor
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="propertiesFunction" type="tns:camelPropertyPlaceholderFunctionDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Function to use with properties placeholder
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="propertiesLocation" type="tns:camelPropertyPlaceholderLocationDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Properties to use with properties placeholder
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="property" type="tns:propertyDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+A key value pair where the value is a literal value
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="propertyExpression" type="tns:propertyExpressionDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+A key value pair where the value is an expression.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="propertyPlaceholder" type="tns:camelPropertyPlaceholderDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Properties placeholder
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="protobuf" type="tns:protobufDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Serialize and deserialize Java objects using Google's Protocol buffers.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="put" type="tns:putDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Rest PUT command
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="python" type="tns:pythonExpression">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Evaluates a Python expression.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="randomLoadBalancer" type="tns:randomLoadBalancerDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+The destination endpoints are selected randomly.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="recipientList" type="tns:recipientListDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Route messages to a number of dynamically specified recipients
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="redeliveryPolicy" type="tns:redeliveryPolicyDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To configure re-delivery for error handling
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="redeliveryPolicyProfile" type="tns:camelRedeliveryPolicyFactoryBean">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Configuration of redelivery policy.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="ref" type="tns:refExpression">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Uses an existing expression from the registry.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="refErrorHandler" type="tns:refErrorHandlerDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+References to an existing or custom error handler.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="removeHeader" type="tns:removeHeaderDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Removes a named header from the message
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="removeHeaders" type="tns:removeHeadersDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Removes message headers whose name matches a specified pattern
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="removeProperties" type="tns:removePropertiesDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Removes message exchange properties whose name matches a specified pattern
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="removeProperty" type="tns:removePropertyDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Removes a named property from the message exchange
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="removeVariable" type="tns:removeVariableDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Removes a named variable
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="resequence" type="tns:resequenceDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Resequences (re-order) messages based on an expression
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="resilience4jConfiguration" type="tns:resilience4JConfigurationDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Resilience4j Circuit Breaker EIP configuration
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="responseHeader" type="tns:responseHeaderDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To specify the rest operation response headers.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="responseMessage" type="tns:responseMessageDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To specify the rest operation response messages.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="rest" type="tns:restDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Defines a rest service using the rest-dsl
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="restBinding" type="tns:restBindingDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To configure rest binding
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="restConfiguration" type="tns:restConfigurationDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To configure rest
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="restContext" type="tns:camelRestContextFactoryBean">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Configuration of REST services using rest-dsl using XML
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="restContextRef" type="tns:restContextRefDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To refer to an XML file with rest services defined using the rest-dsl
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="restProperty" type="tns:restPropertyDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+A key value pair
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="rests" type="tns:restsDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+A series of rest services defined using the rest-dsl
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="resumable" type="tns:resumableDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Resume EIP to support resuming processing from last known offset.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="rollback" type="tns:rollbackDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Forces a rollback by stopping routing the message
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="roundRobinLoadBalancer" type="tns:roundRobinLoadBalancerDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+The destination endpoints are selected in a round-robin fashion. This is a well-known and classic policy, which spreads
+the load evenly.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="route" type="tns:routeDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+A Camel route
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="routeBuilder" type="tns:routeBuilderDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To refer to a Java org.apache.camel.builder.RouteBuilder instance to use.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="routeConfiguration" type="tns:routeConfigurationDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Reusable configuration for Camel route(s).
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="routeConfigurationContext" type="tns:camelRouteConfigurationContextFactoryBean">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Configuration of route configurations using XML
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="routeConfigurationContextRef" type="tns:routeConfigurationContextRefDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To refer to an XML file with route configuration defined using the xml-dsl
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="routeConfigurations" type="tns:routeConfigurationsDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+A series of route configurations
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="routeContext" type="tns:camelRouteContextFactoryBean">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Configuration of routes using XML
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="routeContextRef" type="tns:routeContextRefDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To refer to an XML file with routes defined using the xml-dsl
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="routeController" type="tns:camelRouteControllerDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Route controller configuration.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="routeTemplate" type="tns:routeTemplateDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Defines a route template (parameterized routes)
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="routeTemplateContext" type="tns:camelRouteTemplateContextFactoryBean">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Configuration of route templates using XML
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="routeTemplateContextRef" type="tns:routeTemplateContextRefDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To refer to an XML file with route templates defined using the xml-dsl
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="routeTemplates" type="tns:routeTemplatesDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+A series of route templates
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="routes" type="tns:routesDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+A series of Camel routes
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="routingSlip" type="tns:routingSlipDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Routes a message through a series of steps that are pre-determined (the slip)
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="rss" type="tns:rssDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Transform from ROME SyndFeed Java Objects to XML and vice-versa.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="saga" type="tns:sagaDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Enables Sagas on the route
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="sample" type="tns:samplingDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Extract a sample of the messages passing through a route
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="script" type="tns:scriptDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Executes a script from a language which does not change the message body.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="secureRandomParameters" type="tns:secureRandomParametersFactoryBean">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Cryptographically strong random number generator
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="security" type="tns:securityDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Rest security definition
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="securityDefinitions" type="tns:restSecuritiesDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To configure rest security definitions.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="setBody" type="tns:setBodyDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the contents of the message body
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="setExchangePattern" type="tns:setExchangePatternDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the exchange pattern on the message exchange
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="setHeader" type="tns:setHeaderDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the value of a message header
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="setHeaders" type="tns:setHeadersDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Allows setting multiple headers on the message at the same time.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="setProperty" type="tns:setPropertyDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Sets a named property on the message exchange
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="setVariable" type="tns:setVariableDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the value of a variable
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="setVariables" type="tns:setVariablesDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Allows setting multiple variables at the same time.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="simple" type="tns:simpleExpression">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Evaluates a Camel simple expression.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="smooks" type="tns:smooksDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Transform and bind XML as well as non-XML data, including EDI, CSV, JSON, and YAML using Smooks.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="soap" type="tns:soapDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Marshal Java objects to SOAP messages and back.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="sort" type="tns:sortDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Sorts the contents of the message
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="spel" type="tns:spELExpression">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Evaluates a Spring expression (SpEL).
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="split" type="tns:splitDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Splits a single message into many sub-messages.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="springTransactionErrorHandler" type="tns:springTransactionErrorHandlerDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Spring based transactional error handler (requires camel-spring).
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="sslContextParameters" type="tns:sslContextParametersFactoryBean">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Secure socket protocol configuration
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="step" type="tns:stepDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Routes the message to a sequence of processors which is grouped together as one logical name
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="stickyLoadBalancer" type="tns:stickyLoadBalancerDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Sticky load balancing using an expression to calculate a correlation key to perform the sticky load balancing.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="stop" type="tns:stopDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Stops the processing of the current message
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="streamCaching" type="tns:camelStreamCachingStrategyDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Stream caching configuration.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="streamConfig" type="tns:streamResequencerConfig">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Configures stream-processing resequence eip.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="swiftMt" type="tns:swiftMtDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Encode and decode SWIFT MT messages.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="swiftMx" type="tns:swiftMxDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Encode and decode SWIFT MX messages.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="syslog" type="tns:syslogDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Marshall SyslogMessages to RFC3164 and RFC5424 messages and back.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="tarFile" type="tns:tarFileDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Archive files into tarballs or extract files from tarballs.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="template" type="tns:camelProducerTemplateFactoryBean">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Configures a ProducerTemplate
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="templateParameter" type="tns:routeTemplateParameterDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+A route template parameter
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="templatedRoute" type="tns:templatedRouteDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Defines a templated route (a route built from a route template)
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="templatedRouteParameter" type="tns:templatedRouteParameterDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+An input parameter of a route template.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="templatedRoutes" type="tns:templatedRoutesDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+A series of templated routes
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="threadPool" type="tns:camelThreadPoolFactoryBean">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Configuration of thread pools
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="threadPoolProfile" type="tns:threadPoolProfileDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To configure thread pools
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="threads" type="tns:threadsDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Specifies that all steps after this node are processed asynchronously
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="thrift" type="tns:thriftDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Serialize and deserialize messages using Apache Thrift binary data format.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="throttle" type="tns:throttleDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Controls the rate at which messages are passed to the next node in the route
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="throwException" type="tns:throwExceptionDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Throws an exception
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="to" type="tns:toDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Sends the message to a static endpoint
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="toD" type="tns:toDynamicDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Sends the message to a dynamic endpoint
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="tokenize" type="tns:tokenizerExpression">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Tokenize text payloads using delimiter patterns.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="tokenizer" type="tns:tokenizerDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Represents a Camel tokenizer for AI.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="topicLoadBalancer" type="tns:topicLoadBalancerDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Topic which sends to all destinations.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="transacted" type="tns:transactedDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Enables transaction on the route
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="transform" type="tns:transformDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Transforms the message body based on an expression
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="transformDataType" type="tns:transformDataTypeDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Transforms the message body based on known data type transformers.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="transformers" type="tns:transformersDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To configure transformers.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="univocityCsv" type="tns:uniVocityCsvDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Marshal and unmarshal Java objects from and to CSV (Comma Separated Values) using UniVocity Parsers.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="univocityFixed" type="tns:uniVocityFixedDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Marshal and unmarshal Java objects from and to fixed length records using UniVocity Parsers.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="univocityHeader" type="tns:uniVocityHeader">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To configure headers for UniVocity data formats.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="univocityTsv" type="tns:uniVocityTsvDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Marshal and unmarshal Java objects from and to TSV (Tab-Separated Values) records using UniVocity Parsers.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="unmarshal" type="tns:unmarshalDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Converts the message data received from the wire into a format that Apache Camel processors can consume
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="validate" type="tns:validateDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Validates a message based on an expression
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="validators" type="tns:validatorsDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+To configure validators.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="value" type="tns:valueDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+A single value
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="variable" type="tns:variableExpression">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Gets a variable
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="wasm" type="tns:wasmExpression">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Call a wasm (web assembly) function.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="weightedLoadBalancer" type="tns:weightedLoadBalancerDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Uses a weighted load distribution ratio for each server with respect to others.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="when" type="tns:whenDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Triggers a route when the expression evaluates to true
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="wireTap" type="tns:wireTapDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Routes a copy of a message (or creates a new message) to a secondary destination while continue routing the original
+message.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="xmlSecurity" type="tns:xmlSecurityDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Encrypt and decrypt XML payloads using Apache Santuario.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="xpath" type="tns:xPathExpression">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Evaluates an XPath expression against an XML payload.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="xquery" type="tns:xQueryExpression">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Evaluates an XQuery expressions against an XML payload.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="xtokenize" type="tns:xmlTokenizerExpression">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Tokenize XML payloads.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="yaml" type="tns:yamlDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Marshal and unmarshal Java objects to and from YAML.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="zipDeflater" type="tns:zipDeflaterDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Compress and decompress streams using java.util.zip.Deflater and java.util.zip.Inflater.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:element name="zipFile" type="tns:zipFileDataFormat">
+    <xs:annotation>
+      <xs:documentation xml:lang="en">
+<![CDATA[
+Compression and decompress streams using java.util.zip.ZipStream.
+]]>
+      </xs:documentation>
+    </xs:annotation>
+  </xs:element>
+  <xs:complexType abstract="true" name="abstractCamelConsumerTemplateFactoryBean">
+    <xs:complexContent>
+      <xs:extension base="tns:abstractCamelFactoryBean">
+        <xs:sequence/>
+        <xs:attribute name="maximumCacheSize" type="xs:int">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets a custom maximum cache size to use in the backing cache pools.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType abstract="true" name="abstractCamelFactoryBean">
+    <xs:complexContent>
+      <xs:extension base="tns:identifiedType">
+        <xs:sequence/>
+        <xs:attribute name="camelContextId" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Id of CamelContext to use if there are multiple CamelContexts in the same JVM.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType abstract="true" name="identifiedType">
+    <xs:sequence/>
+    <xs:attribute name="id" type="xs:ID">
+      <xs:annotation>
         <xs:documentation xml:lang="en">
-<![CDATA[
-The id of this node.
-]]>
-        </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-  </xs:complexType>
-  <xs:complexType abstract="true" name="abstractCamelContextFactoryBean">
-    <xs:complexContent>
-      <xs:extension base="tns:identifiedType">
-        <xs:sequence/>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType abstract="true" name="abstractCamelEndpointFactoryBean">
-    <xs:complexContent>
-      <xs:extension base="tns:abstractCamelFactoryBean">
-        <xs:sequence>
-          <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:property"/>
-        </xs:sequence>
-        <xs:attribute name="uri" type="xs:string" use="required">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the URI to use to resolve the endpoint. Notice that additional options can be configured using a series of
-property.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType name="propertyDefinition">
-    <xs:sequence/>
-    <xs:attribute name="key" type="xs:string" use="required">
-      <xs:annotation>
+<![CDATA[
+The id of this node.
+]]>
+        </xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+  </xs:complexType>
+  <xs:complexType abstract="true" name="abstractCamelContextFactoryBean">
+    <xs:complexContent>
+      <xs:extension base="tns:identifiedType">
+        <xs:sequence/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType abstract="true" name="abstractCamelEndpointFactoryBean">
+    <xs:complexContent>
+      <xs:extension base="tns:abstractCamelFactoryBean">
+        <xs:sequence>
+          <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:property"/>
+        </xs:sequence>
+        <xs:attribute name="uri" type="xs:string" use="required">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the URI to use to resolve the endpoint. Notice that additional options can be configured using a series of
+property.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="propertyDefinition">
+    <xs:sequence/>
+    <xs:attribute name="key" type="xs:string" use="required">
+      <xs:annotation>
         <xs:documentation xml:lang="en">
-<![CDATA[
-The name of the property.
-]]>
-        </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="value" type="xs:string" use="required">
-      <xs:annotation>
+<![CDATA[
+The name of the property.
+]]>
+        </xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="value" type="xs:string" use="required">
+      <xs:annotation>
         <xs:documentation xml:lang="en">
-<![CDATA[
-The property value.
-]]>
-        </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-  </xs:complexType>
-  <xs:complexType abstract="true" name="abstractCamelFluentProducerTemplateFactoryBean">
-    <xs:complexContent>
-      <xs:extension base="tns:abstractCamelFactoryBean">
-        <xs:sequence/>
-        <xs:attribute name="defaultEndpoint" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the default endpoint URI used by default for sending message exchanges.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="maximumCacheSize" type="xs:int">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets a custom maximum cache size to use in the backing cache pools.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType abstract="true" name="abstractCamelProducerTemplateFactoryBean">
-    <xs:complexContent>
-      <xs:extension base="tns:abstractCamelFactoryBean">
-        <xs:sequence/>
-        <xs:attribute name="defaultEndpoint" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the default endpoint URI used by default for sending message exchanges.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="maximumCacheSize" type="xs:int">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets a custom maximum cache size to use in the backing cache pools.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType abstract="true" name="abstractCamelRedeliveryPolicyFactoryBean">
-    <xs:complexContent>
-      <xs:extension base="tns:abstractCamelFactoryBean">
-        <xs:sequence/>
-        <xs:attribute name="maximumRedeliveries" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the maximum number of times a message exchange will be redelivered. Setting a negative value will retry forever.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="redeliveryDelay" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the maximum redelivery delay. Use -1 if you wish to have no maximum. Default value: 1000
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="asyncDelayedRedelivery" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets whether asynchronous delayed redelivery is allowed. This is disabled by default. When enabled it allows Camel to
-schedule a future task for delayed redelivery which prevents current thread from blocking while waiting. Exchange which
-is transacted will however always use synchronous delayed redelivery because the transaction must execute in the same
-thread context. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="backOffMultiplier" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the multiplier used to increase the delay between redeliveries if useExponentialBackOff is enabled. Default value:
-2
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="useExponentialBackOff" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Enables/disables exponential backoff using the backOffMultiplier to increase the time between retries. Default value:
-false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="collisionAvoidanceFactor" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the factor used for collision avoidance if enabled via useCollisionAvoidance. Default value: 0.15
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="useCollisionAvoidance" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Enables/disables collision avoidance which adds some randomization to the backoff timings to reduce contention
-probability. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="maximumRedeliveryDelay" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the maximum redelivery delay. Use -1 if you wish to have no maximum. Default value: 60000
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="retriesExhaustedLogLevel" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the logging level to use for log messages when retries have been exhausted. Default value: ERROR
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="retryAttemptedLogLevel" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the logging level to use for log messages when retries are attempted. Default value: DEBUG
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="retryAttemptedLogInterval" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the interval for log messages when retries are attempted. Default value: 0
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="logRetryAttempted" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets whether to log retry attempts. Default value: true
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="logStackTrace" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets whether stack traces should be logged or not. Default value: true
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="logRetryStackTrace" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets whether stack traces should be logged or not. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="logHandled" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets whether errors should be logged even if its handled. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="logNewException" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets whether errors should be logged when a new exception occurred during handling a previous exception. Default value:
-true
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="logContinued" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets whether errors should be logged even if its continued. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="logExhausted" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets whether exhausted exceptions should be logged or not. Default value: true
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="logExhaustedMessageHistory" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets whether to log exhausted errors including message history. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="logExhaustedMessageBody" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets whether exhausted message body/headers should be logged with message history included. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="disableRedelivery" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Disables redelivery by setting maximum redeliveries to 0. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="delayPattern" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets an optional delay pattern to use instead of fixed delay.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="allowRedeliveryWhileStopping" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Controls whether to allow redelivery while stopping/shutting down a route that uses error handling. Default value: true
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="exchangeFormatterRef" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the reference of the instance of org.apache.camel.spi.ExchangeFormatter to generate the log message from exchange.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType abstract="true" name="abstractCamelThreadPoolFactoryBean">
-    <xs:complexContent>
-      <xs:extension base="tns:abstractCamelFactoryBean">
-        <xs:sequence/>
-        <xs:attribute name="poolSize" type="xs:string" use="required">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the core pool size (threads to keep minimum in pool).
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="maxPoolSize" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the maximum pool size.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="keepAliveTime" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the keep alive time for inactive threads.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="timeUnit" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the time unit used for keep alive time. Default value: SECONDS
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="maxQueueSize" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the maximum number of tasks in the work queue. Use -1 for an unbounded queue.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="allowCoreThreadTimeOut" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets whether to allow core threads to timeout. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="rejectedPolicy" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the handler for tasks which cannot be executed by the thread pool. Default value: CallerRuns
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="threadName" type="xs:string" use="required">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-To use a custom thread name / pattern.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="scheduled" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Whether to use a scheduled thread pool. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType name="camelJMXAgentDefinition">
-    <xs:complexContent>
-      <xs:extension base="tns:identifiedType">
-        <xs:sequence/>
-        <xs:attribute name="disabled" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Disable JMI (default false). Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="onlyRegisterProcessorWithCustomId" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Only register processor if a custom id was defined for it. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="mbeanServerDefaultDomain" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-MBean server default domain name (default org.apache.camel). Default value: org.apache.camel
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="mbeanObjectDomainName" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-MBean object domain name (default org.apache.camel). Default value: org.apache.camel
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="usePlatformMBeanServer" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-A flag that indicates whether the platform mbean server should be used. Default value: true
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="registerAlways" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-A flag that indicates whether to register mbeans always. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="registerNewRoutes" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-A flag that indicates whether to register mbeans when starting new routes. Default value: true
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="statisticsLevel" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Level of granularity for performance statistics enabled. Default value: Default
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="mbeansLevel" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the mbeans registration level. The default value is Default. Default value: Default
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="loadStatisticsEnabled" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-A flag that indicates whether Load statistics is enabled. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="endpointRuntimeStatisticsEnabled" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-A flag that indicates whether endpoint runtime statistics is enabled. Default value: true
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="includeHostName" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-A flag that indicates whether to include hostname in JMX MBean names. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="useHostIPAddress" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-A flag that indicates whether to use hostname or IP Address in the service url. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="mask" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-A flag that indicates whether to remove detected sensitive information (such as passwords) from MBean names and
-attributes. Default value: true
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="updateRouteEnabled" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets whether updating routes via JMX is allowed (is default disabled). Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType name="camelPropertyPlaceholderDefinition">
-    <xs:complexContent>
-      <xs:extension base="tns:identifiedType">
-        <xs:sequence>
-          <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:propertiesFunction"/>
-          <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:propertiesLocation"/>
-        </xs:sequence>
-        <xs:attribute name="location" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-A list of locations to load properties. You can use comma to separate multiple locations. This option will override any
-default locations and only use the locations from this option.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="encoding" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Encoding to use when loading properties file from the file system or classpath. If no encoding has been set, then the
-properties files is loaded using ISO-8859-1 encoding (latin-1) as documented by
-java.util.Properties#load(java.io.InputStream).
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="ignoreMissingLocation" type="xs:boolean">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Whether to silently ignore if a location cannot be located, such as a properties file not found. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="nestedPlaceholder" type="xs:boolean">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Whether to support nested property placeholders. A nested placeholder, means that a placeholder, has also a placeholder,
-that should be resolved (recursively). Default value: true
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="propertiesParserRef" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Reference to a custom PropertiesParser to be used.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="defaultFallbackEnabled" type="xs:boolean">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-If false, the component does not attempt to find a default for the key by looking after the colon separator. Default
-value: true
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType name="camelPropertyPlaceholderFunctionDefinition">
-    <xs:complexContent>
-      <xs:extension base="tns:identifiedType">
-        <xs:sequence/>
-        <xs:attribute name="ref" type="xs:string" use="required">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Reference to the custom properties function to lookup in the registry.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType name="camelPropertyPlaceholderLocationDefinition">
-    <xs:complexContent>
-      <xs:extension base="tns:identifiedType">
-        <xs:sequence/>
-        <xs:attribute name="resolver" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-The resolver to use to locate the location. Default value: classpath
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="path" type="xs:string" use="required">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Property locations to use.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="optional" type="xs:boolean">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-If the location is optional. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType name="camelRouteControllerDefinition">
-    <xs:complexContent>
-      <xs:extension base="tns:identifiedType">
-        <xs:sequence/>
-        <xs:attribute name="supervising" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-To enable using supervising route controller which allows Camel to start up and then, the controller takes care of
-starting the routes in a safe manner. This can be used when you want to start up Camel despite a route may otherwise
-fail fast during startup and cause Camel to fail to start up as well. By delegating the route startup to the supervising
-route controller then its manages the startup using a background thread. The controller allows to be configured with
-various settings to attempt to restart failing routes. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="includeRoutes" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Pattern for filtering routes to be included as supervised. The pattern is matching on route id, and endpoint uri for the
-route. Multiple patterns can be separated by comma. For example to include all kafka routes, you can say kafka:. And to
-include routes with specific route ids myRoute,myOtherRoute. The pattern supports wildcards and uses the matcher from
-org.apache.camel.support.PatternHelper#matchPattern.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="excludeRoutes" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Pattern for filtering routes to be excluded as supervised. The pattern is matching on route id, and endpoint uri for the
-route. Multiple patterns can be separated by comma. For example to exclude all JMS routes, you can say jms:. And to
-exclude routes with specific route ids mySpecialRoute,myOtherSpecialRoute. The pattern supports wildcards and uses the
-matcher from org.apache.camel.support.PatternHelper#matchPattern.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="threadPoolSize" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-The number of threads used by the scheduled thread pool that are used for restarting routes. The pool uses 1 thread by
-default, but you can increase this to allow the controller to concurrently attempt to restart multiple routes in case
-more than one route has problems starting. Default value: 1
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="initialDelay" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Initial delay in milli seconds before the route controller starts, after CamelContext has been started.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="backOffDelay" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Backoff delay in millis when restarting a route that failed to startup. Default value: 2000
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="backOffMaxDelay" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Backoff maximum delay in millis when restarting a route that failed to startup.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="backOffMaxElapsedTime" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Backoff maximum elapsed time in millis, after which the backoff should be considered exhausted and no more attempts
-should be made.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="backOffMaxAttempts" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Backoff maximum number of attempts to restart a route that failed to startup. When this threshold has been exceeded then
-the controller will give up attempting to restart the route, and the route will remain as stopped.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="backOffMultiplier" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Backoff multiplier to use for exponential backoff. This is used to extend the delay between restart attempts. Default
-value: 1.0
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="unhealthyOnExhausted" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Whether to mark the route as unhealthy (down) when all restarting attempts (backoff) have failed and the route is not
-successfully started and the route manager is giving up. Setting this to true allows health checks to know about this
-and can report the Camel application as DOWN. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="unhealthyOnRestarting" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Whether to mark the route as unhealthy (down) when the route failed to initially start, and is being controlled for
-restarting (backoff). Setting this to true allows health checks to know about this and can report the Camel application
-as DOWN. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="loggingLevel" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the logging level used for logging route activity (such as starting and stopping routes). The default logging level
-is DEBUG. Default value: DEBUG
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType name="camelStreamCachingStrategyDefinition">
-    <xs:complexContent>
-      <xs:extension base="tns:identifiedType">
-        <xs:sequence/>
-        <xs:attribute name="enabled" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets whether stream caching is enabled or not. While stream types (like StreamSource, InputStream and Reader) are
-commonly used in messaging for performance reasons, they also have an important drawback: they can only be read once. In
-order to be able to work with message content multiple times, the stream needs to be cached. Streams are cached in
-memory only (by default). If streamCachingSpoolEnabled=true, then, for large stream messages (over 128 KB by default)
-will be cached in a temporary file instead, and Camel will handle deleting the temporary file once the cached stream is
-no longer necessary. Default is true. Default value: true
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="spoolEnabled" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-To enable stream caching spooling to disk. This means, for large stream messages (over 128 KB by default) will be cached
-in a temporary file instead, and Camel will handle deleting the temporary file once the cached stream is no longer
-necessary. Default is false. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="allowClasses" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-To filter stream caching of a given set of allowed/denied classes. By default, all classes that are java.io.InputStream
-is allowed. Multiple class names can be separated by comma.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="denyClasses" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-To filter stream caching of a given set of allowed/denied classes. By default, all classes that are java.io.InputStream
-is allowed. Multiple class names can be separated by comma.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="spoolDirectory" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the spool (temporary) directory to use for overflow and spooling to disk. If no spool directory has been explicit
-configured, then a temporary directory is created in the java.io.tmpdir directory.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="spoolCipher" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets a cipher name to use when spooling to disk to write with encryption. By default the data is not encrypted.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="spoolThreshold" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Threshold in bytes when overflow to disk is activated. The default threshold is
-org.apache.camel.StreamCache#DEFAULT_SPOOL_THRESHOLD bytes (eg 128kb). Use -1 to disable overflow to disk. Default
-value: 131072
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="spoolUsedHeapMemoryThreshold" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets a percentage (1-99) of used heap memory threshold to activate spooling to disk.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="spoolUsedHeapMemoryLimit" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets what the upper bounds should be when spoolUsedHeapMemoryThreshold is in use.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="spoolRules" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Reference to one or more custom org.apache.camel.spi.StreamCachingStrategy.SpoolRule to use. Multiple rules can be
-separated by comma.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="bufferSize" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the buffer size to use when allocating in-memory buffers used for in-memory stream caches. The default size is
-org.apache.camel.util.IOHelper#DEFAULT_BUFFER_SIZE. Default value: 16384
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="removeSpoolDirectoryWhenStopping" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Whether to remove the temporary directory when stopping. This option is default true. Default value: true
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="statisticsEnabled" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets whether statistics is enabled. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="anySpoolRules" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets whether if just any of the org.apache.camel.spi.StreamCachingStrategy.SpoolRule rules returns true then
-shouldSpoolCache(long) returns true. If this option is false, then all the
-org.apache.camel.spi.StreamCachingStrategy.SpoolRule must return true. The default value is false which means that all
-the rules must return true. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType name="patternBasedPackageScanFilter">
-    <xs:sequence/>
-  </xs:complexType>
-  <xs:complexType abstract="true" name="abstractJsseUtilFactoryBean">
-    <xs:complexContent>
-      <xs:extension base="tns:abstractCamelFactoryBean">
-        <xs:sequence/>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType abstract="true" name="abstractKeyManagersParametersFactoryBean">
-    <xs:complexContent>
-      <xs:extension base="tns:abstractJsseUtilFactoryBean">
-        <xs:sequence/>
-        <xs:attribute name="keyPassword" type="xs:string"/>
-        <xs:attribute name="provider" type="xs:string"/>
-        <xs:attribute name="algorithm" type="xs:string"/>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType abstract="true" name="abstractKeyStoreParametersFactoryBean">
-    <xs:complexContent>
-      <xs:extension base="tns:abstractJsseUtilFactoryBean">
-        <xs:sequence/>
-        <xs:attribute name="resource" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-The keystore to load. The keystore is by default loaded from classpath. If you must load from file system, then use
-file: as prefix. file:nameOfFile (to refer to the file system) classpath:nameOfFile (to refer to the classpath; default)
-http:uri (to load the resource using HTTP) ref:nameOfBean (to lookup an existing KeyStore instance from the registry,
-for example for testing and development).
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="password" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-The password for reading/opening/verifying the key store.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="type" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-The type of the key store to create and load. See
-https://docs.oracle.com/en/java/javase/17/docs/specs/security/standard-names.html.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="provider" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-The provider identifier for instantiating the key store.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="keyStore" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-To lookup an existing KeyStore instance from the registry, for example for testing and development.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType abstract="true" name="abstractSecureRandomParametersFactoryBean">
-    <xs:complexContent>
-      <xs:extension base="tns:abstractJsseUtilFactoryBean">
-        <xs:sequence/>
-        <xs:attribute name="algorithm" type="xs:string" use="required">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-The Random Number Generator algorithm identifier for the SecureRandom factory method used to create the SecureRandom
-represented by this object's configuration. See
-https://docs.oracle.com/en/java/javase/17/docs/specs/security/standard-names.html.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="provider" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-The provider identifier for the SecureRandom factory method used to create the SecureRandom represented by this object's
-configuration.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType abstract="true" name="abstractTrustManagersParametersFactoryBean">
-    <xs:complexContent>
-      <xs:extension base="tns:abstractJsseUtilFactoryBean">
-        <xs:sequence/>
-        <xs:attribute name="provider" type="xs:string"/>
-        <xs:attribute name="algorithm" type="xs:string"/>
-        <xs:attribute name="trustManager" type="xs:string"/>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType name="cipherSuitesParameters">
-    <xs:sequence>
-      <xs:element maxOccurs="unbounded" minOccurs="0" name="cipherSuite" nillable="true" type="xs:string"/>
-    </xs:sequence>
-  </xs:complexType>
-  <xs:complexType name="filterParameters">
-    <xs:sequence>
-      <xs:element maxOccurs="unbounded" minOccurs="0" name="include" nillable="true" type="xs:string"/>
-      <xs:element maxOccurs="unbounded" minOccurs="0" name="exclude" nillable="true" type="xs:string"/>
-    </xs:sequence>
-  </xs:complexType>
-  <xs:complexType name="namedGroupsParameters">
-    <xs:sequence>
-      <xs:element maxOccurs="unbounded" minOccurs="0" name="namedGroup" nillable="true" type="xs:string"/>
-    </xs:sequence>
-  </xs:complexType>
-  <xs:complexType name="sniHostNames">
-    <xs:sequence>
-      <xs:element maxOccurs="unbounded" minOccurs="0" name="sniHostName" type="xs:string"/>
-    </xs:sequence>
-  </xs:complexType>
-  <xs:complexType name="secureSocketProtocolsParameters">
-    <xs:sequence>
-      <xs:element maxOccurs="unbounded" minOccurs="0" name="secureSocketProtocol" nillable="true" type="xs:string"/>
-    </xs:sequence>
-  </xs:complexType>
-  <xs:complexType name="signatureSchemesParameters">
-    <xs:sequence>
-      <xs:element maxOccurs="unbounded" minOccurs="0" name="signatureScheme" nillable="true" type="xs:string"/>
-    </xs:sequence>
-  </xs:complexType>
-  <xs:complexType name="output">
-    <xs:complexContent>
-      <xs:extension base="tns:processorDefinition">
-        <xs:sequence/>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType abstract="true" name="processorDefinition">
-    <xs:complexContent>
-      <xs:extension base="tns:optionalIdentifiedDefinition">
-        <xs:sequence/>
-        <xs:attribute name="disabled" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Disables this EIP from the route. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType abstract="true" name="optionalIdentifiedDefinition">
-    <xs:sequence/>
-    <xs:attribute name="customId" type="xs:boolean"/>
-    <xs:attribute name="description" type="xs:string">
-      <xs:annotation>
+<![CDATA[
+The property value.
+]]>
+        </xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+  </xs:complexType>
+  <xs:complexType abstract="true" name="abstractCamelFluentProducerTemplateFactoryBean">
+    <xs:complexContent>
+      <xs:extension base="tns:abstractCamelFactoryBean">
+        <xs:sequence/>
+        <xs:attribute name="defaultEndpoint" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the default endpoint URI used by default for sending message exchanges.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="maximumCacheSize" type="xs:int">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets a custom maximum cache size to use in the backing cache pools.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType abstract="true" name="abstractCamelProducerTemplateFactoryBean">
+    <xs:complexContent>
+      <xs:extension base="tns:abstractCamelFactoryBean">
+        <xs:sequence/>
+        <xs:attribute name="defaultEndpoint" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the default endpoint URI used by default for sending message exchanges.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="maximumCacheSize" type="xs:int">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets a custom maximum cache size to use in the backing cache pools.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType abstract="true" name="abstractCamelRedeliveryPolicyFactoryBean">
+    <xs:complexContent>
+      <xs:extension base="tns:abstractCamelFactoryBean">
+        <xs:sequence/>
+        <xs:attribute name="maximumRedeliveries" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the maximum number of times a message exchange will be redelivered. Setting a negative value will retry forever.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="redeliveryDelay" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the maximum redelivery delay. Use -1 if you wish to have no maximum. Default value: 1000
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="asyncDelayedRedelivery" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets whether asynchronous delayed redelivery is allowed. This is disabled by default. When enabled it allows Camel to
+schedule a future task for delayed redelivery which prevents current thread from blocking while waiting. Exchange which
+is transacted will however always use synchronous delayed redelivery because the transaction must execute in the same
+thread context. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="backOffMultiplier" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the multiplier used to increase the delay between redeliveries if useExponentialBackOff is enabled. Default value:
+2
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="useExponentialBackOff" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Enables/disables exponential backoff using the backOffMultiplier to increase the time between retries. Default value:
+false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="collisionAvoidanceFactor" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the factor used for collision avoidance if enabled via useCollisionAvoidance. Default value: 0.15
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="useCollisionAvoidance" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Enables/disables collision avoidance which adds some randomization to the backoff timings to reduce contention
+probability. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="maximumRedeliveryDelay" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the maximum redelivery delay. Use -1 if you wish to have no maximum. Default value: 60000
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="retriesExhaustedLogLevel" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the logging level to use for log messages when retries have been exhausted. Default value: ERROR
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="retryAttemptedLogLevel" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the logging level to use for log messages when retries are attempted. Default value: DEBUG
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="retryAttemptedLogInterval" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the interval for log messages when retries are attempted. Default value: 0
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="logRetryAttempted" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets whether to log retry attempts. Default value: true
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="logStackTrace" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets whether stack traces should be logged or not. Default value: true
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="logRetryStackTrace" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets whether stack traces should be logged or not. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="logHandled" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets whether errors should be logged even if its handled. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="logNewException" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets whether errors should be logged when a new exception occurred during handling a previous exception. Default value:
+true
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="logContinued" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets whether errors should be logged even if its continued. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="logExhausted" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets whether exhausted exceptions should be logged or not. Default value: true
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="logExhaustedMessageHistory" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets whether to log exhausted errors including message history. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="logExhaustedMessageBody" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets whether exhausted message body/headers should be logged with message history included. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="disableRedelivery" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Disables redelivery by setting maximum redeliveries to 0. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="delayPattern" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets an optional delay pattern to use instead of fixed delay.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="allowRedeliveryWhileStopping" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Controls whether to allow redelivery while stopping/shutting down a route that uses error handling. Default value: true
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="exchangeFormatterRef" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the reference of the instance of org.apache.camel.spi.ExchangeFormatter to generate the log message from exchange.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType abstract="true" name="abstractCamelThreadPoolFactoryBean">
+    <xs:complexContent>
+      <xs:extension base="tns:abstractCamelFactoryBean">
+        <xs:sequence/>
+        <xs:attribute name="poolSize" type="xs:string" use="required">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the core pool size (threads to keep minimum in pool).
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="maxPoolSize" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the maximum pool size.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="keepAliveTime" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the keep alive time for inactive threads.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="timeUnit" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the time unit used for keep alive time. Default value: SECONDS
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="maxQueueSize" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the maximum number of tasks in the work queue. Use -1 for an unbounded queue.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="allowCoreThreadTimeOut" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets whether to allow core threads to timeout. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="rejectedPolicy" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the handler for tasks which cannot be executed by the thread pool. Default value: CallerRuns
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="threadName" type="xs:string" use="required">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+To use a custom thread name / pattern.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="scheduled" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Whether to use a scheduled thread pool. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="camelJMXAgentDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:identifiedType">
+        <xs:sequence/>
+        <xs:attribute name="disabled" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Disable JMI (default false). Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="onlyRegisterProcessorWithCustomId" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Only register processor if a custom id was defined for it. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="mbeanServerDefaultDomain" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+MBean server default domain name (default org.apache.camel). Default value: org.apache.camel
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="mbeanObjectDomainName" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+MBean object domain name (default org.apache.camel). Default value: org.apache.camel
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="usePlatformMBeanServer" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+A flag that indicates whether the platform mbean server should be used. Default value: true
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="registerAlways" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+A flag that indicates whether to register mbeans always. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="registerNewRoutes" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+A flag that indicates whether to register mbeans when starting new routes. Default value: true
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="statisticsLevel" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Level of granularity for performance statistics enabled. Default value: Default
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="mbeansLevel" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the mbeans registration level. The default value is Default. Default value: Default
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="loadStatisticsEnabled" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+A flag that indicates whether Load statistics is enabled. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="endpointRuntimeStatisticsEnabled" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+A flag that indicates whether endpoint runtime statistics is enabled. Default value: true
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="includeHostName" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+A flag that indicates whether to include hostname in JMX MBean names. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="useHostIPAddress" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+A flag that indicates whether to use hostname or IP Address in the service url. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="mask" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+A flag that indicates whether to remove detected sensitive information (such as passwords) from MBean names and
+attributes. Default value: true
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="updateRouteEnabled" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets whether updating routes via JMX is allowed (is default disabled). Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="camelPropertyPlaceholderDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:identifiedType">
+        <xs:sequence>
+          <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:propertiesFunction"/>
+          <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:propertiesLocation"/>
+        </xs:sequence>
+        <xs:attribute name="location" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+A list of locations to load properties. You can use comma to separate multiple locations. This option will override any
+default locations and only use the locations from this option.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="encoding" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Encoding to use when loading properties file from the file system or classpath. If no encoding has been set, then the
+properties files is loaded using ISO-8859-1 encoding (latin-1) as documented by
+java.util.Properties#load(java.io.InputStream).
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="ignoreMissingLocation" type="xs:boolean">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Whether to silently ignore if a location cannot be located, such as a properties file not found. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="nestedPlaceholder" type="xs:boolean">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Whether to support nested property placeholders. A nested placeholder, means that a placeholder, has also a placeholder,
+that should be resolved (recursively). Default value: true
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="propertiesParserRef" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Reference to a custom PropertiesParser to be used.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="defaultFallbackEnabled" type="xs:boolean">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+If false, the component does not attempt to find a default for the key by looking after the colon separator. Default
+value: true
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="camelPropertyPlaceholderFunctionDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:identifiedType">
+        <xs:sequence/>
+        <xs:attribute name="ref" type="xs:string" use="required">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Reference to the custom properties function to lookup in the registry.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="camelPropertyPlaceholderLocationDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:identifiedType">
+        <xs:sequence/>
+        <xs:attribute name="resolver" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+The resolver to use to locate the location. Default value: classpath
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="path" type="xs:string" use="required">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Property locations to use.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="optional" type="xs:boolean">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+If the location is optional. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="camelRouteControllerDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:identifiedType">
+        <xs:sequence/>
+        <xs:attribute name="supervising" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+To enable using supervising route controller which allows Camel to start up and then, the controller takes care of
+starting the routes in a safe manner. This can be used when you want to start up Camel despite a route may otherwise
+fail fast during startup and cause Camel to fail to start up as well. By delegating the route startup to the supervising
+route controller then its manages the startup using a background thread. The controller allows to be configured with
+various settings to attempt to restart failing routes. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="includeRoutes" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Pattern for filtering routes to be included as supervised. The pattern is matching on route id, and endpoint uri for the
+route. Multiple patterns can be separated by comma. For example to include all kafka routes, you can say kafka:. And to
+include routes with specific route ids myRoute,myOtherRoute. The pattern supports wildcards and uses the matcher from
+org.apache.camel.support.PatternHelper#matchPattern.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="excludeRoutes" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Pattern for filtering routes to be excluded as supervised. The pattern is matching on route id, and endpoint uri for the
+route. Multiple patterns can be separated by comma. For example to exclude all JMS routes, you can say jms:. And to
+exclude routes with specific route ids mySpecialRoute,myOtherSpecialRoute. The pattern supports wildcards and uses the
+matcher from org.apache.camel.support.PatternHelper#matchPattern.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="threadPoolSize" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+The number of threads used by the scheduled thread pool that are used for restarting routes. The pool uses 1 thread by
+default, but you can increase this to allow the controller to concurrently attempt to restart multiple routes in case
+more than one route has problems starting. Default value: 1
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="initialDelay" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Initial delay in milli seconds before the route controller starts, after CamelContext has been started.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="backOffDelay" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Backoff delay in millis when restarting a route that failed to startup. Default value: 2000
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="backOffMaxDelay" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Backoff maximum delay in millis when restarting a route that failed to startup.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="backOffMaxElapsedTime" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Backoff maximum elapsed time in millis, after which the backoff should be considered exhausted and no more attempts
+should be made.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="backOffMaxAttempts" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Backoff maximum number of attempts to restart a route that failed to startup. When this threshold has been exceeded then
+the controller will give up attempting to restart the route, and the route will remain as stopped.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="backOffMultiplier" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Backoff multiplier to use for exponential backoff. This is used to extend the delay between restart attempts. Default
+value: 1.0
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="unhealthyOnExhausted" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Whether to mark the route as unhealthy (down) when all restarting attempts (backoff) have failed and the route is not
+successfully started and the route manager is giving up. Setting this to true allows health checks to know about this
+and can report the Camel application as DOWN. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="unhealthyOnRestarting" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Whether to mark the route as unhealthy (down) when the route failed to initially start, and is being controlled for
+restarting (backoff). Setting this to true allows health checks to know about this and can report the Camel application
+as DOWN. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="loggingLevel" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the logging level used for logging route activity (such as starting and stopping routes). The default logging level
+is DEBUG. Default value: DEBUG
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="camelStreamCachingStrategyDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:identifiedType">
+        <xs:sequence/>
+        <xs:attribute name="enabled" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets whether stream caching is enabled or not. While stream types (like StreamSource, InputStream and Reader) are
+commonly used in messaging for performance reasons, they also have an important drawback: they can only be read once. In
+order to be able to work with message content multiple times, the stream needs to be cached. Streams are cached in
+memory only (by default). If streamCachingSpoolEnabled=true, then, for large stream messages (over 128 KB by default)
+will be cached in a temporary file instead, and Camel will handle deleting the temporary file once the cached stream is
+no longer necessary. Default is true. Default value: true
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="spoolEnabled" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+To enable stream caching spooling to disk. This means, for large stream messages (over 128 KB by default) will be cached
+in a temporary file instead, and Camel will handle deleting the temporary file once the cached stream is no longer
+necessary. Default is false. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="allowClasses" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+To filter stream caching of a given set of allowed/denied classes. By default, all classes that are java.io.InputStream
+is allowed. Multiple class names can be separated by comma.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="denyClasses" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+To filter stream caching of a given set of allowed/denied classes. By default, all classes that are java.io.InputStream
+is allowed. Multiple class names can be separated by comma.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="spoolDirectory" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the spool (temporary) directory to use for overflow and spooling to disk. If no spool directory has been explicit
+configured, then a temporary directory is created in the java.io.tmpdir directory.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="spoolCipher" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets a cipher name to use when spooling to disk to write with encryption. By default the data is not encrypted.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="spoolThreshold" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Threshold in bytes when overflow to disk is activated. The default threshold is
+org.apache.camel.StreamCache#DEFAULT_SPOOL_THRESHOLD bytes (eg 128kb). Use -1 to disable overflow to disk. Default
+value: 131072
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="spoolUsedHeapMemoryThreshold" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets a percentage (1-99) of used heap memory threshold to activate spooling to disk.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="spoolUsedHeapMemoryLimit" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets what the upper bounds should be when spoolUsedHeapMemoryThreshold is in use.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="spoolRules" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Reference to one or more custom org.apache.camel.spi.StreamCachingStrategy.SpoolRule to use. Multiple rules can be
+separated by comma.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="bufferSize" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the buffer size to use when allocating in-memory buffers used for in-memory stream caches. The default size is
+org.apache.camel.util.IOHelper#DEFAULT_BUFFER_SIZE. Default value: 16384
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="removeSpoolDirectoryWhenStopping" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Whether to remove the temporary directory when stopping. This option is default true. Default value: true
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="statisticsEnabled" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets whether statistics is enabled. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="anySpoolRules" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets whether if just any of the org.apache.camel.spi.StreamCachingStrategy.SpoolRule rules returns true then
+shouldSpoolCache(long) returns true. If this option is false, then all the
+org.apache.camel.spi.StreamCachingStrategy.SpoolRule must return true. The default value is false which means that all
+the rules must return true. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="patternBasedPackageScanFilter">
+    <xs:sequence/>
+  </xs:complexType>
+  <xs:complexType abstract="true" name="abstractJsseUtilFactoryBean">
+    <xs:complexContent>
+      <xs:extension base="tns:abstractCamelFactoryBean">
+        <xs:sequence/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType abstract="true" name="abstractKeyManagersParametersFactoryBean">
+    <xs:complexContent>
+      <xs:extension base="tns:abstractJsseUtilFactoryBean">
+        <xs:sequence/>
+        <xs:attribute name="keyPassword" type="xs:string"/>
+        <xs:attribute name="provider" type="xs:string"/>
+        <xs:attribute name="algorithm" type="xs:string"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType abstract="true" name="abstractKeyStoreParametersFactoryBean">
+    <xs:complexContent>
+      <xs:extension base="tns:abstractJsseUtilFactoryBean">
+        <xs:sequence/>
+        <xs:attribute name="resource" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+The keystore to load. The keystore is by default loaded from classpath. If you must load from file system, then use
+file: as prefix. file:nameOfFile (to refer to the file system) classpath:nameOfFile (to refer to the classpath; default)
+http:uri (to load the resource using HTTP) ref:nameOfBean (to lookup an existing KeyStore instance from the registry,
+for example for testing and development).
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="password" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+The password for reading/opening/verifying the key store.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="type" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+The type of the key store to create and load. See
+https://docs.oracle.com/en/java/javase/17/docs/specs/security/standard-names.html.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="provider" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+The provider identifier for instantiating the key store.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="keyStore" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+To lookup an existing KeyStore instance from the registry, for example for testing and development.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType abstract="true" name="abstractSecureRandomParametersFactoryBean">
+    <xs:complexContent>
+      <xs:extension base="tns:abstractJsseUtilFactoryBean">
+        <xs:sequence/>
+        <xs:attribute name="algorithm" type="xs:string" use="required">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+The Random Number Generator algorithm identifier for the SecureRandom factory method used to create the SecureRandom
+represented by this object's configuration. See
+https://docs.oracle.com/en/java/javase/17/docs/specs/security/standard-names.html.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="provider" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+The provider identifier for the SecureRandom factory method used to create the SecureRandom represented by this object's
+configuration.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType abstract="true" name="abstractTrustManagersParametersFactoryBean">
+    <xs:complexContent>
+      <xs:extension base="tns:abstractJsseUtilFactoryBean">
+        <xs:sequence/>
+        <xs:attribute name="provider" type="xs:string"/>
+        <xs:attribute name="algorithm" type="xs:string"/>
+        <xs:attribute name="trustManager" type="xs:string"/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="cipherSuitesParameters">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="cipherSuite" nillable="true" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="filterParameters">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="include" nillable="true" type="xs:string"/>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="exclude" nillable="true" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="namedGroupsParameters">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="namedGroup" nillable="true" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="sniHostNames">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="sniHostName" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="secureSocketProtocolsParameters">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="secureSocketProtocol" nillable="true" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="signatureSchemesParameters">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="signatureScheme" nillable="true" type="xs:string"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="output">
+    <xs:complexContent>
+      <xs:extension base="tns:processorDefinition">
+        <xs:sequence/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType abstract="true" name="processorDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:optionalIdentifiedDefinition">
+        <xs:sequence/>
+        <xs:attribute name="disabled" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Disables this EIP from the route. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType abstract="true" name="optionalIdentifiedDefinition">
+    <xs:sequence/>
+    <xs:attribute name="customId" type="xs:boolean"/>
+    <xs:attribute name="description" type="xs:string">
+      <xs:annotation>
         <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the description of this node.
-]]>
-        </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="id" type="xs:string">
-      <xs:annotation>
+<![CDATA[
+Sets the description of this node.
+]]>
+        </xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="id" type="xs:string">
+      <xs:annotation>
         <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the id of this node.
-]]>
-        </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="note" type="xs:string">
-      <xs:annotation>
+<![CDATA[
+Sets the id of this node.
+]]>
+        </xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="note" type="xs:string">
+      <xs:annotation>
         <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the note of this node.
-]]>
-        </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-  </xs:complexType>
-  <xs:complexType name="aggregateDefinition">
-    <xs:complexContent>
-      <xs:extension base="tns:output">
-        <xs:sequence>
-          <xs:element name="correlationExpression" type="tns:expressionSubElementDefinition">
-            <xs:annotation>
+<![CDATA[
+Sets the note of this node.
+]]>
+        </xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+  </xs:complexType>
+  <xs:complexType name="aggregateDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:output">
+        <xs:sequence>
+          <xs:element name="correlationExpression" type="tns:expressionSubElementDefinition">
+            <xs:annotation>
               <xs:documentation xml:lang="en">
-<![CDATA[
-The expression used to calculate the correlation key to use for aggregation. The Exchange which has the same correlation
-key is aggregated together. If the correlation key could not be evaluated an Exception is thrown. You can disable this
-by using the ignoreBadCorrelationKeys option.
-]]>
-              </xs:documentation>
-            </xs:annotation>
-          </xs:element>
-          <xs:element minOccurs="0" name="completionPredicate" type="tns:expressionSubElementDefinition">
-            <xs:annotation>
+<![CDATA[
+The expression used to calculate the correlation key to use for aggregation. The Exchange which has the same correlation
+key is aggregated together. If the correlation key could not be evaluated an Exception is thrown. You can disable this
+by using the ignoreBadCorrelationKeys option.
+]]>
+              </xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element minOccurs="0" name="completionPredicate" type="tns:expressionSubElementDefinition">
+            <xs:annotation>
               <xs:documentation xml:lang="en">
-<![CDATA[
-A Predicate to indicate when an aggregated exchange is complete. If this is not specified and the AggregationStrategy
-object implements Predicate, the aggregationStrategy object will be used as the completionPredicate.
-]]>
-              </xs:documentation>
-            </xs:annotation>
-          </xs:element>
-          <xs:element minOccurs="0" name="completionTimeoutExpression" type="tns:expressionSubElementDefinition">
-            <xs:annotation>
+<![CDATA[
+A Predicate to indicate when an aggregated exchange is complete. If this is not specified and the AggregationStrategy
+object implements Predicate, the aggregationStrategy object will be used as the completionPredicate.
+]]>
+              </xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element minOccurs="0" name="completionTimeoutExpression" type="tns:expressionSubElementDefinition">
+            <xs:annotation>
               <xs:documentation xml:lang="en">
-<![CDATA[
-Time in millis that an aggregated exchange should be inactive before its complete (timeout). This option can be set as
-either a fixed value or using an Expression which allows you to evaluate a timeout dynamically - will use Long as
-result. If both are set Camel will fallback to use the fixed value if the Expression result was null or 0. You cannot
-use this option together with completionInterval, only one of the two can be used. By default the timeout checker runs
-every second, you can use the completionTimeoutCheckerInterval option to configure how frequently to run the checker.
-The timeout is an approximation and there is no guarantee that the a timeout is triggered exactly after the timeout
-value. It is not recommended to use very low timeout values or checker intervals.
-]]>
-              </xs:documentation>
-            </xs:annotation>
-          </xs:element>
-          <xs:element minOccurs="0" name="completionSizeExpression" type="tns:expressionSubElementDefinition">
-            <xs:annotation>
+<![CDATA[
+Time in millis that an aggregated exchange should be inactive before its complete (timeout). This option can be set as
+either a fixed value or using an Expression which allows you to evaluate a timeout dynamically - will use Long as
+result. If both are set Camel will fallback to use the fixed value if the Expression result was null or 0. You cannot
+use this option together with completionInterval, only one of the two can be used. By default the timeout checker runs
+every second, you can use the completionTimeoutCheckerInterval option to configure how frequently to run the checker.
+The timeout is an approximation and there is no guarantee that the a timeout is triggered exactly after the timeout
+value. It is not recommended to use very low timeout values or checker intervals.
+]]>
+              </xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element minOccurs="0" name="completionSizeExpression" type="tns:expressionSubElementDefinition">
+            <xs:annotation>
               <xs:documentation xml:lang="en">
-<![CDATA[
-Number of messages aggregated before the aggregation is complete. This option can be set as either a fixed value or
-using an Expression which allows you to evaluate a size dynamically - will use Integer as result. If both are set Camel
-will fallback to use the fixed value if the Expression result was null or 0.
-]]>
-              </xs:documentation>
-            </xs:annotation>
-          </xs:element>
-          <xs:element minOccurs="0" ref="tns:optimisticLockRetryPolicy"/>
-          <xs:choice maxOccurs="unbounded" minOccurs="0">
-            <xs:element ref="tns:aggregate"/>
-            <xs:element ref="tns:bean"/>
-            <xs:element ref="tns:doCatch"/>
-            <xs:element ref="tns:choice"/>
-            <xs:element ref="tns:circuitBreaker"/>
-            <xs:element ref="tns:claimCheck"/>
-            <xs:element ref="tns:convertBodyTo"/>
-            <xs:element ref="tns:convertHeaderTo"/>
-            <xs:element ref="tns:convertVariableTo"/>
-            <xs:element ref="tns:delay"/>
-            <xs:element ref="tns:dynamicRouter"/>
-            <xs:element ref="tns:enrich"/>
-            <xs:element ref="tns:filter"/>
-            <xs:element ref="tns:doFinally"/>
-            <xs:element ref="tns:idempotentConsumer"/>
-            <xs:element ref="tns:intercept"/>
-            <xs:element ref="tns:interceptFrom"/>
-            <xs:element ref="tns:interceptSendToEndpoint"/>
-            <xs:element ref="tns:kamelet"/>
-            <xs:element ref="tns:loadBalance"/>
-            <xs:element ref="tns:log"/>
-            <xs:element ref="tns:loop"/>
-            <xs:element ref="tns:marshal"/>
-            <xs:element ref="tns:multicast"/>
-            <xs:element ref="tns:onCompletion"/>
-            <xs:element ref="tns:onException"/>
-            <xs:element ref="tns:pausable"/>
-            <xs:element ref="tns:pipeline"/>
-            <xs:element ref="tns:policy"/>
-            <xs:element ref="tns:poll"/>
-            <xs:element ref="tns:pollEnrich"/>
-            <xs:element ref="tns:process"/>
-            <xs:element ref="tns:recipientList"/>
-            <xs:element ref="tns:removeHeader"/>
-            <xs:element ref="tns:removeHeaders"/>
-            <xs:element ref="tns:removeProperties"/>
-            <xs:element ref="tns:removeProperty"/>
-            <xs:element ref="tns:removeVariable"/>
-            <xs:element ref="tns:resequence"/>
-            <xs:element ref="tns:resumable"/>
-            <xs:element ref="tns:rollback"/>
-            <xs:element ref="tns:route"/>
-            <xs:element ref="tns:routingSlip"/>
-            <xs:element ref="tns:saga"/>
-            <xs:element ref="tns:sample"/>
-            <xs:element ref="tns:script"/>
-            <xs:element ref="tns:setBody"/>
-            <xs:element ref="tns:setExchangePattern"/>
-            <xs:element ref="tns:setHeader"/>
-            <xs:element ref="tns:setHeaders"/>
-            <xs:element ref="tns:setProperty"/>
-            <xs:element ref="tns:setVariable"/>
-            <xs:element ref="tns:setVariables"/>
-            <xs:element ref="tns:sort"/>
-            <xs:element ref="tns:split"/>
-            <xs:element ref="tns:step"/>
-            <xs:element ref="tns:stop"/>
-            <xs:element ref="tns:threads"/>
-            <xs:element ref="tns:throttle"/>
-            <xs:element ref="tns:throwException"/>
-            <xs:element ref="tns:to"/>
-            <xs:element ref="tns:toD"/>
-            <xs:element ref="tns:tokenizer"/>
-            <xs:element ref="tns:transacted"/>
-            <xs:element ref="tns:transformDataType"/>
-            <xs:element ref="tns:transform"/>
-            <xs:element ref="tns:doTry"/>
-            <xs:element ref="tns:unmarshal"/>
-            <xs:element ref="tns:validate"/>
-            <xs:element ref="tns:wireTap"/>
-          </xs:choice>
-        </xs:sequence>
-        <xs:attribute name="parallelProcessing" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-When aggregated are completed they are being send out of the aggregator. This option indicates whether or not Camel
-should use a thread pool with multiple threads for concurrency. If no custom thread pool has been specified then Camel
-creates a default pool with 10 concurrent threads. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="optimisticLocking" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Turns on using optimistic locking, which requires the aggregationRepository being used, is supporting this by
-implementing org.apache.camel.spi.OptimisticLockingAggregationRepository . Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="optimisticLockingSyncRetry" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-When optimistic locking is enabled, retries happen synchronously in the same thread instead of being scheduled on a
-background thread. This preserves transaction context for repositories that require single-thread transactional
-guarantees. Only takes effect when optimisticLocking() is also enabled. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="executorService" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-If using parallelProcessing you can specify a custom thread pool to be used. In fact also if you are not using
-parallelProcessing this custom thread pool is used to send out aggregated exchanges as well.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="timeoutCheckerExecutorService" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-If using either of the completionTimeout, completionTimeoutExpression, or completionInterval options a background thread
-is created to check for the completion for every aggregator. Set this option to provide a custom thread pool to be used
-rather than creating a new thread for every aggregator.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="aggregateController" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-To use a org.apache.camel.processor.aggregate.AggregateController to allow external sources to control this aggregator.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="aggregationRepository" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-The AggregationRepository to use. Sets the custom aggregate repository to use. Will by default use
-org.apache.camel.processor.aggregate.MemoryAggregationRepository.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="aggregationStrategy" type="xs:string" use="required">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-The AggregationStrategy to use. For example to lookup a bean with the name foo, the value is simply just #bean:foo.
-Configuring an AggregationStrategy is required, and is used to merge the incoming Exchange with the existing already
-merged exchanges. At first call the oldExchange parameter is null. On subsequent invocations the oldExchange contains
-the merged exchanges and newExchange is of course the new incoming Exchange.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="aggregationStrategyMethodName" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-This option can be used to explicit declare the method name to use, when using beans as the AggregationStrategy.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="aggregationStrategyMethodAllowNull" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-If this option is false then the aggregate method is not used for the very first aggregation. If this option is true
-then null values is used as the oldExchange (at the very first aggregation), when using beans as the
-AggregationStrategy. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="completionSize" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Number of messages aggregated before the aggregation is complete. This option can be set as either a fixed value or
-using an Expression which allows you to evaluate a size dynamically - will use Integer as result. If both are set Camel
-will fallback to use the fixed value if the Expression result was null or 0.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="completionInterval" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-A repeating period in millis by which the aggregator will complete all current aggregated exchanges. Camel has a
-background task which is triggered every period. You cannot use this option together with completionTimeout, only one of
-them can be used.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="completionTimeout" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Time in millis that an aggregated exchange should be inactive before its complete (timeout). This option can be set as
-either a fixed value or using an Expression which allows you to evaluate a timeout dynamically - will use Long as
-result. If both are set Camel will fallback to use the fixed value if the Expression result was null or 0. You cannot
-use this option together with completionInterval, only one of the two can be used. By default the timeout checker runs
-every second, you can use the completionTimeoutCheckerInterval option to configure how frequently to run the checker.
-The timeout is an approximation and there is no guarantee that the a timeout is triggered exactly after the timeout
-value. It is not recommended to use very low timeout values or checker intervals.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="completionTimeoutCheckerInterval" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Interval in millis that is used by the background task that checks for timeouts ( org.apache.camel.TimeoutMap ). By
-default the timeout checker runs every second. The timeout is an approximation and there is no guarantee that the a
-timeout is triggered exactly after the timeout value. It is not recommended to use very low timeout values or checker
-intervals. Default value: 1000
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="completionFromBatchConsumer" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Enables the batch completion mode where we aggregate from a org.apache.camel.BatchConsumer and aggregate the total
-number of exchanges the org.apache.camel.BatchConsumer has reported as total by checking the exchange property
-org.apache.camel.Exchange#BATCH_COMPLETE when its complete. This option cannot be used together with
-discardOnAggregationFailure. Important: When using this option, you should also enable eagerCheckCompletion() to ensure
-the aggregator checks for batch completion on each incoming exchange. Without eager checking, the batch completion
-signal may not be properly detected. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="completionOnNewCorrelationGroup" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Enables completion on all previous groups when a new incoming correlation group. This can for example be used to
-complete groups with same correlation keys when they are in consecutive order. Notice when this is enabled then only 1
-correlation group can be in progress as when a new correlation group starts, then the previous groups is forced
-completed. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="eagerCheckCompletion" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Use eager completion checking which means that the completionPredicate will use the incoming Exchange. As opposed to
-without eager completion checking the completionPredicate will use the aggregated Exchange. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="ignoreInvalidCorrelationKeys" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-If a correlation key cannot be successfully evaluated it will be ignored by logging a DEBUG and then just ignore the
-incoming Exchange. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="closeCorrelationKeyOnCompletion" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Closes a correlation key when its complete. Any late received exchanges which has a correlation key that has been
-closed, it will be defined and a ClosedCorrelationKeyException is thrown.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="discardOnCompletionTimeout" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Discards the aggregated message on completion timeout. This means on timeout the aggregated message is dropped and not
-sent out of the aggregator. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="discardOnAggregationFailure" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Discards the aggregated message when aggregation failed (an exception was thrown from AggregationStrategy . This means
-the partly aggregated message is dropped and not sent out of the aggregator. This option cannot be used together with
-completionFromBatchConsumer. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="forceCompletionOnStop" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Indicates to complete all current aggregated exchanges when the context is stopped. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="completeAllOnStop" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Indicates to wait to complete all current and partial (pending) aggregated exchanges when the context is stopped. This
-also means that we will wait for all pending exchanges which are stored in the aggregation repository to complete so the
-repository is empty before we can stop. You may want to enable this when using the memory based aggregation repository
-that is memory based only, and do not store data on disk. When this option is enabled, then the aggregator is waiting to
-complete all those exchanges before its stopped, when stopping CamelContext or the route using it. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType name="expressionSubElementDefinition">
-    <xs:choice>
-      <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:java"/>
-      <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:variable"/>
-      <xs:element ref="tns:wasm"/>
-      <xs:element ref="tns:xtokenize"/>
-      <xs:element ref="tns:xpath"/>
-      <xs:element ref="tns:xquery"/>
-    </xs:choice>
-  </xs:complexType>
-  <xs:complexType name="expression">
-    <xs:simpleContent>
-      <xs:extension base="xs:string">
-        <xs:attribute name="id" type="xs:ID">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the id of this node.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="trim" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs
-where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.
-Default value: true
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:simpleContent>
-  </xs:complexType>
-  <xs:complexType name="optimisticLockRetryPolicyDefinition">
-    <xs:sequence/>
-    <xs:attribute name="maximumRetries" type="xs:string">
-      <xs:annotation>
+<![CDATA[
+Number of messages aggregated before the aggregation is complete. This option can be set as either a fixed value or
+using an Expression which allows you to evaluate a size dynamically - will use Integer as result. If both are set Camel
+will fallback to use the fixed value if the Expression result was null or 0.
+]]>
+              </xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element minOccurs="0" ref="tns:optimisticLockRetryPolicy"/>
+          <xs:choice maxOccurs="unbounded" minOccurs="0">
+            <xs:element ref="tns:aggregate"/>
+            <xs:element ref="tns:bean"/>
+            <xs:element ref="tns:doCatch"/>
+            <xs:element ref="tns:choice"/>
+            <xs:element ref="tns:circuitBreaker"/>
+            <xs:element ref="tns:claimCheck"/>
+            <xs:element ref="tns:convertBodyTo"/>
+            <xs:element ref="tns:convertHeaderTo"/>
+            <xs:element ref="tns:convertVariableTo"/>
+            <xs:element ref="tns:delay"/>
+            <xs:element ref="tns:dynamicRouter"/>
+            <xs:element ref="tns:enrich"/>
+            <xs:element ref="tns:filter"/>
+            <xs:element ref="tns:doFinally"/>
+            <xs:element ref="tns:idempotentConsumer"/>
+            <xs:element ref="tns:intercept"/>
+            <xs:element ref="tns:interceptFrom"/>
+            <xs:element ref="tns:interceptSendToEndpoint"/>
+            <xs:element ref="tns:kamelet"/>
+            <xs:element ref="tns:loadBalance"/>
+            <xs:element ref="tns:log"/>
+            <xs:element ref="tns:loop"/>
+            <xs:element ref="tns:marshal"/>
+            <xs:element ref="tns:multicast"/>
+            <xs:element ref="tns:onCompletion"/>
+            <xs:element ref="tns:onException"/>
+            <xs:element ref="tns:pausable"/>
+            <xs:element ref="tns:pipeline"/>
+            <xs:element ref="tns:policy"/>
+            <xs:element ref="tns:poll"/>
+            <xs:element ref="tns:pollEnrich"/>
+            <xs:element ref="tns:process"/>
+            <xs:element ref="tns:recipientList"/>
+            <xs:element ref="tns:removeHeader"/>
+            <xs:element ref="tns:removeHeaders"/>
+            <xs:element ref="tns:removeProperties"/>
+            <xs:element ref="tns:removeProperty"/>
+            <xs:element ref="tns:removeVariable"/>
+            <xs:element ref="tns:resequence"/>
+            <xs:element ref="tns:resumable"/>
+            <xs:element ref="tns:rollback"/>
+            <xs:element ref="tns:route"/>
+            <xs:element ref="tns:routingSlip"/>
+            <xs:element ref="tns:saga"/>
+            <xs:element ref="tns:sample"/>
+            <xs:element ref="tns:script"/>
+            <xs:element ref="tns:setBody"/>
+            <xs:element ref="tns:setExchangePattern"/>
+            <xs:element ref="tns:setHeader"/>
+            <xs:element ref="tns:setHeaders"/>
+            <xs:element ref="tns:setProperty"/>
+            <xs:element ref="tns:setVariable"/>
+            <xs:element ref="tns:setVariables"/>
+            <xs:element ref="tns:sort"/>
+            <xs:element ref="tns:split"/>
+            <xs:element ref="tns:step"/>
+            <xs:element ref="tns:stop"/>
+            <xs:element ref="tns:threads"/>
+            <xs:element ref="tns:throttle"/>
+            <xs:element ref="tns:throwException"/>
+            <xs:element ref="tns:to"/>
+            <xs:element ref="tns:toD"/>
+            <xs:element ref="tns:tokenizer"/>
+            <xs:element ref="tns:transacted"/>
+            <xs:element ref="tns:transformDataType"/>
+            <xs:element ref="tns:transform"/>
+            <xs:element ref="tns:doTry"/>
+            <xs:element ref="tns:unmarshal"/>
+            <xs:element ref="tns:validate"/>
+            <xs:element ref="tns:wireTap"/>
+          </xs:choice>
+        </xs:sequence>
+        <xs:attribute name="parallelProcessing" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+When aggregated are completed they are being send out of the aggregator. This option indicates whether or not Camel
+should use a thread pool with multiple threads for concurrency. If no custom thread pool has been specified then Camel
+creates a default pool with 10 concurrent threads. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="optimisticLocking" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Turns on using optimistic locking, which requires the aggregationRepository being used, is supporting this by
+implementing org.apache.camel.spi.OptimisticLockingAggregationRepository . Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="optimisticLockingSyncRetry" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+When optimistic locking is enabled, retries happen synchronously in the same thread instead of being scheduled on a
+background thread. This preserves transaction context for repositories that require single-thread transactional
+guarantees. Only takes effect when optimisticLocking() is also enabled. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="executorService" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+If using parallelProcessing you can specify a custom thread pool to be used. In fact also if you are not using
+parallelProcessing this custom thread pool is used to send out aggregated exchanges as well.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="timeoutCheckerExecutorService" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+If using either of the completionTimeout, completionTimeoutExpression, or completionInterval options a background thread
+is created to check for the completion for every aggregator. Set this option to provide a custom thread pool to be used
+rather than creating a new thread for every aggregator.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="aggregateController" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+To use a org.apache.camel.processor.aggregate.AggregateController to allow external sources to control this aggregator.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="aggregationRepository" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+The AggregationRepository to use. Sets the custom aggregate repository to use. Will by default use
+org.apache.camel.processor.aggregate.MemoryAggregationRepository.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="aggregationStrategy" type="xs:string" use="required">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+The AggregationStrategy to use. For example to lookup a bean with the name foo, the value is simply just #bean:foo.
+Configuring an AggregationStrategy is required, and is used to merge the incoming Exchange with the existing already
+merged exchanges. At first call the oldExchange parameter is null. On subsequent invocations the oldExchange contains
+the merged exchanges and newExchange is of course the new incoming Exchange.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="aggregationStrategyMethodName" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+This option can be used to explicit declare the method name to use, when using beans as the AggregationStrategy.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="aggregationStrategyMethodAllowNull" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+If this option is false then the aggregate method is not used for the very first aggregation. If this option is true
+then null values is used as the oldExchange (at the very first aggregation), when using beans as the
+AggregationStrategy. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="completionSize" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Number of messages aggregated before the aggregation is complete. This option can be set as either a fixed value or
+using an Expression which allows you to evaluate a size dynamically - will use Integer as result. If both are set Camel
+will fallback to use the fixed value if the Expression result was null or 0.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="completionInterval" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+A repeating period in millis by which the aggregator will complete all current aggregated exchanges. Camel has a
+background task which is triggered every period. You cannot use this option together with completionTimeout, only one of
+them can be used.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="completionTimeout" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Time in millis that an aggregated exchange should be inactive before its complete (timeout). This option can be set as
+either a fixed value or using an Expression which allows you to evaluate a timeout dynamically - will use Long as
+result. If both are set Camel will fallback to use the fixed value if the Expression result was null or 0. You cannot
+use this option together with completionInterval, only one of the two can be used. By default the timeout checker runs
+every second, you can use the completionTimeoutCheckerInterval option to configure how frequently to run the checker.
+The timeout is an approximation and there is no guarantee that the a timeout is triggered exactly after the timeout
+value. It is not recommended to use very low timeout values or checker intervals.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="completionTimeoutCheckerInterval" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Interval in millis that is used by the background task that checks for timeouts ( org.apache.camel.TimeoutMap ). By
+default the timeout checker runs every second. The timeout is an approximation and there is no guarantee that the a
+timeout is triggered exactly after the timeout value. It is not recommended to use very low timeout values or checker
+intervals. Default value: 1000
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="completionFromBatchConsumer" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Enables the batch completion mode where we aggregate from a org.apache.camel.BatchConsumer and aggregate the total
+number of exchanges the org.apache.camel.BatchConsumer has reported as total by checking the exchange property
+org.apache.camel.Exchange#BATCH_COMPLETE when its complete. This option cannot be used together with
+discardOnAggregationFailure. Important: When using this option, you should also enable eagerCheckCompletion() to ensure
+the aggregator checks for batch completion on each incoming exchange. Without eager checking, the batch completion
+signal may not be properly detected. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="completionOnNewCorrelationGroup" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Enables completion on all previous groups when a new incoming correlation group. This can for example be used to
+complete groups with same correlation keys when they are in consecutive order. Notice when this is enabled then only 1
+correlation group can be in progress as when a new correlation group starts, then the previous groups is forced
+completed. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="eagerCheckCompletion" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Use eager completion checking which means that the completionPredicate will use the incoming Exchange. As opposed to
+without eager completion checking the completionPredicate will use the aggregated Exchange. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="ignoreInvalidCorrelationKeys" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+If a correlation key cannot be successfully evaluated it will be ignored by logging a DEBUG and then just ignore the
+incoming Exchange. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="closeCorrelationKeyOnCompletion" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Closes a correlation key when its complete. Any late received exchanges which has a correlation key that has been
+closed, it will be defined and a ClosedCorrelationKeyException is thrown.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="discardOnCompletionTimeout" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Discards the aggregated message on completion timeout. This means on timeout the aggregated message is dropped and not
+sent out of the aggregator. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="discardOnAggregationFailure" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Discards the aggregated message when aggregation failed (an exception was thrown from AggregationStrategy . This means
+the partly aggregated message is dropped and not sent out of the aggregator. This option cannot be used together with
+completionFromBatchConsumer. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="forceCompletionOnStop" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Indicates to complete all current aggregated exchanges when the context is stopped. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="completeAllOnStop" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Indicates to wait to complete all current and partial (pending) aggregated exchanges when the context is stopped. This
+also means that we will wait for all pending exchanges which are stored in the aggregation repository to complete so the
+repository is empty before we can stop. You may want to enable this when using the memory based aggregation repository
+that is memory based only, and do not store data on disk. When this option is enabled, then the aggregator is waiting to
+complete all those exchanges before its stopped, when stopping CamelContext or the route using it. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="expressionSubElementDefinition">
+    <xs:choice>
+      <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:java"/>
+      <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:variable"/>
+      <xs:element ref="tns:wasm"/>
+      <xs:element ref="tns:xtokenize"/>
+      <xs:element ref="tns:xpath"/>
+      <xs:element ref="tns:xquery"/>
+    </xs:choice>
+  </xs:complexType>
+  <xs:complexType name="expression">
+    <xs:simpleContent>
+      <xs:extension base="xs:string">
+        <xs:attribute name="id" type="xs:ID">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the id of this node.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="trim" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Whether to trim the source code to remove leading and trailing whitespaces and line breaks. For example when using DSLs
+where the source will span across multiple lines and there may be additional line breaks at both the beginning and end.
+Default value: true
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:simpleContent>
+  </xs:complexType>
+  <xs:complexType name="optimisticLockRetryPolicyDefinition">
+    <xs:sequence/>
+    <xs:attribute name="maximumRetries" type="xs:string">
+      <xs:annotation>
         <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the maximum number of retries.
-]]>
-        </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="retryDelay" type="xs:string">
-      <xs:annotation>
+<![CDATA[
+Sets the maximum number of retries.
+]]>
+        </xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="retryDelay" type="xs:string">
+      <xs:annotation>
         <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the delay in millis between retries. Default value: 50
-]]>
-        </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="maximumRetryDelay" type="xs:string">
-      <xs:annotation>
+<![CDATA[
+Sets the delay in millis between retries. Default value: 50
+]]>
+        </xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="maximumRetryDelay" type="xs:string">
+      <xs:annotation>
         <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the upper value of retry in millis between retries, when using exponential or random backoff. Default value: 1000
-]]>
-        </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="exponentialBackOff" type="xs:string">
-      <xs:annotation>
+<![CDATA[
+Sets the upper value of retry in millis between retries, when using exponential or random backoff. Default value: 1000
+]]>
+        </xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="exponentialBackOff" type="xs:string">
+      <xs:annotation>
         <xs:documentation xml:lang="en">
-<![CDATA[
-Enable exponential backoff. Default value: true
-]]>
-        </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="randomBackOff" type="xs:string">
-      <xs:annotation>
+<![CDATA[
+Enable exponential backoff. Default value: true
+]]>
+        </xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="randomBackOff" type="xs:string">
+      <xs:annotation>
         <xs:documentation xml:lang="en">
-<![CDATA[
-Enables random backoff. Default value: false
-]]>
-        </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-  </xs:complexType>
-  <xs:complexType name="beanDefinition">
-    <xs:complexContent>
-      <xs:extension base="tns:noOutputDefinition">
-        <xs:sequence/>
-        <xs:attribute name="ref" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets a reference to an existing bean to use, which is looked up from the registry.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="method" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the method name on the bean to use.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="beanType" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Sets the class name (fully qualified) of the bean to use.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="scope" 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
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType abstract="true" name="noOutputDefinition">
-    <xs:complexContent>
-      <xs:extension base="tns:processorDefinition">
-        <xs:sequence/>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType name="beanFactoryDefinition">
-    <xs:sequence>
-      <xs:element minOccurs="0" name="constructors" type="tns:beanConstructorsDefinition">
-        <xs:annotation>
+<![CDATA[
+Enables random backoff. Default value: false
+]]>
+        </xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+  </xs:complexType>
+  <xs:complexType name="beanDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:noOutputDefinition">
+        <xs:sequence/>
+        <xs:attribute name="ref" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets a reference to an existing bean to use, which is looked up from the registry.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="method" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the method name on the bean to use.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="beanType" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Sets the class name (fully qualified) of the bean to use.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="scope" 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
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType abstract="true" name="noOutputDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:processorDefinition">
+        <xs:sequence/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="beanFactoryDefinition">
+    <xs:sequence>
+      <xs:element minOccurs="0" name="constructors" type="tns:beanConstructorsDefinition">
+        <xs:annotation>
           <xs:documentation xml:lang="en">
-<![CDATA[
-Optional constructor arguments for creating the bean. Arguments correspond to specific index of the constructor argument
-list, starting from zero.
-]]>
-          </xs:documentation>
-        </xs:annotation>
-      </xs:element>
-      <xs:element minOccurs="0" name="properties" type="tns:beanPropertiesDefinition">
-        <xs:annotation>
+<![CDATA[
+Optional constructor arguments for creating the bean. Arguments correspond to specific index of the constructor argument
+list, starting from zero.
+]]>
+          </xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="properties" type="tns:beanPropertiesDefinition">
+        <xs:annotation>
           <xs:documentation xml:lang="en">
-<![CDATA[
-Optional properties to set on the created bean.
-]]>
-          </xs:documentation>
-        </xs:annotation>
-      </xs:element>
-      <xs:element minOccurs="0" name="script" type="xs:string">
-        <xs:annotation>
+<![CDATA[
+Optional properties to set on the created bean.
+]]>
+          </xs:documentation>
+        </xs:annotation>
+      </xs:element>
+      <xs:element minOccurs="0" name="script" type="xs:string">
+        <xs:annotation>
           <xs:documentation xml:lang="en">
-<![CDATA[
-The script to execute that creates the bean when using scripting languages. If the script use the prefix resource: such
-as resource:classpath:com/foo/myscript.groovy, resource:file:/var/myscript.groovy, then its loaded from the external
-resource.
-]]>
-          </xs:documentation>
-        </xs:annotation>
-      </xs:element>
-    </xs:sequence>
-    <xs:attribute name="name" type="xs:string" use="required">
-      <xs:annotation>
+<![CDATA[
+The script to execute that creates the bean when using scripting languages. If the script use the prefix resource: such
+as resource:classpath:com/foo/myscript.groovy, resource:file:/var/myscript.groovy, then its loaded from the external
+resource.
+]]>
+          </xs:documentation>
+        </xs:annotation>
+      </xs:element>
+    </xs:sequence>
+    <xs:attribute name="name" type="xs:string" use="required">
+      <xs:annotation>
         <xs:documentation xml:lang="en">
-<![CDATA[
-The name of the bean (bean id).
-]]>
-        </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="type" type="xs:string" use="required">
-      <xs:annotation>
+<![CDATA[
+The name of the bean (bean id).
+]]>
+        </xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="type" type="xs:string" use="required">
+      <xs:annotation>
         <xs:documentation xml:lang="en">
-<![CDATA[
-The class name (fully qualified) of the bean.
-]]>
-        </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="initMethod" type="xs:string">
-      <xs:annotation>
+<![CDATA[
+The class name (fully qualified) of the bean.
+]]>
+        </xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="initMethod" type="xs:string">
+      <xs:annotation>
         <xs:documentation xml:lang="en">
-<![CDATA[
-The name of the custom initialization method to invoke after setting bean properties. The method must have no arguments,
-but may throw any exception.
-]]>
-        </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="destroyMethod" type="xs:string">
-      <xs:annotation>
+<![CDATA[
+The name of the custom initialization method to invoke after setting bean properties. The method must have no arguments,
+but may throw any exception.
+]]>
+        </xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="destroyMethod" type="xs:string">
+      <xs:annotation>
         <xs:documentation xml:lang="en">
-<![CDATA[
-The name of the custom destroy method to invoke on bean shutdown, such as when Camel is shutting down. The method must
-have no arguments, but may throw any exception.
-]]>
-        </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="factoryMethod" type="xs:string">
-      <xs:annotation>
+<![CDATA[
+The name of the custom destroy method to invoke on bean shutdown, such as when Camel is shutting down. The method must
+have no arguments, but may throw any exception.
+]]>
+        </xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="factoryMethod" type="xs:string">
+      <xs:annotation>
         <xs:documentation xml:lang="en">
-<![CDATA[
-Name of method to invoke when creating the bean via a factory bean.
-]]>
-        </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="factoryBean" type="xs:string">
-      <xs:annotation>
+<![CDATA[
+Name of method to invoke when creating the bean via a factory bean.
+]]>
+        </xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="factoryBean" type="xs:string">
+      <xs:annotation>
         <xs:documentation xml:lang="en">
-<![CDATA[
-Name of factory bean (bean id) to use for creating the bean.
-]]>
-        </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="builderClass" type="xs:string">
-      <xs:annotation>
+<![CDATA[
+Name of factory bean (bean id) to use for creating the bean.
+]]>
+        </xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="builderClass" type="xs:string">
+      <xs:annotation>
         <xs:documentation xml:lang="en">
-<![CDATA[
-Fully qualified class name of builder class to use for creating and configuring the bean. The builder will use the
-properties values to configure the bean.
-]]>
-        </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="builderMethod" type="xs:string">
-      <xs:annotation>
+<![CDATA[
+Fully qualified class name of builder class to use for creating and configuring the bean. The builder will use the
+properties values to configure the bean.
+]]>
+        </xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="builderMethod" type="xs:string">
+      <xs:annotation>
         <xs:documentation xml:lang="en">
-<![CDATA[
-Name of method when using builder class. This method is invoked after configuring to create the actual bean. This method
-is often named build (used by default). Default value: build
-]]>
-        </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="scriptLanguage" type="xs:string">
-      <xs:annotation>
+<![CDATA[
+Name of method when using builder class. This method is invoked after configuring to create the actual bean. This method
+is often named build (used by default). Default value: build
+]]>
+        </xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="scriptLanguage" type="xs:string">
+      <xs:annotation>
         <xs:documentation xml:lang="en">
-<![CDATA[
-The script language to use when using inlined script for creating the bean, such as groovy, java, javascript etc.
-]]>
-        </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="scriptPropertyPlaceholders" type="xs:string">
-      <xs:annotation>
+<![CDATA[
+The script language to use when using inlined script for creating the bean, such as groovy, java, javascript etc.
+]]>
+        </xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+    <xs:attribute name="scriptPropertyPlaceholders" type="xs:string">
+      <xs:annotation>
         <xs:documentation xml:lang="en">
-<![CDATA[
-Whether the script should support using Camel property placeholder syntax {{ }}. Default value: true
-]]>
-        </xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-  </xs:complexType>
-  <xs:complexType name="beanConstructorsDefinition">
-    <xs:sequence>
-      <xs:element maxOccurs="unbounded" minOccurs="0" name="constructor" type="tns:beanConstructorDefinition"/>
-    </xs:sequence>
-  </xs:complexType>
-  <xs:complexType name="beanConstructorDefinition">
-    <xs:sequence/>
-    <xs:attribute name="index" type="xs:int"/>
-    <xs:attribute name="value" type="xs:string" use="required"/>
-  </xs:complexType>
-  <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="catchDefinition">
-    <xs:complexContent>
-      <xs:extension base="tns:output">
-        <xs:sequence>
-          <xs:element maxOccurs="unbounded" minOccurs="0" name="exception" type="xs:string">
-            <xs:annotation>
+<![CDATA[
+Whether the script should support using Camel property placeholder syntax {{ }}. Default value: true
+]]>
+        </xs:documentation>
+      </xs:annotation>
+    </xs:attribute>
+  </xs:complexType>
+  <xs:complexType name="beanConstructorsDefinition">
+    <xs:sequence>
+      <xs:element maxOccurs="unbounded" minOccurs="0" name="constructor" type="tns:beanConstructorDefinition"/>
+    </xs:sequence>
+  </xs:complexType>
+  <xs:complexType name="beanConstructorDefinition">
+    <xs:sequence/>
+    <xs:attribute name="index" type="xs:int"/>
+    <xs:attribute name="value" type="xs:string" use="required"/>
+  </xs:complexType>
+  <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="catchDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:output">
+        <xs:sequence>
+          <xs:element maxOccurs="unbounded" minOccurs="0" name="exception" type="xs:string">
+            <xs:annotation>
               <xs:documentation xml:lang="en">
-<![CDATA[
-The exception(s) to catch.
-]]>
-              </xs:documentation>
-            </xs:annotation>
-          </xs:element>
-          <xs:element minOccurs="0" ref="tns:onWhen"/>
-          <xs:choice maxOccurs="unbounded" minOccurs="0">
-            <xs:element ref="tns:aggregate"/>
-            <xs:element ref="tns:bean"/>
-            <xs:element ref="tns:doCatch"/>
-            <xs:element ref="tns:choice"/>
-            <xs:element ref="tns:circuitBreaker"/>
-            <xs:element ref="tns:claimCheck"/>
-            <xs:element ref="tns:convertBodyTo"/>
-            <xs:element ref="tns:convertHeaderTo"/>
-            <xs:element ref="tns:convertVariableTo"/>
-            <xs:element ref="tns:delay"/>
-            <xs:element ref="tns:dynamicRouter"/>
-            <xs:element ref="tns:enrich"/>
-            <xs:element ref="tns:filter"/>
-            <xs:element ref="tns:doFinally"/>
-            <xs:element ref="tns:idempotentConsumer"/>
-            <xs:element ref="tns:intercept"/>
-            <xs:element ref="tns:interceptFrom"/>
-            <xs:element ref="tns:interceptSendToEndpoint"/>
-            <xs:element ref="tns:kamelet"/>
-            <xs:element ref="tns:loadBalance"/>
-            <xs:element ref="tns:log"/>
-            <xs:element ref="tns:loop"/>
-            <xs:element ref="tns:marshal"/>
-            <xs:element ref="tns:multicast"/>
-            <xs:element ref="tns:onCompletion"/>
-            <xs:element ref="tns:onException"/>
-            <xs:element ref="tns:pausable"/>
-            <xs:element ref="tns:pipeline"/>
-            <xs:element ref="tns:policy"/>
-            <xs:element ref="tns:poll"/>
-            <xs:element ref="tns:pollEnrich"/>
-            <xs:element ref="tns:process"/>
-            <xs:element ref="tns:recipientList"/>
-            <xs:element ref="tns:removeHeader"/>
-            <xs:element ref="tns:removeHeaders"/>
-            <xs:element ref="tns:removeProperties"/>
-            <xs:element ref="tns:removeProperty"/>
-            <xs:element ref="tns:removeVariable"/>
-            <xs:element ref="tns:resequence"/>
-            <xs:element ref="tns:resumable"/>
-            <xs:element ref="tns:rollback"/>
-            <xs:element ref="tns:route"/>
-            <xs:element ref="tns:routingSlip"/>
-            <xs:element ref="tns:saga"/>
-            <xs:element ref="tns:sample"/>
-            <xs:element ref="tns:script"/>
-            <xs:element ref="tns:setBody"/>
-            <xs:element ref="tns:setExchangePattern"/>
-            <xs:element ref="tns:setHeader"/>
-            <xs:element ref="tns:setHeaders"/>
-            <xs:element ref="tns:setProperty"/>
-            <xs:element ref="tns:setVariable"/>
-            <xs:element ref="tns:setVariables"/>
-            <xs:element ref="tns:sort"/>
-            <xs:element ref="tns:split"/>
-            <xs:element ref="tns:step"/>
-            <xs:element ref="tns:stop"/>
-            <xs:element ref="tns:threads"/>
-            <xs:element ref="tns:throttle"/>
-            <xs:element ref="tns:throwException"/>
-            <xs:element ref="tns:to"/>
-            <xs:element ref="tns:toD"/>
-            <xs:element ref="tns:tokenizer"/>
-            <xs:element ref="tns:transacted"/>
-            <xs:element ref="tns:transformDataType"/>
-            <xs:element ref="tns:transform"/>
-            <xs:element ref="tns:doTry"/>
-            <xs:element ref="tns:unmarshal"/>
-            <xs:element ref="tns:validate"/>
-            <xs:element ref="tns:wireTap"/>
-          </xs:choice>
-        </xs:sequence>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType name="onWhenDefinition">
-    <xs:complexContent>
-      <xs:extension base="tns:optionalIdentifiedDefinition">
-        <xs:choice>
-          <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:java"/>
-          <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:variable"/>
-          <xs:element ref="tns:wasm"/>
-          <xs:element ref="tns:xtokenize"/>
-          <xs:element ref="tns:xpath"/>
-          <xs:element ref="tns:xquery"/>
-        </xs:choice>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType name="choiceDefinition">
-    <xs:complexContent>
-      <xs:extension base="tns:noOutputDefinition">
-        <xs:sequence>
-          <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:when"/>
-          <xs:element minOccurs="0" ref="tns:otherwise"/>
-        </xs:sequence>
-        <xs:attribute name="precondition" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Indicates whether this Choice EIP is in precondition mode or not. If so its branches (when/otherwise) are evaluated
-during startup to keep at runtime only the branch that matched. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType name="whenDefinition">
-    <xs:complexContent>
-      <xs:extension base="tns:optionalIdentifiedDefinition">
-        <xs:sequence>
-          <xs:choice>
-            <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:java"/>
-            <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:variable"/>
-            <xs:element ref="tns:wasm"/>
-            <xs:element ref="tns:xtokenize"/>
-            <xs:element ref="tns:xpath"/>
-            <xs:element ref="tns:xquery"/>
-          </xs:choice>
-          <xs:choice maxOccurs="unbounded" minOccurs="0">
-            <xs:element ref="tns:aggregate"/>
-            <xs:element ref="tns:bean"/>
-            <xs:element ref="tns:doCatch"/>
-            <xs:element ref="tns:choice"/>
-            <xs:element ref="tns:circuitBreaker"/>
-            <xs:element ref="tns:claimCheck"/>
-            <xs:element ref="tns:convertBodyTo"/>
-            <xs:element ref="tns:convertHeaderTo"/>
-            <xs:element ref="tns:convertVariableTo"/>
-            <xs:element ref="tns:delay"/>
-            <xs:element ref="tns:dynamicRouter"/>
-            <xs:element ref="tns:enrich"/>
-            <xs:element ref="tns:filter"/>
-            <xs:element ref="tns:doFinally"/>
-            <xs:element ref="tns:idempotentConsumer"/>
-            <xs:element ref="tns:intercept"/>
-            <xs:element ref="tns:interceptFrom"/>
-            <xs:element ref="tns:interceptSendToEndpoint"/>
-            <xs:element ref="tns:kamelet"/>
-            <xs:element ref="tns:loadBalance"/>
-            <xs:element ref="tns:log"/>
-            <xs:element ref="tns:loop"/>
-            <xs:element ref="tns:marshal"/>
-            <xs:element ref="tns:multicast"/>
-            <xs:element ref="tns:onCompletion"/>
-            <xs:element ref="tns:onException"/>
-            <xs:element ref="tns:pausable"/>
-            <xs:element ref="tns:pipeline"/>
-            <xs:element ref="tns:policy"/>
-            <xs:element ref="tns:poll"/>
-            <xs:element ref="tns:pollEnrich"/>
-            <xs:element ref="tns:process"/>
-            <xs:element ref="tns:recipientList"/>
-            <xs:element ref="tns:removeHeader"/>
-            <xs:element ref="tns:removeHeaders"/>
-            <xs:element ref="tns:removeProperties"/>
-            <xs:element ref="tns:removeProperty"/>
-            <xs:element ref="tns:removeVariable"/>
-            <xs:element ref="tns:resequence"/>
-            <xs:element ref="tns:resumable"/>
-            <xs:element ref="tns:rollback"/>
-            <xs:element ref="tns:route"/>
-            <xs:element ref="tns:routingSlip"/>
-            <xs:element ref="tns:saga"/>
-            <xs:element ref="tns:sample"/>
-            <xs:element ref="tns:script"/>
-            <xs:element ref="tns:setBody"/>
-            <xs:element ref="tns:setExchangePattern"/>
-            <xs:element ref="tns:setHeader"/>
-            <xs:element ref="tns:setHeaders"/>
-            <xs:element ref="tns:setProperty"/>
-            <xs:element ref="tns:setVariable"/>
-            <xs:element ref="tns:setVariables"/>
-            <xs:element ref="tns:sort"/>
-            <xs:element ref="tns:split"/>
-            <xs:element ref="tns:step"/>
-            <xs:element ref="tns:stop"/>
-            <xs:element ref="tns:threads"/>
-            <xs:element ref="tns:throttle"/>
-            <xs:element ref="tns:throwException"/>
-            <xs:element ref="tns:to"/>
-            <xs:element ref="tns:toD"/>
-            <xs:element ref="tns:tokenizer"/>
-            <xs:element ref="tns:transacted"/>
-            <xs:element ref="tns:transformDataType"/>
-            <xs:element ref="tns:transform"/>
-            <xs:element ref="tns:doTry"/>
-            <xs:element ref="tns:unmarshal"/>
-            <xs:element ref="tns:validate"/>
-            <xs:element ref="tns:wireTap"/>
-          </xs:choice>
-        </xs:sequence>
-        <xs:attribute name="disabled" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Disables this EIP from the route. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType name="otherwiseDefinition">
-    <xs:complexContent>
-      <xs:extension base="tns:optionalIdentifiedDefinition">
-        <xs:sequence>
-          <xs:choice maxOccurs="unbounded" minOccurs="0">
-            <xs:element ref="tns:aggregate"/>
-            <xs:element ref="tns:bean"/>
-            <xs:element ref="tns:doCatch"/>
-            <xs:element ref="tns:choice"/>
-            <xs:element ref="tns:circuitBreaker"/>
-            <xs:element ref="tns:claimCheck"/>
-            <xs:element ref="tns:convertBodyTo"/>
-            <xs:element ref="tns:convertHeaderTo"/>
-            <xs:element ref="tns:convertVariableTo"/>
-            <xs:element ref="tns:delay"/>
-            <xs:element ref="tns:dynamicRouter"/>
-            <xs:element ref="tns:enrich"/>
-            <xs:element ref="tns:filter"/>
-            <xs:element ref="tns:doFinally"/>
-            <xs:element ref="tns:idempotentConsumer"/>
-            <xs:element ref="tns:intercept"/>
-            <xs:element ref="tns:interceptFrom"/>
-            <xs:element ref="tns:interceptSendToEndpoint"/>
-            <xs:element ref="tns:kamelet"/>
-            <xs:element ref="tns:loadBalance"/>
-            <xs:element ref="tns:log"/>
-            <xs:element ref="tns:loop"/>
-            <xs:element ref="tns:marshal"/>
-            <xs:element ref="tns:multicast"/>
-            <xs:element ref="tns:onCompletion"/>
-            <xs:element ref="tns:onException"/>
-            <xs:element ref="tns:pausable"/>
-            <xs:element ref="tns:pipeline"/>
-            <xs:element ref="tns:policy"/>
-            <xs:element ref="tns:poll"/>
-            <xs:element ref="tns:pollEnrich"/>
-            <xs:element ref="tns:process"/>
-            <xs:element ref="tns:recipientList"/>
-            <xs:element ref="tns:removeHeader"/>
-            <xs:element ref="tns:removeHeaders"/>
-            <xs:element ref="tns:removeProperties"/>
-            <xs:element ref="tns:removeProperty"/>
-            <xs:element ref="tns:removeVariable"/>
-            <xs:element ref="tns:resequence"/>
-            <xs:element ref="tns:resumable"/>
-            <xs:element ref="tns:rollback"/>
-            <xs:element ref="tns:route"/>
-            <xs:element ref="tns:routingSlip"/>
-            <xs:element ref="tns:saga"/>
-            <xs:element ref="tns:sample"/>
-            <xs:element ref="tns:script"/>
-            <xs:element ref="tns:setBody"/>
-            <xs:element ref="tns:setExchangePattern"/>
-            <xs:element ref="tns:setHeader"/>
-            <xs:element ref="tns:setHeaders"/>
-            <xs:element ref="tns:setProperty"/>
-            <xs:element ref="tns:setVariable"/>
-            <xs:element ref="tns:setVariables"/>
-            <xs:element ref="tns:sort"/>
-            <xs:element ref="tns:split"/>
-            <xs:element ref="tns:step"/>
-            <xs:element ref="tns:stop"/>
-            <xs:element ref="tns:threads"/>
-            <xs:element ref="tns:throttle"/>
-            <xs:element ref="tns:throwException"/>
-            <xs:element ref="tns:to"/>
-            <xs:element ref="tns:toD"/>
-            <xs:element ref="tns:tokenizer"/>
-            <xs:element ref="tns:transacted"/>
-            <xs:element ref="tns:transformDataType"/>
-            <xs:element ref="tns:transform"/>
-            <xs:element ref="tns:doTry"/>
-            <xs:element ref="tns:unmarshal"/>
-            <xs:element ref="tns:validate"/>
-            <xs:element ref="tns:wireTap"/>
-          </xs:choice>
-        </xs:sequence>
-        <xs:attribute name="disabled" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Disables this EIP from the route. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType name="circuitBreakerDefinition">
-    <xs:complexContent>
-      <xs:extension base="tns:output">
-        <xs:sequence>
-          <xs:element minOccurs="0" ref="tns:resilience4jConfiguration"/>
-          <xs:element minOccurs="0" ref="tns:faultToleranceConfiguration"/>
-          <xs:choice maxOccurs="unbounded" minOccurs="0">
-            <xs:element ref="tns:aggregate"/>
-            <xs:element ref="tns:bean"/>
-            <xs:element ref="tns:doCatch"/>
-            <xs:element ref="tns:choice"/>
-            <xs:element ref="tns:circuitBreaker"/>
-            <xs:element ref="tns:claimCheck"/>
-            <xs:element ref="tns:convertBodyTo"/>
-            <xs:element ref="tns:convertHeaderTo"/>
-            <xs:element ref="tns:convertVariableTo"/>
-            <xs:element ref="tns:delay"/>
-            <xs:element ref="tns:dynamicRouter"/>
-            <xs:element ref="tns:enrich"/>
-            <xs:element ref="tns:filter"/>
-            <xs:element ref="tns:doFinally"/>
-            <xs:element ref="tns:idempotentConsumer"/>
-            <xs:element ref="tns:intercept"/>
-            <xs:element ref="tns:interceptFrom"/>
-            <xs:element ref="tns:interceptSendToEndpoint"/>
-            <xs:element ref="tns:kamelet"/>
-            <xs:element ref="tns:loadBalance"/>
-            <xs:element ref="tns:log"/>
-            <xs:element ref="tns:loop"/>
-            <xs:element ref="tns:marshal"/>
-            <xs:element ref="tns:multicast"/>
-            <xs:element ref="tns:onCompletion"/>
-            <xs:element ref="tns:onException"/>
-            <xs:element ref="tns:pausable"/>
-            <xs:element ref="tns:pipeline"/>
-            <xs:element ref="tns:policy"/>
-            <xs:element ref="tns:poll"/>
-            <xs:element ref="tns:pollEnrich"/>
-            <xs:element ref="tns:process"/>
-            <xs:element ref="tns:recipientList"/>
-            <xs:element ref="tns:removeHeader"/>
-            <xs:element ref="tns:removeHeaders"/>
-            <xs:element ref="tns:removeProperties"/>
-            <xs:element ref="tns:removeProperty"/>
-            <xs:element ref="tns:removeVariable"/>
-            <xs:element ref="tns:resequence"/>
-            <xs:element ref="tns:resumable"/>
-            <xs:element ref="tns:rollback"/>
-            <xs:element ref="tns:route"/>
-            <xs:element ref="tns:routingSlip"/>
-            <xs:element ref="tns:saga"/>
-            <xs:element ref="tns:sample"/>
-            <xs:element ref="tns:script"/>
-            <xs:element ref="tns:setBody"/>
-            <xs:element ref="tns:setExchangePattern"/>
-            <xs:element ref="tns:setHeader"/>
-            <xs:element ref="tns:setHeaders"/>
-            <xs:element ref="tns:setProperty"/>
-            <xs:element ref="tns:setVariable"/>
-            <xs:element ref="tns:setVariables"/>
-            <xs:element ref="tns:sort"/>
-            <xs:element ref="tns:split"/>
-            <xs:element ref="tns:step"/>
-            <xs:element ref="tns:stop"/>
-            <xs:element ref="tns:threads"/>
-            <xs:element ref="tns:throttle"/>
-            <xs:element ref="tns:throwException"/>
-            <xs:element ref="tns:to"/>
-            <xs:element ref="tns:toD"/>
-            <xs:element ref="tns:tokenizer"/>
-            <xs:element ref="tns:transacted"/>
-            <xs:element ref="tns:transformDataType"/>
-            <xs:element ref="tns:transform"/>
-            <xs:element ref="tns:doTry"/>
-            <xs:element ref="tns:unmarshal"/>
-            <xs:element ref="tns:validate"/>
-            <xs:element ref="tns:wireTap"/>
-          </xs:choice>
-          <xs:element minOccurs="0" ref="tns:onFallback"/>
-        </xs:sequence>
-        <xs:attribute name="configuration" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Refers to a circuit breaker configuration (such as resillience4j, or microprofile-fault-tolerance) to use for
-configuring the circuit breaker EIP.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="inheritErrorHandler" type="xs:boolean">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-To turn on or off Camel error handling during circuit breaker. If this is enabled then Camel error handler will first
-trigger if there is an error in the circuit breaker, which allows to let Camel handle redeliveries. If all attempts is
-failed, then after the circuit breaker is finished, then Camel error handler can handle the error as well such as the
-dead letter channel. By default, Camel error handler is turned off. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType name="resilience4JConfigurationDefinition">
-    <xs:complexContent>
-      <xs:extension base="tns:resilience4JConfigurationCommon">
-        <xs:sequence/>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType name="resilience4JConfigurationCommon">
-    <xs:complexContent>
-      <xs:extension base="tns:identifiedType">
-        <xs:sequence>
-          <xs:element maxOccurs="unbounded" minOccurs="0" name="recordException" type="xs:string">
-            <xs:annotation>
+<![CDATA[
+The exception(s) to catch.
+]]>
+              </xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element minOccurs="0" ref="tns:onWhen"/>
+          <xs:choice maxOccurs="unbounded" minOccurs="0">
+            <xs:element ref="tns:aggregate"/>
+            <xs:element ref="tns:bean"/>
+            <xs:element ref="tns:doCatch"/>
+            <xs:element ref="tns:choice"/>
+            <xs:element ref="tns:circuitBreaker"/>
+            <xs:element ref="tns:claimCheck"/>
+            <xs:element ref="tns:convertBodyTo"/>
+            <xs:element ref="tns:convertHeaderTo"/>
+            <xs:element ref="tns:convertVariableTo"/>
+            <xs:element ref="tns:delay"/>
+            <xs:element ref="tns:dynamicRouter"/>
+            <xs:element ref="tns:enrich"/>
+            <xs:element ref="tns:filter"/>
+            <xs:element ref="tns:doFinally"/>
+            <xs:element ref="tns:idempotentConsumer"/>
+            <xs:element ref="tns:intercept"/>
+            <xs:element ref="tns:interceptFrom"/>
+            <xs:element ref="tns:interceptSendToEndpoint"/>
+            <xs:element ref="tns:kamelet"/>
+            <xs:element ref="tns:loadBalance"/>
+            <xs:element ref="tns:log"/>
+            <xs:element ref="tns:loop"/>
+            <xs:element ref="tns:marshal"/>
+            <xs:element ref="tns:multicast"/>
+            <xs:element ref="tns:onCompletion"/>
+            <xs:element ref="tns:onException"/>
+            <xs:element ref="tns:pausable"/>
+            <xs:element ref="tns:pipeline"/>
+            <xs:element ref="tns:policy"/>
+            <xs:element ref="tns:poll"/>
+            <xs:element ref="tns:pollEnrich"/>
+            <xs:element ref="tns:process"/>
+            <xs:element ref="tns:recipientList"/>
+            <xs:element ref="tns:removeHeader"/>
+            <xs:element ref="tns:removeHeaders"/>
+            <xs:element ref="tns:removeProperties"/>
+            <xs:element ref="tns:removeProperty"/>
+            <xs:element ref="tns:removeVariable"/>
+            <xs:element ref="tns:resequence"/>
+            <xs:element ref="tns:resumable"/>
+            <xs:element ref="tns:rollback"/>
+            <xs:element ref="tns:route"/>
+            <xs:element ref="tns:routingSlip"/>
+            <xs:element ref="tns:saga"/>
+            <xs:element ref="tns:sample"/>
+            <xs:element ref="tns:script"/>
+            <xs:element ref="tns:setBody"/>
+            <xs:element ref="tns:setExchangePattern"/>
+            <xs:element ref="tns:setHeader"/>
+            <xs:element ref="tns:setHeaders"/>
+            <xs:element ref="tns:setProperty"/>
+            <xs:element ref="tns:setVariable"/>
+            <xs:element ref="tns:setVariables"/>
+            <xs:element ref="tns:sort"/>
+            <xs:element ref="tns:split"/>
+            <xs:element ref="tns:step"/>
+            <xs:element ref="tns:stop"/>
+            <xs:element ref="tns:threads"/>
+            <xs:element ref="tns:throttle"/>
+            <xs:element ref="tns:throwException"/>
+            <xs:element ref="tns:to"/>
+            <xs:element ref="tns:toD"/>
+            <xs:element ref="tns:tokenizer"/>
+            <xs:element ref="tns:transacted"/>
+            <xs:element ref="tns:transformDataType"/>
+            <xs:element ref="tns:transform"/>
+            <xs:element ref="tns:doTry"/>
+            <xs:element ref="tns:unmarshal"/>
+            <xs:element ref="tns:validate"/>
+            <xs:element ref="tns:wireTap"/>
+          </xs:choice>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="onWhenDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:optionalIdentifiedDefinition">
+        <xs:choice>
+          <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:java"/>
+          <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:variable"/>
+          <xs:element ref="tns:wasm"/>
+          <xs:element ref="tns:xtokenize"/>
+          <xs:element ref="tns:xpath"/>
+          <xs:element ref="tns:xquery"/>
+        </xs:choice>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="choiceDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:noOutputDefinition">
+        <xs:sequence>
+          <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:when"/>
+          <xs:element minOccurs="0" ref="tns:otherwise"/>
+        </xs:sequence>
+        <xs:attribute name="precondition" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Indicates whether this Choice EIP is in precondition mode or not. If so its branches (when/otherwise) are evaluated
+during startup to keep at runtime only the branch that matched. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="whenDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:optionalIdentifiedDefinition">
+        <xs:sequence>
+          <xs:choice>
+            <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:java"/>
+            <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:variable"/>
+            <xs:element ref="tns:wasm"/>
+            <xs:element ref="tns:xtokenize"/>
+            <xs:element ref="tns:xpath"/>
+            <xs:element ref="tns:xquery"/>
+          </xs:choice>
+          <xs:choice maxOccurs="unbounded" minOccurs="0">
+            <xs:element ref="tns:aggregate"/>
+            <xs:element ref="tns:bean"/>
+            <xs:element ref="tns:doCatch"/>
+            <xs:element ref="tns:choice"/>
+            <xs:element ref="tns:circuitBreaker"/>
+            <xs:element ref="tns:claimCheck"/>
+            <xs:element ref="tns:convertBodyTo"/>
+            <xs:element ref="tns:convertHeaderTo"/>
+            <xs:element ref="tns:convertVariableTo"/>
+            <xs:element ref="tns:delay"/>
+            <xs:element ref="tns:dynamicRouter"/>
+            <xs:element ref="tns:enrich"/>
+            <xs:element ref="tns:filter"/>
+            <xs:element ref="tns:doFinally"/>
+            <xs:element ref="tns:idempotentConsumer"/>
+            <xs:element ref="tns:intercept"/>
+            <xs:element ref="tns:interceptFrom"/>
+            <xs:element ref="tns:interceptSendToEndpoint"/>
+            <xs:element ref="tns:kamelet"/>
+            <xs:element ref="tns:loadBalance"/>
+            <xs:element ref="tns:log"/>
+            <xs:element ref="tns:loop"/>
+            <xs:element ref="tns:marshal"/>
+            <xs:element ref="tns:multicast"/>
+            <xs:element ref="tns:onCompletion"/>
+            <xs:element ref="tns:onException"/>
+            <xs:element ref="tns:pausable"/>
+            <xs:element ref="tns:pipeline"/>
+            <xs:element ref="tns:policy"/>
+            <xs:element ref="tns:poll"/>
+            <xs:element ref="tns:pollEnrich"/>
+            <xs:element ref="tns:process"/>
+            <xs:element ref="tns:recipientList"/>
+            <xs:element ref="tns:removeHeader"/>
+            <xs:element ref="tns:removeHeaders"/>
+            <xs:element ref="tns:removeProperties"/>
+            <xs:element ref="tns:removeProperty"/>
+            <xs:element ref="tns:removeVariable"/>
+            <xs:element ref="tns:resequence"/>
+            <xs:element ref="tns:resumable"/>
+            <xs:element ref="tns:rollback"/>
+            <xs:element ref="tns:route"/>
+            <xs:element ref="tns:routingSlip"/>
+            <xs:element ref="tns:saga"/>
+            <xs:element ref="tns:sample"/>
+            <xs:element ref="tns:script"/>
+            <xs:element ref="tns:setBody"/>
+            <xs:element ref="tns:setExchangePattern"/>
+            <xs:element ref="tns:setHeader"/>
+            <xs:element ref="tns:setHeaders"/>
+            <xs:element ref="tns:setProperty"/>
+            <xs:element ref="tns:setVariable"/>
+            <xs:element ref="tns:setVariables"/>
+            <xs:element ref="tns:sort"/>
+            <xs:element ref="tns:split"/>
+            <xs:element ref="tns:step"/>
+            <xs:element ref="tns:stop"/>
+            <xs:element ref="tns:threads"/>
+            <xs:element ref="tns:throttle"/>
+            <xs:element ref="tns:throwException"/>
+            <xs:element ref="tns:to"/>
+            <xs:element ref="tns:toD"/>
+            <xs:element ref="tns:tokenizer"/>
+            <xs:element ref="tns:transacted"/>
+            <xs:element ref="tns:transformDataType"/>
+            <xs:element ref="tns:transform"/>
+            <xs:element ref="tns:doTry"/>
+            <xs:element ref="tns:unmarshal"/>
+            <xs:element ref="tns:validate"/>
+            <xs:element ref="tns:wireTap"/>
+          </xs:choice>
+        </xs:sequence>
+        <xs:attribute name="disabled" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Disables this EIP from the route. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="otherwiseDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:optionalIdentifiedDefinition">
+        <xs:sequence>
+          <xs:choice maxOccurs="unbounded" minOccurs="0">
+            <xs:element ref="tns:aggregate"/>
+            <xs:element ref="tns:bean"/>
+            <xs:element ref="tns:doCatch"/>
+            <xs:element ref="tns:choice"/>
+            <xs:element ref="tns:circuitBreaker"/>
+            <xs:element ref="tns:claimCheck"/>
+            <xs:element ref="tns:convertBodyTo"/>
+            <xs:element ref="tns:convertHeaderTo"/>
+            <xs:element ref="tns:convertVariableTo"/>
+            <xs:element ref="tns:delay"/>
+            <xs:element ref="tns:dynamicRouter"/>
+            <xs:element ref="tns:enrich"/>
+            <xs:element ref="tns:filter"/>
+            <xs:element ref="tns:doFinally"/>
+            <xs:element ref="tns:idempotentConsumer"/>
+            <xs:element ref="tns:intercept"/>
+            <xs:element ref="tns:interceptFrom"/>
+            <xs:element ref="tns:interceptSendToEndpoint"/>
+            <xs:element ref="tns:kamelet"/>
+            <xs:element ref="tns:loadBalance"/>
+            <xs:element ref="tns:log"/>
+            <xs:element ref="tns:loop"/>
+            <xs:element ref="tns:marshal"/>
+            <xs:element ref="tns:multicast"/>
+            <xs:element ref="tns:onCompletion"/>
+            <xs:element ref="tns:onException"/>
+            <xs:element ref="tns:pausable"/>
+            <xs:element ref="tns:pipeline"/>
+            <xs:element ref="tns:policy"/>
+            <xs:element ref="tns:poll"/>
+            <xs:element ref="tns:pollEnrich"/>
+            <xs:element ref="tns:process"/>
+            <xs:element ref="tns:recipientList"/>
+            <xs:element ref="tns:removeHeader"/>
+            <xs:element ref="tns:removeHeaders"/>
+            <xs:element ref="tns:removeProperties"/>
+            <xs:element ref="tns:removeProperty"/>
+            <xs:element ref="tns:removeVariable"/>
+            <xs:element ref="tns:resequence"/>
+            <xs:element ref="tns:resumable"/>
+            <xs:element ref="tns:rollback"/>
+            <xs:element ref="tns:route"/>
+            <xs:element ref="tns:routingSlip"/>
+            <xs:element ref="tns:saga"/>
+            <xs:element ref="tns:sample"/>
+            <xs:element ref="tns:script"/>
+            <xs:element ref="tns:setBody"/>
+            <xs:element ref="tns:setExchangePattern"/>
+            <xs:element ref="tns:setHeader"/>
+            <xs:element ref="tns:setHeaders"/>
+            <xs:element ref="tns:setProperty"/>
+            <xs:element ref="tns:setVariable"/>
+            <xs:element ref="tns:setVariables"/>
+            <xs:element ref="tns:sort"/>
+            <xs:element ref="tns:split"/>
+            <xs:element ref="tns:step"/>
+            <xs:element ref="tns:stop"/>
+            <xs:element ref="tns:threads"/>
+            <xs:element ref="tns:throttle"/>
+            <xs:element ref="tns:throwException"/>
+            <xs:element ref="tns:to"/>
+            <xs:element ref="tns:toD"/>
+            <xs:element ref="tns:tokenizer"/>
+            <xs:element ref="tns:transacted"/>
+            <xs:element ref="tns:transformDataType"/>
+            <xs:element ref="tns:transform"/>
+            <xs:element ref="tns:doTry"/>
+            <xs:element ref="tns:unmarshal"/>
+            <xs:element ref="tns:validate"/>
+            <xs:element ref="tns:wireTap"/>
+          </xs:choice>
+        </xs:sequence>
+        <xs:attribute name="disabled" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Disables this EIP from the route. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="circuitBreakerDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:output">
+        <xs:sequence>
+          <xs:element minOccurs="0" ref="tns:resilience4jConfiguration"/>
+          <xs:element minOccurs="0" ref="tns:faultToleranceConfiguration"/>
+          <xs:choice maxOccurs="unbounded" minOccurs="0">
+            <xs:element ref="tns:aggregate"/>
+            <xs:element ref="tns:bean"/>
+            <xs:element ref="tns:doCatch"/>
+            <xs:element ref="tns:choice"/>
+            <xs:element ref="tns:circuitBreaker"/>
+            <xs:element ref="tns:claimCheck"/>
+            <xs:element ref="tns:convertBodyTo"/>
+            <xs:element ref="tns:convertHeaderTo"/>
+            <xs:element ref="tns:convertVariableTo"/>
+            <xs:element ref="tns:delay"/>
+            <xs:element ref="tns:dynamicRouter"/>
+            <xs:element ref="tns:enrich"/>
+            <xs:element ref="tns:filter"/>
+            <xs:element ref="tns:doFinally"/>
+            <xs:element ref="tns:idempotentConsumer"/>
+            <xs:element ref="tns:intercept"/>
+            <xs:element ref="tns:interceptFrom"/>
+            <xs:element ref="tns:interceptSendToEndpoint"/>
+            <xs:element ref="tns:kamelet"/>
+            <xs:element ref="tns:loadBalance"/>
+            <xs:element ref="tns:log"/>
+            <xs:element ref="tns:loop"/>
+            <xs:element ref="tns:marshal"/>
+            <xs:element ref="tns:multicast"/>
+            <xs:element ref="tns:onCompletion"/>
+            <xs:element ref="tns:onException"/>
+            <xs:element ref="tns:pausable"/>
+            <xs:element ref="tns:pipeline"/>
+            <xs:element ref="tns:policy"/>
+            <xs:element ref="tns:poll"/>
+            <xs:element ref="tns:pollEnrich"/>
+            <xs:element ref="tns:process"/>
+            <xs:element ref="tns:recipientList"/>
+            <xs:element ref="tns:removeHeader"/>
+            <xs:element ref="tns:removeHeaders"/>
+            <xs:element ref="tns:removeProperties"/>
+            <xs:element ref="tns:removeProperty"/>
+            <xs:element ref="tns:removeVariable"/>
+            <xs:element ref="tns:resequence"/>
+            <xs:element ref="tns:resumable"/>
+            <xs:element ref="tns:rollback"/>
+            <xs:element ref="tns:route"/>
+            <xs:element ref="tns:routingSlip"/>
+            <xs:element ref="tns:saga"/>
+            <xs:element ref="tns:sample"/>
+            <xs:element ref="tns:script"/>
+            <xs:element ref="tns:setBody"/>
+            <xs:element ref="tns:setExchangePattern"/>
+            <xs:element ref="tns:setHeader"/>
+            <xs:element ref="tns:setHeaders"/>
+            <xs:element ref="tns:setProperty"/>
+            <xs:element ref="tns:setVariable"/>
+            <xs:element ref="tns:setVariables"/>
+            <xs:element ref="tns:sort"/>
+            <xs:element ref="tns:split"/>
+            <xs:element ref="tns:step"/>
+            <xs:element ref="tns:stop"/>
+            <xs:element ref="tns:threads"/>
+            <xs:element ref="tns:throttle"/>
+            <xs:element ref="tns:throwException"/>
+            <xs:element ref="tns:to"/>
+            <xs:element ref="tns:toD"/>
+            <xs:element ref="tns:tokenizer"/>
+            <xs:element ref="tns:transacted"/>
+            <xs:element ref="tns:transformDataType"/>
+            <xs:element ref="tns:transform"/>
+            <xs:element ref="tns:doTry"/>
+            <xs:element ref="tns:unmarshal"/>
+            <xs:element ref="tns:validate"/>
+            <xs:element ref="tns:wireTap"/>
+          </xs:choice>
+          <xs:element minOccurs="0" ref="tns:onFallback"/>
+        </xs:sequence>
+        <xs:attribute name="configuration" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+Refers to a circuit breaker configuration (such as resillience4j, or microprofile-fault-tolerance) to use for
+configuring the circuit breaker EIP.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="inheritErrorHandler" type="xs:boolean">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+To turn on or off Camel error handling during circuit breaker. If this is enabled then Camel error handler will first
+trigger if there is an error in the circuit breaker, which allows to let Camel handle redeliveries. If all attempts is
+failed, then after the circuit breaker is finished, then Camel error handler can handle the error as well such as the
+dead letter channel. By default, Camel error handler is turned off. Default value: false
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="resilience4JConfigurationDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:resilience4JConfigurationCommon">
+        <xs:sequence/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+  <xs:complexType name="resilience4JConfigurationCommon">
+    <xs:complexContent>
+      <xs:extension base="tns:identifiedType">
+        <xs:sequence>
+          <xs:element maxOccurs="unbounded" minOccurs="0" name="recordException" type="xs:string">
+            <xs:annotation>
               <xs:documentation xml:lang="en">
-<![CDATA[
-Configure a list of exceptions that are recorded as a failure and thus increase the failure rate. Any exception matching
-or inheriting from one of the list counts as a failure, unless explicitly ignored via ignoreExceptions.
-]]>
-              </xs:documentation>
-            </xs:annotation>
-          </xs:element>
-          <xs:element maxOccurs="unbounded" minOccurs="0" name="ignoreException" type="xs:string">
-            <xs:annotation>
+<![CDATA[
+Configure a list of exceptions that are recorded as a failure and thus increase the failure rate. Any exception matching
+or inheriting from one of the list counts as a failure, unless explicitly ignored via ignoreExceptions.
+]]>
+              </xs:documentation>
+            </xs:annotation>
+          </xs:element>
+          <xs:element maxOccurs="unbounded" minOccurs="0" name="ignoreException" type="xs:string">
+            <xs:annotation>
               <xs:documentation xml:lang="en">
-<![CDATA[
-Configure a list of exceptions that are ignored and neither count as a failure nor success. Any exception matching or
-inheriting from one of the list will not count as a failure nor success, even if the exceptions is part of
-recordExceptions.
-]]>
-              </xs:documentation>
-            </xs:annotation>
-          </xs:element>
-        </xs:sequence>
-        <xs:attribute name="circuitBreaker" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Refers to an existing io.github.resilience4j.circuitbreaker.CircuitBreaker instance to lookup and use from the registry.
-When using this, then any other circuit breaker options are not in use.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="config" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Refers to an existing io.github.resilience4j.circuitbreaker.CircuitBreakerConfig instance to lookup and use from the
-registry.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="failureRateThreshold" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Configures the failure rate threshold in percentage. If the failure rate is equal or greater than the threshold the
-CircuitBreaker transitions to open and starts short-circuiting calls. The threshold must be greater than 0 and not
-greater than 100. Default value is 50 percentage. Default value: 50
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="permittedNumberOfCallsInHalfOpenState" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Configures the number of permitted calls when the CircuitBreaker is half open. The size must be greater than 0. Default
-size is 10. Default value: 10
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="throwExceptionWhenHalfOpenOrOpenState" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Whether to throw io.github.resilience4j.circuitbreaker.CallNotPermittedException when the call is rejected due circuit
-breaker is half open (and was not attempted but rejected immediately) or open (always rejected). This option is only in
-use when there is NOT a fallback configured on the circuit breaker. When there is a fallback then the fallback is always
-executed and CallNotPermittedException is not thrown. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="slidingWindowSize" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Configures the size of the sliding window which is used to record the outcome of calls when the CircuitBreaker is
-closed. slidingWindowSize configures the size of the sliding window. Sliding window can either be count-based or
-time-based. If slidingWindowType is COUNT_BASED, the last slidingWindowSize calls are recorded and aggregated. If
-slidingWindowType is TIME_BASED, the calls of the last slidingWindowSize seconds are recorded and aggregated. The
-slidingWindowSize must be greater than 0. The minimumNumberOfCalls must be greater than 0. If the slidingWindowType is
-COUNT_BASED, the minimumNumberOfCalls cannot be greater than slidingWindowSize . If the slidingWindowType is TIME_BASED,
-you can pick whatever you want. Default slidingWindowSize is 100. Default value: 100
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="slidingWindowType" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Configures the type of the sliding window which is used to record the outcome of calls when the CircuitBreaker is
-closed. Sliding window can either be count-based or time-based. If slidingWindowType is COUNT_BASED, the last
-slidingWindowSize calls are recorded and aggregated. If slidingWindowType is TIME_BASED, the calls of the last
-slidingWindowSize seconds are recorded and aggregated. Default slidingWindowType is COUNT_BASED. Default value:
-COUNT_BASED
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="minimumNumberOfCalls" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Configures the minimum number of calls which are required (per sliding window period) before the CircuitBreaker can
-calculate the error rate. For example, if minimumNumberOfCalls is 10, then at least 10 calls must be recorded, before
-the failure rate can be calculated. If only 9 calls have been recorded the CircuitBreaker will not transition to open
-even if all 9 calls have failed. Default minimumNumberOfCalls is 100. Default value: 100
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="writableStackTraceEnabled" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Enables writable stack traces. When set to false, Exception.getStackTrace returns a zero length array. This may be used
-to reduce log spam when the circuit breaker is open as the cause of the exceptions is already known (the circuit breaker
-is short-circuiting calls). Default value: true
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="waitDurationInOpenState" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Configures the wait duration (in seconds) which specifies how long the CircuitBreaker should stay open, before it
-switches to half open. Default value is 60 seconds. Default value: 60
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="automaticTransitionFromOpenToHalfOpenEnabled" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Enables automatic transition from OPEN to HALF_OPEN state once the waitDurationInOpenState has passed. Default value:
-false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="slowCallRateThreshold" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Configures a threshold in percentage. The CircuitBreaker considers a call as slow when the call duration is greater than
-slowCallDurationThreshold Duration. When the percentage of slow calls is equal or greater the threshold, the
-CircuitBreaker transitions to open and starts short-circuiting calls. The threshold must be greater than 0 and not
-greater than 100. Default value is 100 percentage which means that all recorded calls must be slower than
-slowCallDurationThreshold. Default value: 100
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="slowCallDurationThreshold" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Configures the duration threshold (seconds) above which calls are considered as slow and increase the slow calls
-percentage. Default value is 60 seconds. Default value: 60
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="bulkheadEnabled" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Whether bulkhead is enabled or not on the circuit breaker. Default is false. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="bulkheadMaxConcurrentCalls" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Configures the max amount of concurrent calls the bulkhead will support. Default value: 25
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="bulkheadMaxWaitDuration" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Configures a maximum amount of time which the calling thread will wait to enter the bulkhead. If bulkhead has space
-available, entry is guaranteed and immediate. If bulkhead is full, calling threads will contest for space, if it becomes
-available. maxWaitDuration can be set to 0. Note: for threads running on an event-loop or equivalent (rx computation
-pool, etc), setting maxWaitDuration to 0 is highly recommended. Blocking an event-loop thread will most likely have a
-negative effect on application throughput. Default value: 0
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="timeoutEnabled" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Whether timeout is enabled or not on the circuit breaker. Default is false. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="timeoutExecutorService" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-References to a custom thread pool to use when timeout is enabled (uses ForkJoinPool#commonPool() by default).
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="timeoutDuration" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Configures the thread execution timeout. Default value is 1 second. Default value: 1000
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="timeoutCancelRunningFuture" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Configures whether cancel is called on the running future. Defaults to true. Default value: true
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="micrometerEnabled" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Whether to enable collecting statistics using Micrometer. This requires adding camel-resilience4j-micrometer JAR to the
-classpath. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType name="faultToleranceConfigurationDefinition">
-    <xs:complexContent>
-      <xs:extension base="tns:faultToleranceConfigurationCommon">
-        <xs:sequence/>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-  <xs:complexType name="faultToleranceConfigurationCommon">
-    <xs:complexContent>
-      <xs:extension base="tns:identifiedType">
-        <xs:sequence/>
-        <xs:attribute name="typedGuard" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Refers to an existing io.smallrye.faulttolerance.api.TypedGuard instance to lookup and use from the registry. When using
-this, then any other TypedGuard circuit breaker options are not in use.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="delay" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Control how long the circuit breaker stays open. The default is 5 seconds. Default value: 5000
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="successThreshold" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Controls the number of trial calls which are allowed when the circuit breaker is half-open. Default value: 1
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="requestVolumeThreshold" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Controls the size of the rolling window used when the circuit breaker is closed. Default value: 20
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="failureRatio" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Configures the failure rate threshold in percentage. If the failure rate is equal or greater than the threshold the
-CircuitBreaker transitions to open and starts short-circuiting calls. The threshold must be greater than 0 and not
-greater than 100. Default value is 50 percentage. Default value: 50
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="timeoutEnabled" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Whether timeout is enabled or not on the circuit breaker. Default is false. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="timeoutDuration" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Configures the thread execution timeout. Default value is 1 second. Default value: 1000
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="timeoutPoolSize" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Configures the pool size of the thread pool when timeout is enabled. Default value is 10. Default value: 10
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="bulkheadEnabled" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Whether bulkhead is enabled or not on the circuit breaker. Default is false. Default value: false
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="bulkheadMaxConcurrentCalls" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Configures the max amount of concurrent calls the bulkhead will support. Default value: 10
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="bulkheadWaitingTaskQueue" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-Configures the task queue size for holding waiting tasks to be processed by the bulkhead. Default value: 10
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="threadOffloadExecutorService" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-References a custom thread pool to use when offloading a guarded action to another thread.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
... 61238 lines suppressed ...


(camel) 03/09: chore(doc): explain core processors changes

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch code-massel-CAMEL-23352
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 82b0586c8b0aa72a182b1679d44204568d2a8f8e
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Thu May 7 08:46:47 2026 +0200

    chore(doc): explain core processors changes
---
 .../modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc     | 13 +++++++++++--
 proposals/tracing.adoc                                      |  8 +++++++-
 2 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc
index ced0afa3677c..8e70f77d4738 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_21.adoc
@@ -218,7 +218,17 @@ Camel Grape was deprecated with Camel 4.0. The component is now removed.
 
 === camel-telemetry
 
-If you have custom telemetry implementations, the following interfaces have changed:
+In order to prevent some potential span leakage in `camel-opentelemetry2` (see notes below) we had to perform some changes and introduce the following parameter:
+
+```
+|`disableCoreProcessors`| false | Disable any inner core processors (any core DSL processor provided in the route, for example `bean`, `log`, ...).
+```
+
+This is required in order to distinguish the older `traceProcessors` parameter which now accounts **exclusively** for custom processors. Keeping the default parameter (`false`) could increase the number of spans generated, though, this is required to guarantee consistency and memory sealing. If you need to reduce the number of spans for any reason you can explicitly provide exclusion configuration.
+
+NOTE: turn `disableCoreProcessors` to `true` and `traceProcessors` to `false` to skip entirely all processors. However it is not recommended to disable core processors in order to avoid the generation of third party dependencies orphaned spans.
+
+In this version we have also changed certain interfaces, so, if you have custom telemetry implementations, you may need to adjust to them:
 
 ==== `org.apache.camel.telemetry.SpanLifecycleManager`
 
@@ -271,4 +281,3 @@ The component camel-digitalocean is deprecated. The java library used has been u
 === Deprecation of camel-irc
 
 The component camel-irc is deprecated. The library used had no stable release since 2007. There is no Java library very active for this protocol.
-
diff --git a/proposals/tracing.adoc b/proposals/tracing.adoc
index 9d91978df7e2..2dad31f57653 100644
--- a/proposals/tracing.adoc
+++ b/proposals/tracing.adoc
@@ -9,7 +9,7 @@ approvers:
   - "@zbendhiba"
   - "@davsclaus"
 creation-date: 2025-01-08
-last-updated: 2026-05-04
+last-updated: 2026-05-07
 status: implemented
 see-also: []
 replaces: []
@@ -167,3 +167,9 @@ As described in https://issues.apache.org/jira/browse/CAMEL-23380 any version be
 In order to prevent this problem we need to rethink the implementation details of `camel-opentelemetry2` and remove the explicit `Scope` management that, when asynchronous, was opening the `Scope` in a thread and closing in another (what we had called "dirty" context). We are now removing this explicit management and moving this part exclusively in the custom Camel `Processors`. Here Camel will take care to open the Opentelemetry scope and close it within the same thread.
 
 What it means is that, from now on we get rid of the leak but the final user or any third party dependency can only access the Opentelemetry context within the boundary of a Processor execution.
+
+=== Distinguish custom Processors from core Processors (2026-05-07)
+
+The custom processors must be distinguished from core processors in order to let the user disable span generation only for custom processors. This is an **important design constraint** required to ensure that the core processors spans are always generated during an execution. With this constraint we ensure that any third party instrumentation span (which generally happens at core Processor level) is correctly nested.
+
+Disabling this feature is possible and could work for simple tracing. However it is not recommended and the user should always fine tune the exclusions of processors explicitly in case he wants to reduce the number of generated spans.


(camel) 02/09: feat(components): distinguish core processors from custom processors

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch code-massel-CAMEL-23352
in repository https://gitbox.apache.org/repos/asf/camel.git

commit ba2d9ee3490fb844a9afb6b33120942a1f91796c
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Wed May 6 12:07:13 2026 +0200

    feat(components): distinguish core processors from custom processors
    
    * Include `disableCoreProcessors`
    * Adjusted test with the new parameter
    * Doc explanation
    
    Ref CAMEL-23432
---
 .../camel-telemetry/src/main/docs/telemetry.adoc   |  7 ++--
 .../TraceProcessorsInterceptStrategy.java          | 18 ++++++++--
 .../java/org/apache/camel/telemetry/Tracer.java    | 10 ++++++
 .../org/apache/camel/telemetry/AsyncCXFTest.java   |  1 +
 .../apache/camel/telemetry/AsyncDirectTest.java    |  1 +
 .../java/org/apache/camel/telemetry/AsyncTest.java |  1 +
 .../apache/camel/telemetry/AsyncWiretapTest.java   |  1 +
 .../camel/telemetry/DisableEndpointTest.java       |  1 +
 ...sorsTest.java => EnableCoreProcessorsTest.java} | 14 +++-----
 .../camel/telemetry/EnableProcessorsTest.java      | 15 +++------
 .../apache/camel/telemetry/HeadersTraceTest.java   |  1 +
 ...EnableProcessorsTest.java => SpanBeanTest.java} | 39 ++++++++++++++++------
 .../camel/telemetry/SpanLifecycleManagerTest.java  |  1 +
 .../telemetry/SpanPropagationDownstreamTest.java   |  1 +
 .../telemetry/SpanPropagationUpstreamTest.java     |  1 +
 .../apache/camel/telemetry/mock/MockTracer.java    |  5 +--
 16 files changed, 80 insertions(+), 37 deletions(-)

diff --git a/components/camel-telemetry/src/main/docs/telemetry.adoc b/components/camel-telemetry/src/main/docs/telemetry.adoc
index 148d7a9cfe67..9d09d5fafbf3 100644
--- a/components/camel-telemetry/src/main/docs/telemetry.adoc
+++ b/components/camel-telemetry/src/main/docs/telemetry.adoc
@@ -26,7 +26,8 @@ The configuration properties for the Telemetry component are:
 [width="100%",cols="10%,10%,80%",options="header",]
 |=======================================================================
 |Option |Default |Description
-|`traceProcessors`| false | Trace inner processors.
+|`traceProcessors`| false | Trace inner custom processors (i.e., any `process` configured in the route).
+|`disableCoreProcessors`| false | Disable any inner core processors (any core DSL processor provided in the route, for example `bean`, `log`, ...).
 |`excludePatterns` |  | Sets exclude pattern that will disable tracing for those spans that matches the pattern. The variable is a comma separated values of filters to execute (eg, `log*,direct*,setBody*`, ...)
 |`traceHeadersInclusion`| false | Add the generated telemetry `CAMEL_TRACE_ID` and `CAMEL_SPAN_ID` Exchange headers.
 |=======================================================================
@@ -121,12 +122,14 @@ The upstream application must inject the context into the event sent (typically
 
 This feature is implementation specific, the abstraction just provide the interface that must be implemented concretely in each of the implementation.
 
-=== Processor tracing
+=== Custom Processor tracing
 
 When this feature is enabled, you will be able to collect a finer grain number of Spans into a Trace. Each of the different endpoint processors will be collected. You can enable the feature using the `traceProcessors` parameter (default `false`).
 
 NOTE: enabling this feature will provide many more Spans for each Trace.
 
+By default, the "core" processors part of any Camel DSL (for example, `bean`, `log`, ...) are included in order to manage properly any further instrumentation done at this level. Disabling this feature is not recommended but it can be done via `disableCoreProcessors` parameter.
+
 == Implementation specific abstraction
 
 NOTE: the following chapter is dedicate exclusively to developers willing to create a concrete implementation for this component.
diff --git a/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/TraceProcessorsInterceptStrategy.java b/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/TraceProcessorsInterceptStrategy.java
index 5b4ea9c53ba2..bad5cadafaa8 100644
--- a/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/TraceProcessorsInterceptStrategy.java
+++ b/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/TraceProcessorsInterceptStrategy.java
@@ -57,7 +57,9 @@ public class TraceProcessorsInterceptStrategy implements InterceptStrategy {
         @Override
         public void process(Exchange exchange) throws Exception {
             String processorName = processorDefinition.getId() + "-" + processorDefinition.getShortName();
-            if (tracer.isTraceProcessors() && !tracer.exclude(processorName, exchange.getContext())) {
+            if ((isCoreProcessEnabled(tracer.isDisableCoreProcessors(), processorDefinition.getShortName()) ||
+                    isCustomProcessEnabled(tracer.isTraceProcessors(), processorDefinition.getShortName()))
+                    && !tracer.exclude(processorName, exchange.getContext())) {
                 tracer.beginProcessorSpan(exchange, processorName);
                 try {
                     processor.process(exchange);
@@ -73,7 +75,10 @@ public class TraceProcessorsInterceptStrategy implements InterceptStrategy {
         @Override
         public boolean process(Exchange exchange, AsyncCallback callback) {
             String processorName = processorDefinition.getId() + "-" + processorDefinition.getShortName();
-            boolean isTraceProcessor = tracer.isTraceProcessors() && !tracer.exclude(processorName, exchange.getContext());
+            boolean isTraceProcessor
+                    = (isCoreProcessEnabled(tracer.isDisableCoreProcessors(), processorDefinition.getShortName()) ||
+                            isCustomProcessEnabled(tracer.isTraceProcessors(), processorDefinition.getShortName()))
+                            && !tracer.exclude(processorName, exchange.getContext());
             if (isTraceProcessor) {
                 try {
                     tracer.beginProcessorSpan(exchange, processorName);
@@ -105,4 +110,13 @@ public class TraceProcessorsInterceptStrategy implements InterceptStrategy {
         }
     }
 
+    private boolean isCoreProcessEnabled(boolean isDisableCoreProcessors, String processDefinitionShortName) {
+        // Any enabled core process which is not a "custom" processor.
+        return !isDisableCoreProcessors && !processDefinitionShortName.equals("process");
+    }
+
+    private boolean isCustomProcessEnabled(boolean isTraceProcessors, String processDefinitionShortName) {
+        // Any custom core process.
+        return isTraceProcessors && processDefinitionShortName.equals("process");
+    }
 }
diff --git a/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/Tracer.java b/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/Tracer.java
index 0c5ada29eb23..6b2af88b9dd2 100644
--- a/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/Tracer.java
+++ b/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/Tracer.java
@@ -56,6 +56,7 @@ public abstract class Tracer extends ServiceSupport implements CamelTracingServi
      */
     private String excludePatterns;
     private boolean traceProcessors;
+    private boolean disableCoreProcessors = false;
     private boolean traceHeadersInclusion;
 
     private final TracingEventNotifier eventNotifier = new TracingEventNotifier();
@@ -106,6 +107,15 @@ public abstract class Tracer extends ServiceSupport implements CamelTracingServi
         this.traceProcessors = traceProcessors;
     }
 
+    @ManagedAttribute
+    public boolean isDisableCoreProcessors() {
+        return disableCoreProcessors;
+    }
+
+    public void setDisableCoreProcessors(boolean disableCoreProcessors) {
+        this.disableCoreProcessors = disableCoreProcessors;
+    }
+
     public SpanLifecycleManager getSpanLifecycleManager() {
         return this.spanLifecycleManager;
     }
diff --git a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/AsyncCXFTest.java b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/AsyncCXFTest.java
index 011e8213f9db..7852e4689e8f 100644
--- a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/AsyncCXFTest.java
+++ b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/AsyncCXFTest.java
@@ -49,6 +49,7 @@ public class AsyncCXFTest extends ExchangeTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         CamelContext context = super.createCamelContext();
         this.mockTracer = new MockTracer();
+        this.mockTracer.setDisableCoreProcessors(true);
         CamelContextAware.trySetCamelContext(mockTracer, context);
         mockTracer.init(context);
         return context;
diff --git a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/AsyncDirectTest.java b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/AsyncDirectTest.java
index a8a417e7e62f..1022a70ef52c 100644
--- a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/AsyncDirectTest.java
+++ b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/AsyncDirectTest.java
@@ -41,6 +41,7 @@ public class AsyncDirectTest extends ExchangeTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         CamelContext context = super.createCamelContext();
         this.mockTracer = new MockTracer();
+        this.mockTracer.setDisableCoreProcessors(true);
         CamelContextAware.trySetCamelContext(mockTracer, context);
         mockTracer.init(context);
         return context;
diff --git a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/AsyncTest.java b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/AsyncTest.java
index 78e0824e65b5..9d3d0b298c71 100644
--- a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/AsyncTest.java
+++ b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/AsyncTest.java
@@ -45,6 +45,7 @@ public class AsyncTest extends ExchangeTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         CamelContext context = super.createCamelContext();
         this.mockTracer = new MockTracer();
+        this.mockTracer.setDisableCoreProcessors(true);
         CamelContextAware.trySetCamelContext(mockTracer, context);
         mockTracer.init(context);
         return context;
diff --git a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/AsyncWiretapTest.java b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/AsyncWiretapTest.java
index e08ca11974b7..359c5ca7d25f 100644
--- a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/AsyncWiretapTest.java
+++ b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/AsyncWiretapTest.java
@@ -46,6 +46,7 @@ public class AsyncWiretapTest extends ExchangeTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         CamelContext context = super.createCamelContext();
         this.mockTracer = new MockTracer();
+        this.mockTracer.setDisableCoreProcessors(true);
         CamelContextAware.trySetCamelContext(mockTracer, context);
         mockTracer.init(context);
         return context;
diff --git a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/DisableEndpointTest.java b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/DisableEndpointTest.java
index c74e930b0088..2dc23f570c4d 100644
--- a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/DisableEndpointTest.java
+++ b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/DisableEndpointTest.java
@@ -44,6 +44,7 @@ public class DisableEndpointTest extends ExchangeTestSupport {
         CamelContext context = super.createCamelContext();
         this.mockTracer = new MockTracer();
         mockTracer.setTraceProcessors(true);
+        this.mockTracer.setDisableCoreProcessors(true);
         mockTracer.setExcludePatterns("log*,to*,setVariable*");
         CamelContextAware.trySetCamelContext(mockTracer, context);
         mockTracer.init(context);
diff --git a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/EnableProcessorsTest.java b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/EnableCoreProcessorsTest.java
similarity index 87%
copy from components/camel-telemetry/src/test/java/org/apache/camel/telemetry/EnableProcessorsTest.java
copy to components/camel-telemetry/src/test/java/org/apache/camel/telemetry/EnableCoreProcessorsTest.java
index a2d2ddbb564f..62c50a27899d 100644
--- a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/EnableProcessorsTest.java
+++ b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/EnableCoreProcessorsTest.java
@@ -34,7 +34,7 @@ import org.junit.jupiter.api.Test;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
 
-public class EnableProcessorsTest extends ExchangeTestSupport {
+public class EnableCoreProcessorsTest extends ExchangeTestSupport {
 
     MockTracer mockTracer;
 
@@ -42,7 +42,6 @@ public class EnableProcessorsTest extends ExchangeTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         CamelContext context = super.createCamelContext();
         this.mockTracer = new MockTracer();
-        mockTracer.setTraceProcessors(true);
         CamelContextAware.trySetCamelContext(mockTracer, context);
         mockTracer.init(context);
         return context;
@@ -58,40 +57,35 @@ public class EnableProcessorsTest extends ExchangeTestSupport {
 
     private void checkTrace(MockTrace trace) {
         List<Span> spans = trace.spans();
-        assertEquals(6, spans.size());
+        assertEquals(5, spans.size());
         // Cast to implementation object to be able to
         // inspect the status of the Span.
         MockSpanAdapter testProducer = (MockSpanAdapter) spans.get(0);
         MockSpanAdapter direct = (MockSpanAdapter) spans.get(1);
         MockSpanAdapter innerLog = (MockSpanAdapter) spans.get(2);
-        MockSpanAdapter innerProcessor = (MockSpanAdapter) spans.get(3);
-        MockSpanAdapter log = (MockSpanAdapter) spans.get(4);
-        MockSpanAdapter innerToLog = (MockSpanAdapter) spans.get(5);
+        MockSpanAdapter log = (MockSpanAdapter) spans.get(3);
+        MockSpanAdapter innerToLog = (MockSpanAdapter) spans.get(4);
 
         // Validate span completion
         assertEquals("true", testProducer.getTag("isDone"));
         assertEquals("true", direct.getTag("isDone"));
         assertEquals("true", innerLog.getTag("isDone"));
-        assertEquals("true", innerProcessor.getTag("isDone"));
         assertEquals("true", log.getTag("isDone"));
         assertEquals("true", innerToLog.getTag("isDone"));
 
         // Validate same trace
         assertEquals(testProducer.getTag("traceid"), direct.getTag("traceid"));
         assertEquals(testProducer.getTag("traceid"), innerLog.getTag("traceid"));
-        assertEquals(testProducer.getTag("traceid"), innerProcessor.getTag("traceid"));
         assertEquals(testProducer.getTag("traceid"), log.getTag("traceid"));
         assertEquals(testProducer.getTag("traceid"), innerToLog.getTag("traceid"));
 
         // Validate op
         assertEquals(Op.EVENT_RECEIVED.toString(), direct.getTag("op"));
-        assertEquals(Op.EVENT_PROCESS.toString(), innerProcessor.getTag("op"));
 
         // Validate hierarchy
         assertNull(testProducer.getTag("parentSpan"));
         assertEquals(testProducer.getTag("spanid"), direct.getTag("parentSpan"));
         assertEquals(direct.getTag("spanid"), innerLog.getTag("parentSpan"));
-        assertEquals(direct.getTag("spanid"), innerProcessor.getTag("parentSpan"));
         assertEquals(direct.getTag("spanid"), log.getTag("parentSpan"));
         assertEquals(log.getTag("spanid"), innerToLog.getTag("parentSpan"));
     }
diff --git a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/EnableProcessorsTest.java b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/EnableProcessorsTest.java
index a2d2ddbb564f..f7a255d704f4 100644
--- a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/EnableProcessorsTest.java
+++ b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/EnableProcessorsTest.java
@@ -43,6 +43,7 @@ public class EnableProcessorsTest extends ExchangeTestSupport {
         CamelContext context = super.createCamelContext();
         this.mockTracer = new MockTracer();
         mockTracer.setTraceProcessors(true);
+        this.mockTracer.setDisableCoreProcessors(true);
         CamelContextAware.trySetCamelContext(mockTracer, context);
         mockTracer.init(context);
         return context;
@@ -58,30 +59,24 @@ public class EnableProcessorsTest extends ExchangeTestSupport {
 
     private void checkTrace(MockTrace trace) {
         List<Span> spans = trace.spans();
-        assertEquals(6, spans.size());
+        assertEquals(4, spans.size());
         // Cast to implementation object to be able to
         // inspect the status of the Span.
         MockSpanAdapter testProducer = (MockSpanAdapter) spans.get(0);
         MockSpanAdapter direct = (MockSpanAdapter) spans.get(1);
-        MockSpanAdapter innerLog = (MockSpanAdapter) spans.get(2);
-        MockSpanAdapter innerProcessor = (MockSpanAdapter) spans.get(3);
-        MockSpanAdapter log = (MockSpanAdapter) spans.get(4);
-        MockSpanAdapter innerToLog = (MockSpanAdapter) spans.get(5);
+        MockSpanAdapter innerProcessor = (MockSpanAdapter) spans.get(2);
+        MockSpanAdapter log = (MockSpanAdapter) spans.get(3);
 
         // Validate span completion
         assertEquals("true", testProducer.getTag("isDone"));
         assertEquals("true", direct.getTag("isDone"));
-        assertEquals("true", innerLog.getTag("isDone"));
         assertEquals("true", innerProcessor.getTag("isDone"));
         assertEquals("true", log.getTag("isDone"));
-        assertEquals("true", innerToLog.getTag("isDone"));
 
         // Validate same trace
         assertEquals(testProducer.getTag("traceid"), direct.getTag("traceid"));
-        assertEquals(testProducer.getTag("traceid"), innerLog.getTag("traceid"));
         assertEquals(testProducer.getTag("traceid"), innerProcessor.getTag("traceid"));
         assertEquals(testProducer.getTag("traceid"), log.getTag("traceid"));
-        assertEquals(testProducer.getTag("traceid"), innerToLog.getTag("traceid"));
 
         // Validate op
         assertEquals(Op.EVENT_RECEIVED.toString(), direct.getTag("op"));
@@ -90,10 +85,8 @@ public class EnableProcessorsTest extends ExchangeTestSupport {
         // Validate hierarchy
         assertNull(testProducer.getTag("parentSpan"));
         assertEquals(testProducer.getTag("spanid"), direct.getTag("parentSpan"));
-        assertEquals(direct.getTag("spanid"), innerLog.getTag("parentSpan"));
         assertEquals(direct.getTag("spanid"), innerProcessor.getTag("parentSpan"));
         assertEquals(direct.getTag("spanid"), log.getTag("parentSpan"));
-        assertEquals(log.getTag("spanid"), innerToLog.getTag("parentSpan"));
     }
 
     @Override
diff --git a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/HeadersTraceTest.java b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/HeadersTraceTest.java
index cce41c81d203..d131e447ece5 100644
--- a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/HeadersTraceTest.java
+++ b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/HeadersTraceTest.java
@@ -41,6 +41,7 @@ public class HeadersTraceTest extends ExchangeTestSupport {
         CamelContext context = super.createCamelContext();
         this.mockTracer = new MockTracer();
         mockTracer.setTraceHeadersInclusion(true);
+        this.mockTracer.setDisableCoreProcessors(true);
         CamelContextAware.trySetCamelContext(mockTracer, context);
         mockTracer.init(context);
         return context;
diff --git a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/EnableProcessorsTest.java b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/SpanBeanTest.java
similarity index 74%
copy from components/camel-telemetry/src/test/java/org/apache/camel/telemetry/EnableProcessorsTest.java
copy to components/camel-telemetry/src/test/java/org/apache/camel/telemetry/SpanBeanTest.java
index a2d2ddbb564f..5480b7db1bda 100644
--- a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/EnableProcessorsTest.java
+++ b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/SpanBeanTest.java
@@ -34,7 +34,7 @@ import org.junit.jupiter.api.Test;
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertNull;
 
-public class EnableProcessorsTest extends ExchangeTestSupport {
+public class SpanBeanTest extends ExchangeTestSupport {
 
     MockTracer mockTracer;
 
@@ -42,7 +42,6 @@ public class EnableProcessorsTest extends ExchangeTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         CamelContext context = super.createCamelContext();
         this.mockTracer = new MockTracer();
-        mockTracer.setTraceProcessors(true);
         CamelContextAware.trySetCamelContext(mockTracer, context);
         mockTracer.init(context);
         return context;
@@ -58,41 +57,44 @@ public class EnableProcessorsTest extends ExchangeTestSupport {
 
     private void checkTrace(MockTrace trace) {
         List<Span> spans = trace.spans();
-        assertEquals(6, spans.size());
+        assertEquals(7, spans.size());
         // Cast to implementation object to be able to
         // inspect the status of the Span.
         MockSpanAdapter testProducer = (MockSpanAdapter) spans.get(0);
         MockSpanAdapter direct = (MockSpanAdapter) spans.get(1);
         MockSpanAdapter innerLog = (MockSpanAdapter) spans.get(2);
-        MockSpanAdapter innerProcessor = (MockSpanAdapter) spans.get(3);
-        MockSpanAdapter log = (MockSpanAdapter) spans.get(4);
-        MockSpanAdapter innerToLog = (MockSpanAdapter) spans.get(5);
+        MockSpanAdapter bean = (MockSpanAdapter) spans.get(3);
+        MockSpanAdapter beanMethod = (MockSpanAdapter) spans.get(4);
+        MockSpanAdapter log = (MockSpanAdapter) spans.get(5);
+        MockSpanAdapter innerToLog = (MockSpanAdapter) spans.get(6);
 
         // Validate span completion
         assertEquals("true", testProducer.getTag("isDone"));
         assertEquals("true", direct.getTag("isDone"));
         assertEquals("true", innerLog.getTag("isDone"));
-        assertEquals("true", innerProcessor.getTag("isDone"));
+        assertEquals("true", bean.getTag("isDone"));
+        assertEquals("true", beanMethod.getTag("isDone"));
         assertEquals("true", log.getTag("isDone"));
         assertEquals("true", innerToLog.getTag("isDone"));
 
         // Validate same trace
         assertEquals(testProducer.getTag("traceid"), direct.getTag("traceid"));
         assertEquals(testProducer.getTag("traceid"), innerLog.getTag("traceid"));
-        assertEquals(testProducer.getTag("traceid"), innerProcessor.getTag("traceid"));
         assertEquals(testProducer.getTag("traceid"), log.getTag("traceid"));
+        assertEquals(testProducer.getTag("traceid"), bean.getTag("traceid"));
+        assertEquals(testProducer.getTag("traceid"), beanMethod.getTag("traceid"));
         assertEquals(testProducer.getTag("traceid"), innerToLog.getTag("traceid"));
 
         // Validate op
         assertEquals(Op.EVENT_RECEIVED.toString(), direct.getTag("op"));
-        assertEquals(Op.EVENT_PROCESS.toString(), innerProcessor.getTag("op"));
 
         // Validate hierarchy
         assertNull(testProducer.getTag("parentSpan"));
         assertEquals(testProducer.getTag("spanid"), direct.getTag("parentSpan"));
         assertEquals(direct.getTag("spanid"), innerLog.getTag("parentSpan"));
-        assertEquals(direct.getTag("spanid"), innerProcessor.getTag("parentSpan"));
         assertEquals(direct.getTag("spanid"), log.getTag("parentSpan"));
+        assertEquals(direct.getTag("spanid"), bean.getTag("parentSpan"));
+        assertEquals(bean.getTag("spanid"), beanMethod.getTag("parentSpan"));
         assertEquals(log.getTag("spanid"), innerToLog.getTag("parentSpan"));
     }
 
@@ -101,9 +103,13 @@ public class EnableProcessorsTest extends ExchangeTestSupport {
         return new RouteBuilder() {
             @Override
             public void configure() {
+                MyBean myBean = new MyBean();
+                this.getCamelContext().getRegistry().bind("myBean", myBean);
+
                 from("direct:start")
                         .routeId("start")
                         .log("A message")
+                        .bean(MyBean.class)
                         .process(new Processor() {
                             @Override
                             public void process(Exchange exchange) throws Exception {
@@ -115,4 +121,17 @@ public class EnableProcessorsTest extends ExchangeTestSupport {
         };
     }
 
+    class MyBean {
+        // We simulate the creation of a Span by hand.
+        public void helloWorld(Exchange exchange) {
+            // We just simulate the creation of a span and proper nesting. In a real implementation
+            // it is up to the telemetry technology to do so (for example, via method annotations)
+            Span parentSpan = new SpanStorageManagerExchange().peek(exchange);
+            Span span = mockTracer.slcm.create("mySpan", "bo", parentSpan, null);
+            mockTracer.slcm.activate(span);
+            mockTracer.slcm.deactivate(span);
+            mockTracer.slcm.close(span);
+        }
+    }
+
 }
diff --git a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/SpanLifecycleManagerTest.java b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/SpanLifecycleManagerTest.java
index ceefe59e720c..d7f52704ac47 100644
--- a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/SpanLifecycleManagerTest.java
+++ b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/SpanLifecycleManagerTest.java
@@ -42,6 +42,7 @@ public class SpanLifecycleManagerTest extends ExchangeTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         CamelContext context = super.createCamelContext();
         this.mockTracer = new MockTracer();
+        this.mockTracer.setDisableCoreProcessors(true);
         CamelContextAware.trySetCamelContext(mockTracer, context);
         mockTracer.init(context);
         return context;
diff --git a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/SpanPropagationDownstreamTest.java b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/SpanPropagationDownstreamTest.java
index dbaf38241a28..94879366473b 100644
--- a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/SpanPropagationDownstreamTest.java
+++ b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/SpanPropagationDownstreamTest.java
@@ -35,6 +35,7 @@ public class SpanPropagationDownstreamTest extends ExchangeTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         CamelContext context = super.createCamelContext();
         this.mockTracer = new MockTracer();
+        this.mockTracer.setDisableCoreProcessors(true);
         CamelContextAware.trySetCamelContext(mockTracer, context);
         mockTracer.init(context);
         return context;
diff --git a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/SpanPropagationUpstreamTest.java b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/SpanPropagationUpstreamTest.java
index 45cc960942bf..cbc352573675 100644
--- a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/SpanPropagationUpstreamTest.java
+++ b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/SpanPropagationUpstreamTest.java
@@ -39,6 +39,7 @@ public class SpanPropagationUpstreamTest extends ExchangeTestSupport {
     protected CamelContext createCamelContext() throws Exception {
         CamelContext context = super.createCamelContext();
         this.mockTracer = new MockTracer();
+        this.mockTracer.setDisableCoreProcessors(true);
         CamelContextAware.trySetCamelContext(mockTracer, context);
         mockTracer.init(context);
         return context;
diff --git a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/mock/MockTracer.java b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/mock/MockTracer.java
index 6479e8ebf213..ae32f58b5d56 100644
--- a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/mock/MockTracer.java
+++ b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/mock/MockTracer.java
@@ -35,7 +35,7 @@ import org.apache.camel.telemetry.Tracer;
 @ManagedResource(description = "MockTracer")
 public class MockTracer extends Tracer {
 
-    MockSpanLifecycleManager slcm;
+    public MockSpanLifecycleManager slcm;
 
     @Override
     protected void initTracer() {
@@ -47,7 +47,8 @@ public class MockTracer extends Tracer {
         return slcm.traces();
     }
 
-    private class MockSpanLifecycleManager implements SpanLifecycleManager {
+    // NOTE: public because we're using directly in a test case to generate a custom span
+    public class MockSpanLifecycleManager implements SpanLifecycleManager {
 
         // Used to collect the traces for later evaluation as traces
         Map<String, Span> inMemoryStorageMap = new HashMap<>();


(camel) 06/09: chore(components): opentelemetry2 core processors

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch code-massel-CAMEL-23352
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 1cd28d70eabe0191ae9626f98e8d4d7513e0649b
Author: Pasquale Congiusti <pa...@gmail.com>
AuthorDate: Thu May 7 10:32:59 2026 +0200

    chore(components):  opentelemetry2 core processors
    
    Ref CAMEL-23432
---
 .../OpenTelemetryTracerConfigurer.java             |   6 ++
 .../src/main/docs/opentelemetry2.adoc              |   4 +-
 .../apache/camel/opentelemetry2/AsyncCXFTest.java  |   1 +
 .../camel/opentelemetry2/AsyncDirectTest.java      |   1 +
 .../org/apache/camel/opentelemetry2/AsyncTest.java |   1 +
 .../camel/opentelemetry2/AsyncWiretapTest.java     |   1 +
 .../camel/opentelemetry2/MDCHeadersTraceTest.java  |   1 +
 .../opentelemetry2/OpenTelemetryTracerTest.java    |   1 +
 ...nTelemetryTracerTest.java => SpanBeanTest.java} | 101 ++++++++++++---------
 .../apache/camel/opentelemetry2/SpanKindTest.java  |   1 +
 .../SpanPropagationDownstreamTest.java             |   1 +
 .../SpanPropagationUpstreamTest.java               |   1 +
 12 files changed, 76 insertions(+), 44 deletions(-)

diff --git a/components/camel-opentelemetry2/src/generated/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerConfigurer.java b/components/camel-opentelemetry2/src/generated/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerConfigurer.java
index cc561a6e9841..61762fd7d712 100644
--- a/components/camel-opentelemetry2/src/generated/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerConfigurer.java
+++ b/components/camel-opentelemetry2/src/generated/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerConfigurer.java
@@ -25,6 +25,8 @@ public class OpenTelemetryTracerConfigurer extends org.apache.camel.support.comp
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "camelcontext":
         case "camelContext": target.setCamelContext(property(camelContext, org.apache.camel.CamelContext.class, value)); return true;
+        case "disablecoreprocessors":
+        case "disableCoreProcessors": target.setDisableCoreProcessors(property(camelContext, boolean.class, value)); return true;
         case "excludepatterns":
         case "excludePatterns": target.setExcludePatterns(property(camelContext, java.lang.String.class, value)); return true;
         case "spanlifecyclemanager":
@@ -42,6 +44,8 @@ public class OpenTelemetryTracerConfigurer extends org.apache.camel.support.comp
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "camelcontext":
         case "camelContext": return org.apache.camel.CamelContext.class;
+        case "disablecoreprocessors":
+        case "disableCoreProcessors": return boolean.class;
         case "excludepatterns":
         case "excludePatterns": return java.lang.String.class;
         case "spanlifecyclemanager":
@@ -60,6 +64,8 @@ public class OpenTelemetryTracerConfigurer extends org.apache.camel.support.comp
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "camelcontext":
         case "camelContext": return target.getCamelContext();
+        case "disablecoreprocessors":
+        case "disableCoreProcessors": return target.isDisableCoreProcessors();
         case "excludepatterns":
         case "excludePatterns": return target.getExcludePatterns();
         case "spanlifecyclemanager":
diff --git a/components/camel-opentelemetry2/src/main/docs/opentelemetry2.adoc b/components/camel-opentelemetry2/src/main/docs/opentelemetry2.adoc
index 5c06dd31bb50..e443cebd3e83 100644
--- a/components/camel-opentelemetry2/src/main/docs/opentelemetry2.adoc
+++ b/components/camel-opentelemetry2/src/main/docs/opentelemetry2.adoc
@@ -24,8 +24,10 @@ The configuration properties for the OpenTelemetry2 tracer are:
 [width="100%",cols="10%,10%,80%",options="header",]
 |=======================================================================
 | Option | Default | Description
+|`enabled`| false | Turn the tracing on/off.
+|`traceProcessors`| false | Trace inner custom processors (i.e., any `process` configured in the route).
+|`disableCoreProcessors`| false | Disable any inner core processors (any core DSL processor provided in the route, for example `bean`, `log`, ...).
 | `excludePatterns` | | A comma-separated list of patterns (e.g., `log*,direct*,setBody*`) to exclude from tracing. Spans matching these patterns will be disabled.
-| `traceProcessors` | `false` | If set to `true`, Camel creates OpenTelemetry Spans for each processor in your routes. You can use `excludePatterns` to filter which processors are traced.
 | `traceHeadersInclusion`| `false` | If set to `true`, adds the generated telemetry `CAMEL_TRACE_ID` and `CAMEL_SPAN_ID` Exchange headers.
 |=======================================================================
 
diff --git a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncCXFTest.java b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncCXFTest.java
index 278fddd9076f..59a5e5168d03 100644
--- a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncCXFTest.java
+++ b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncCXFTest.java
@@ -50,6 +50,7 @@ public class AsyncCXFTest extends OpenTelemetryTracerTestSupport {
         OpenTelemetryTracer tst = new OpenTelemetryTracer();
         tst.setTracer(otelExtension.getOpenTelemetry().getTracer("traceTest"));
         tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
+        tst.setDisableCoreProcessors(true);
         CamelContext context = super.createCamelContext();
         CamelContextAware.trySetCamelContext(tst, context);
         tst.init(context);
diff --git a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncDirectTest.java b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncDirectTest.java
index 4b010c617e1e..4d29fbb89ad1 100644
--- a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncDirectTest.java
+++ b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncDirectTest.java
@@ -42,6 +42,7 @@ public class AsyncDirectTest extends OpenTelemetryTracerTestSupport {
         OpenTelemetryTracer tst = new OpenTelemetryTracer();
         tst.setTracer(otelExtension.getOpenTelemetry().getTracer("traceTest"));
         tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
+        tst.setDisableCoreProcessors(true);
         CamelContext context = super.createCamelContext();
         CamelContextAware.trySetCamelContext(tst, context);
         tst.init(context);
diff --git a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncTest.java b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncTest.java
index 546ef24c226e..e73af302fe8f 100644
--- a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncTest.java
+++ b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncTest.java
@@ -46,6 +46,7 @@ public class AsyncTest extends OpenTelemetryTracerTestSupport {
         OpenTelemetryTracer tst = new OpenTelemetryTracer();
         tst.setTracer(otelExtension.getOpenTelemetry().getTracer("traceTest"));
         tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
+        tst.setDisableCoreProcessors(true);
         CamelContext context = super.createCamelContext();
         CamelContextAware.trySetCamelContext(tst, context);
         tst.init(context);
diff --git a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncWiretapTest.java b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncWiretapTest.java
index 6b1ced29627e..81075b3b82d4 100644
--- a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncWiretapTest.java
+++ b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/AsyncWiretapTest.java
@@ -47,6 +47,7 @@ public class AsyncWiretapTest extends OpenTelemetryTracerTestSupport {
         OpenTelemetryTracer tst = new OpenTelemetryTracer();
         tst.setTracer(otelExtension.getOpenTelemetry().getTracer("traceTest"));
         tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
+        tst.setDisableCoreProcessors(true);
         CamelContext context = super.createCamelContext();
         CamelContextAware.trySetCamelContext(tst, context);
         tst.init(context);
diff --git a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/MDCHeadersTraceTest.java b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/MDCHeadersTraceTest.java
index 0eab0a484a07..5d6cc8a46045 100644
--- a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/MDCHeadersTraceTest.java
+++ b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/MDCHeadersTraceTest.java
@@ -40,6 +40,7 @@ public class MDCHeadersTraceTest extends OpenTelemetryTracerTestSupport {
         tst.setTraceHeadersInclusion(true);
         tst.setTracer(otelExtension.getOpenTelemetry().getTracer("traceTest"));
         tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
+        tst.setDisableCoreProcessors(true);
         CamelContextAware.trySetCamelContext(tst, context);
         tst.init(context);
         return context;
diff --git a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerTest.java b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerTest.java
index 3b4118656f63..471151678ca4 100644
--- a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerTest.java
+++ b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerTest.java
@@ -43,6 +43,7 @@ public class OpenTelemetryTracerTest extends OpenTelemetryTracerTestSupport {
         OpenTelemetryTracer tst = new OpenTelemetryTracer();
         tst.setTracer(otelExtension.getOpenTelemetry().getTracer("traceTest"));
         tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
+        tst.setDisableCoreProcessors(true);
         CamelContext context = super.createCamelContext();
         CamelContextAware.trySetCamelContext(tst, context);
         tst.init(context);
diff --git a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerTest.java b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanBeanTest.java
similarity index 52%
copy from components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerTest.java
copy to components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanBeanTest.java
index 3b4118656f63..a785de244f28 100644
--- a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/OpenTelemetryTracerTest.java
+++ b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanBeanTest.java
@@ -21,10 +21,13 @@ import java.util.List;
 import java.util.Map;
 
 import io.opentelemetry.api.common.AttributeKey;
+import io.opentelemetry.api.trace.Span;
+import io.opentelemetry.api.trace.Tracer;
 import io.opentelemetry.sdk.trace.data.SpanData;
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.opentelemetry2.CamelOpenTelemetryExtension.OtelTrace;
@@ -33,15 +36,16 @@ import org.junit.jupiter.api.Test;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
-public class OpenTelemetryTracerTest extends OpenTelemetryTracerTestSupport {
+public class SpanBeanTest extends OpenTelemetryTracerTestSupport {
+
+    Tracer tracer = otelExtension.getOpenTelemetry().getTracer("spanInjection");
 
     @Override
     protected CamelContext createCamelContext() throws Exception {
         OpenTelemetryTracer tst = new OpenTelemetryTracer();
-        tst.setTracer(otelExtension.getOpenTelemetry().getTracer("traceTest"));
+        tst.setTracer(tracer);
         tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
         CamelContext context = super.createCamelContext();
         CamelContextAware.trySetCamelContext(tst, context);
@@ -51,68 +55,59 @@ public class OpenTelemetryTracerTest extends OpenTelemetryTracerTestSupport {
 
     @Test
     void testRouteSingleRequest() throws IOException {
-        Exchange result = template.request("direct:start", null);
-        // Make sure the trace is propagated downstream
-        assertNotNull(result.getIn().getHeader("traceparent"));
+        template.sendBody("direct:start", "my-body");
         Map<String, OtelTrace> traces = otelExtension.getTraces();
         assertEquals(1, traces.size());
-        checkTrace(traces.values().iterator().next(), null);
-    }
-
-    @Test
-    void testRouteMultipleRequests() throws IOException {
-        for (int i = 1; i <= 10; i++) {
-            context.createProducerTemplate().sendBody("direct:start", "Hello!");
-        }
-        Map<String, OtelTrace> traces = otelExtension.getTraces();
-        // Each trace should have a unique trace id. It is enough to assert that
-        // the number of elements in the map is the same of the requests to prove
-        // all traces have been generated uniquely.
-        assertEquals(10, traces.size());
-        // Each trace should have the same structure
-        for (OtelTrace trace : traces.values()) {
-            checkTrace(trace, "Hello!");
-        }
-
+        checkTrace(traces.values().iterator().next());
     }
 
-    private void checkTrace(OtelTrace trace, String expectedBody) {
+    private void checkTrace(OtelTrace trace) {
         List<SpanData> spans = trace.getSpans();
-        assertEquals(3, spans.size());
+        assertEquals(7, spans.size());
         SpanData testProducer = spans.get(0);
         SpanData direct = spans.get(1);
-        SpanData log = spans.get(2);
+        SpanData innerLog = spans.get(2);
+        SpanData beanProcessor = spans.get(3);
+        SpanData beanMethod = spans.get(4);
+        SpanData log = spans.get(5);
+        SpanData innerToLog = spans.get(6);
 
         // Validate span completion
         assertTrue(testProducer.hasEnded());
         assertTrue(direct.hasEnded());
+        assertTrue(innerLog.hasEnded());
+        assertTrue(beanProcessor.hasEnded());
+        assertTrue(beanMethod.hasEnded());
         assertTrue(log.hasEnded());
+        assertTrue(innerToLog.hasEnded());
 
         // Validate same trace
         assertEquals(testProducer.getSpanContext().getTraceId(), direct.getSpanContext().getTraceId());
-        assertEquals(direct.getSpanContext().getTraceId(), log.getSpanContext().getTraceId());
+        assertEquals(testProducer.getSpanContext().getTraceId(), innerLog.getSpanContext().getTraceId());
+        assertEquals(testProducer.getSpanContext().getTraceId(), beanProcessor.getSpanContext().getTraceId());
+        assertEquals(testProducer.getSpanContext().getTraceId(), beanMethod.getSpanContext().getTraceId());
+        assertEquals(testProducer.getSpanContext().getTraceId(), log.getSpanContext().getTraceId());
+        assertEquals(testProducer.getSpanContext().getTraceId(), innerToLog.getSpanContext().getTraceId());
+
+        // Validate operations
+        assertEquals(Op.EVENT_RECEIVED.toString(), direct.getAttributes().get(AttributeKey.stringKey("op")));
+        assertEquals(Op.EVENT_PROCESS.toString(), beanProcessor.getAttributes().get(AttributeKey.stringKey("op")));
 
         // Validate hierarchy
         assertFalse(testProducer.getParentSpanContext().isValid());
+
         assertEquals(testProducer.getSpanContext().getSpanId(), direct.getParentSpanContext().getSpanId());
+        assertEquals(direct.getSpanContext().getSpanId(), innerLog.getParentSpanContext().getSpanId());
+        assertEquals(direct.getSpanContext().getSpanId(), beanProcessor.getParentSpanContext().getSpanId());
+        assertEquals(beanProcessor.getSpanContext().getSpanId(), beanMethod.getParentSpanContext().getSpanId());
         assertEquals(direct.getSpanContext().getSpanId(), log.getParentSpanContext().getSpanId());
-
-        // Validate operations
-        assertEquals(Op.EVENT_SENT.toString(), testProducer.getAttributes().get(AttributeKey.stringKey("op")));
-        assertEquals(Op.EVENT_RECEIVED.toString(), direct.getAttributes().get(AttributeKey.stringKey("op")));
+        assertEquals(log.getSpanContext().getSpanId(), innerToLog.getParentSpanContext().getSpanId());
 
         // Validate message logging
-        assertEquals("A message", direct.getEvents().get(0).getAttributes().get(AttributeKey.stringKey("message")));
-        if (expectedBody == null) {
-            assertEquals(
-                    "Exchange[ExchangePattern: InOut, BodyType: null, Body: [Body is null]]",
-                    log.getEvents().get(0).getAttributes().get(AttributeKey.stringKey("message")));
-        } else {
-            assertEquals(
-                    "Exchange[ExchangePattern: InOnly, BodyType: String, Body: " + expectedBody + "]",
-                    log.getEvents().get(0).getAttributes().get(AttributeKey.stringKey("message")));
-        }
-
+        assertEquals("A message", innerLog.getEvents().get(0).getAttributes().get(AttributeKey.stringKey("message")));
+        assertEquals(
+                "Exchange[ExchangePattern: InOnly, BodyType: String, Body: my-body]",
+                innerToLog.getEvents().get(0).getAttributes().get(AttributeKey.stringKey("message")));
     }
 
     @Override
@@ -120,12 +115,32 @@ public class OpenTelemetryTracerTest extends OpenTelemetryTracerTestSupport {
         return new RouteBuilder() {
             @Override
             public void configure() {
+                MyBean myBean = new MyBean();
+                this.getCamelContext().getRegistry().bind("myBean", myBean);
+
                 from("direct:start")
                         .routeId("start")
                         .log("A message")
+                        .bean(MyBean.class)
+                        .process(new Processor() {
+                            @Override
+                            public void process(Exchange exchange) throws Exception {
+                                // noop
+                            }
+                        })
                         .to("log:info");
             }
         };
     }
 
+    class MyBean {
+        // NOTE: the commented annotation below would work only when an agent or a runtime framework (quarkus or spring)
+        // is available. We simulate it creating the Span by hand instead.
+        //@WithSpan
+        public void helloWorld() {
+            Span mySpan = tracer.spanBuilder("helloworld").startSpan();
+            // Do the work here
+            mySpan.end();
+        }
+    }
 }
diff --git a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanKindTest.java b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanKindTest.java
index 41e0d021d6d5..7746b7515bd3 100644
--- a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanKindTest.java
+++ b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanKindTest.java
@@ -45,6 +45,7 @@ public class SpanKindTest extends OpenTelemetryTracerTestSupport {
         OpenTelemetryTracer tst = new OpenTelemetryTracer();
         tst.setTracer(otelExtension.getOpenTelemetry().getTracer("spanKindTest"));
         tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
+        tst.setDisableCoreProcessors(true);
         CamelContext context = super.createCamelContext();
 
         // Register mock HTTP component for testing
diff --git a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanPropagationDownstreamTest.java b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanPropagationDownstreamTest.java
index 0c28617a1ffc..1d99a67bf4d6 100644
--- a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanPropagationDownstreamTest.java
+++ b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanPropagationDownstreamTest.java
@@ -32,6 +32,7 @@ public class SpanPropagationDownstreamTest extends OpenTelemetryTracerTestSuppor
         OpenTelemetryTracer tst = new OpenTelemetryTracer();
         tst.setTracer(otelExtension.getOpenTelemetry().getTracer("traceTest"));
         tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
+        tst.setDisableCoreProcessors(true);
         CamelContext context = super.createCamelContext();
         CamelContextAware.trySetCamelContext(tst, context);
         tst.init(context);
diff --git a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanPropagationUpstreamTest.java b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanPropagationUpstreamTest.java
index 3938d39a3662..16d474d1da70 100644
--- a/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanPropagationUpstreamTest.java
+++ b/components/camel-opentelemetry2/src/test/java/org/apache/camel/opentelemetry2/SpanPropagationUpstreamTest.java
@@ -38,6 +38,7 @@ public class SpanPropagationUpstreamTest extends OpenTelemetryTracerTestSupport
         OpenTelemetryTracer tst = new OpenTelemetryTracer();
         tst.setTracer(otelExtension.getOpenTelemetry().getTracer("traceTest"));
         tst.setContextPropagators(otelExtension.getOpenTelemetry().getPropagators());
+        tst.setDisableCoreProcessors(true);
         CamelContext context = super.createCamelContext();
         CamelContextAware.trySetCamelContext(tst, context);
         tst.init(context);


(camel) 01/09: CAMEL-23387: camel-telemetry - Add span decorators for AWS Athena, CloudWatch, KMS, MSK, Step Functions, Timestream, Redshift Data and CloudTrail (#23045)

Posted by da...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch code-massel-CAMEL-23352
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 8333f01d8e7b14f4bb9d3552162b4e5912ec82ed
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Fri May 8 09:01:49 2026 +0200

    CAMEL-23387: camel-telemetry - Add span decorators for AWS Athena, CloudWatch, KMS, MSK, Step Functions, Timestream, Redshift Data and CloudTrail (#23045)
    
    Third batch of AWS span decorators for camel-telemetry. Adds AbstractSpanDecorator
    implementations for aws2-athena, aws2-cw, aws2-kms, aws2-msk, aws2-step-functions,
    aws2-timestream, aws2-redshift-data; plus an AbstractMessagingSpanDecorator for the
    aws-cloudtrail consumer. Database/analytics decorators (Athena, Timestream, Redshift
    Data) set semantic-conventions tags db.system and db.name for uniform aggregation
    alongside DDB/JDBC/SQL/Mongo/Cassandra spans. Header constants are mirrored from each
    component's *Constants interface to avoid hard module dependencies, matching the
    convention from #23038 and #23040. After review, dropped keyId from KMS and username
    from CloudTrail to keep the trace-tag surface minimal. All 8 decorators registered in
    META-INF/services and covered by unit tests.
    
    CAMEL-23387 stays open; further AWS components will land in subsequent PRs.
---
 .../decorators/AwsAthenaSpanDecorator.java         | 84 ++++++++++++++++++++++
 .../decorators/AwsCloudtrailSpanDecorator.java     | 65 +++++++++++++++++
 .../telemetry/decorators/AwsCwSpanDecorator.java   | 80 +++++++++++++++++++++
 .../telemetry/decorators/AwsKmsSpanDecorator.java  | 66 +++++++++++++++++
 .../telemetry/decorators/AwsMskSpanDecorator.java  | 73 +++++++++++++++++++
 .../decorators/AwsRedshiftDataSpanDecorator.java   | 77 ++++++++++++++++++++
 .../decorators/AwsStepFunctionsSpanDecorator.java  | 80 +++++++++++++++++++++
 .../decorators/AwsTimestreamSpanDecorator.java     | 70 ++++++++++++++++++
 .../org.apache.camel.telemetry.SpanDecorator       |  8 +++
 .../decorators/AwsAthenaSpanDecoratorTest.java     | 67 +++++++++++++++++
 .../decorators/AwsCloudtrailSpanDecoratorTest.java | 68 ++++++++++++++++++
 .../decorators/AwsCwSpanDecoratorTest.java         | 64 +++++++++++++++++
 .../decorators/AwsKmsSpanDecoratorTest.java        | 58 +++++++++++++++
 .../decorators/AwsMskSpanDecoratorTest.java        | 61 ++++++++++++++++
 .../AwsRedshiftDataSpanDecoratorTest.java          | 65 +++++++++++++++++
 .../AwsStepFunctionsSpanDecoratorTest.java         | 66 +++++++++++++++++
 .../decorators/AwsTimestreamSpanDecoratorTest.java | 61 ++++++++++++++++
 17 files changed, 1113 insertions(+)

diff --git a/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/decorators/AwsAthenaSpanDecorator.java b/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/decorators/AwsAthenaSpanDecorator.java
new file mode 100644
index 000000000000..f98506b382f8
--- /dev/null
+++ b/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/decorators/AwsAthenaSpanDecorator.java
@@ -0,0 +1,84 @@
+/*
+ * 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.telemetry.decorators;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.telemetry.Span;
+import org.apache.camel.telemetry.TagConstants;
+
+public class AwsAthenaSpanDecorator extends AbstractSpanDecorator {
+
+    static final String ATHENA_OPERATION = "operation";
+    static final String ATHENA_DATABASE = "database";
+    static final String ATHENA_QUERY_EXECUTION_ID = "queryExecutionId";
+    static final String ATHENA_WORK_GROUP = "workGroup";
+    static final String ATHENA_QUERY_EXECUTION_STATE = "queryExecutionState";
+
+    /**
+     * Constants copied from {@link org.apache.camel.component.aws2.athena.Athena2Constants}
+     */
+    static final String OPERATION = "CamelAwsAthenaOperation";
+    static final String DATABASE = "CamelAwsAthenaDatabase";
+    static final String QUERY_EXECUTION_ID = "CamelAwsAthenaQueryExecutionId";
+    static final String WORK_GROUP = "CamelAwsAthenaWorkGroup";
+    static final String QUERY_EXECUTION_STATE = "CamelAwsAthenaQueryExecutionState";
+
+    @Override
+    public String getComponent() {
+        return "aws2-athena";
+    }
+
+    @Override
+    public String getComponentClassName() {
+        return "org.apache.camel.component.aws2.athena.Athena2Component";
+    }
+
+    @Override
+    public void beforeTracingEvent(Span span, Exchange exchange, Endpoint endpoint) {
+        super.beforeTracingEvent(span, exchange, endpoint);
+
+        span.setTag(TagConstants.DB_SYSTEM, "athena");
+
+        Object operation = exchange.getIn().getHeader(OPERATION);
+        if (operation != null) {
+            span.setTag(ATHENA_OPERATION, operation.toString());
+        }
+
+        String database = exchange.getIn().getHeader(DATABASE, String.class);
+        if (database != null) {
+            span.setTag(ATHENA_DATABASE, database);
+            span.setTag(TagConstants.DB_NAME, database);
+        }
+
+        String queryExecutionId = exchange.getIn().getHeader(QUERY_EXECUTION_ID, String.class);
+        if (queryExecutionId != null) {
+            span.setTag(ATHENA_QUERY_EXECUTION_ID, queryExecutionId);
+        }
+
+        String workGroup = exchange.getIn().getHeader(WORK_GROUP, String.class);
+        if (workGroup != null) {
+            span.setTag(ATHENA_WORK_GROUP, workGroup);
+        }
+
+        Object queryExecutionState = exchange.getIn().getHeader(QUERY_EXECUTION_STATE);
+        if (queryExecutionState != null) {
+            span.setTag(ATHENA_QUERY_EXECUTION_STATE, queryExecutionState.toString());
+        }
+    }
+
+}
diff --git a/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/decorators/AwsCloudtrailSpanDecorator.java b/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/decorators/AwsCloudtrailSpanDecorator.java
new file mode 100644
index 000000000000..0dc5e0f9040e
--- /dev/null
+++ b/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/decorators/AwsCloudtrailSpanDecorator.java
@@ -0,0 +1,65 @@
+/*
+ * 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.telemetry.decorators;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.telemetry.Span;
+
+public class AwsCloudtrailSpanDecorator extends AbstractMessagingSpanDecorator {
+
+    static final String CLOUDTRAIL_EVENT_NAME = "eventName";
+    static final String CLOUDTRAIL_EVENT_SOURCE = "eventSource";
+
+    /**
+     * Constants copied from {@link org.apache.camel.component.aws.cloudtrail.CloudtrailConstants}
+     */
+    static final String EVENT_ID = "CamelAwsCloudTrailEventId";
+    static final String EVENT_NAME = "CamelAwsCloudTrailEventName";
+    static final String EVENT_SOURCE = "CamelAwsCloudTrailEventSource";
+
+    @Override
+    public String getComponent() {
+        return "aws-cloudtrail";
+    }
+
+    @Override
+    public String getComponentClassName() {
+        return "org.apache.camel.component.aws.cloudtrail.CloudtrailComponent";
+    }
+
+    @Override
+    public void beforeTracingEvent(Span span, Exchange exchange, Endpoint endpoint) {
+        super.beforeTracingEvent(span, exchange, endpoint);
+
+        String eventName = exchange.getIn().getHeader(EVENT_NAME, String.class);
+        if (eventName != null) {
+            span.setTag(CLOUDTRAIL_EVENT_NAME, eventName);
+        }
+
+        String eventSource = exchange.getIn().getHeader(EVENT_SOURCE, String.class);
+        if (eventSource != null) {
+            span.setTag(CLOUDTRAIL_EVENT_SOURCE, eventSource);
+        }
+    }
+
+    @Override
+    protected String getMessageId(Exchange exchange) {
+        return exchange.getIn().getHeader(EVENT_ID, String.class);
+    }
+
+}
diff --git a/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/decorators/AwsCwSpanDecorator.java b/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/decorators/AwsCwSpanDecorator.java
new file mode 100644
index 000000000000..17b97fa6a263
--- /dev/null
+++ b/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/decorators/AwsCwSpanDecorator.java
@@ -0,0 +1,80 @@
+/*
+ * 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.telemetry.decorators;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.telemetry.Span;
+
+public class AwsCwSpanDecorator extends AbstractSpanDecorator {
+
+    static final String CW_OPERATION = "operation";
+    static final String CW_METRIC_NAMESPACE = "metricNamespace";
+    static final String CW_METRIC_NAME = "metricName";
+    static final String CW_ALARM_NAME = "alarmName";
+    static final String CW_ALARM_STATE = "alarmState";
+
+    /**
+     * Constants copied from {@link org.apache.camel.component.aws2.cw.Cw2Constants}
+     */
+    static final String OPERATION = "CamelAwsCwOperation";
+    static final String METRIC_NAMESPACE = "CamelAwsCwMetricNamespace";
+    static final String METRIC_NAME = "CamelAwsCwMetricName";
+    static final String ALARM_NAME = "CamelAwsCwAlarmName";
+    static final String ALARM_STATE = "CamelAwsCwAlarmState";
+
+    @Override
+    public String getComponent() {
+        return "aws2-cw";
+    }
+
+    @Override
+    public String getComponentClassName() {
+        return "org.apache.camel.component.aws2.cw.Cw2Component";
+    }
+
+    @Override
+    public void beforeTracingEvent(Span span, Exchange exchange, Endpoint endpoint) {
+        super.beforeTracingEvent(span, exchange, endpoint);
+
+        String operation = exchange.getIn().getHeader(OPERATION, String.class);
+        if (operation != null) {
+            span.setTag(CW_OPERATION, operation);
+        }
+
+        String metricNamespace = exchange.getIn().getHeader(METRIC_NAMESPACE, String.class);
+        if (metricNamespace != null) {
+            span.setTag(CW_METRIC_NAMESPACE, metricNamespace);
+        }
+
+        String metricName = exchange.getIn().getHeader(METRIC_NAME, String.class);
+        if (metricName != null) {
+            span.setTag(CW_METRIC_NAME, metricName);
+        }
+
+        String alarmName = exchange.getIn().getHeader(ALARM_NAME, String.class);
+        if (alarmName != null) {
+            span.setTag(CW_ALARM_NAME, alarmName);
+        }
+
+        String alarmState = exchange.getIn().getHeader(ALARM_STATE, String.class);
+        if (alarmState != null) {
+            span.setTag(CW_ALARM_STATE, alarmState);
+        }
+    }
+
+}
diff --git a/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/decorators/AwsKmsSpanDecorator.java b/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/decorators/AwsKmsSpanDecorator.java
new file mode 100644
index 000000000000..a08f7c375005
--- /dev/null
+++ b/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/decorators/AwsKmsSpanDecorator.java
@@ -0,0 +1,66 @@
+/*
+ * 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.telemetry.decorators;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.telemetry.Span;
+
+public class AwsKmsSpanDecorator extends AbstractSpanDecorator {
+
+    static final String KMS_OPERATION = "operation";
+    static final String KMS_KEY_ARN = "keyArn";
+    static final String KMS_KEY_STATE = "keyState";
+
+    /**
+     * Constants copied from {@link org.apache.camel.component.aws2.kms.KMS2Constants}
+     */
+    static final String OPERATION = "CamelAwsKMSOperation";
+    static final String KEY_ARN = "CamelAwsKMSKeyArn";
+    static final String KEY_STATE = "CamelAwsKMSKeyState";
+
+    @Override
+    public String getComponent() {
+        return "aws2-kms";
+    }
+
+    @Override
+    public String getComponentClassName() {
+        return "org.apache.camel.component.aws2.kms.KMS2Component";
+    }
+
+    @Override
+    public void beforeTracingEvent(Span span, Exchange exchange, Endpoint endpoint) {
+        super.beforeTracingEvent(span, exchange, endpoint);
+
+        String operation = exchange.getIn().getHeader(OPERATION, String.class);
+        if (operation != null) {
+            span.setTag(KMS_OPERATION, operation);
+        }
+
+        String keyArn = exchange.getIn().getHeader(KEY_ARN, String.class);
+        if (keyArn != null) {
+            span.setTag(KMS_KEY_ARN, keyArn);
+        }
+
+        String keyState = exchange.getIn().getHeader(KEY_STATE, String.class);
+        if (keyState != null) {
+            span.setTag(KMS_KEY_STATE, keyState);
+        }
+    }
+
+}
diff --git a/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/decorators/AwsMskSpanDecorator.java b/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/decorators/AwsMskSpanDecorator.java
new file mode 100644
index 000000000000..8cdb2826f05b
--- /dev/null
+++ b/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/decorators/AwsMskSpanDecorator.java
@@ -0,0 +1,73 @@
+/*
+ * 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.telemetry.decorators;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.telemetry.Span;
+
+public class AwsMskSpanDecorator extends AbstractSpanDecorator {
+
+    static final String MSK_OPERATION = "operation";
+    static final String MSK_CLUSTER_NAME = "clusterName";
+    static final String MSK_CLUSTER_ARN = "clusterArn";
+    static final String MSK_CLUSTER_STATE = "clusterState";
+
+    /**
+     * Constants copied from {@link org.apache.camel.component.aws2.msk.MSK2Constants}
+     */
+    static final String OPERATION = "CamelAwsMSKOperation";
+    static final String CLUSTER_NAME = "CamelAwsMSKClusterName";
+    static final String CLUSTER_ARN = "CamelAwsMSKClusterArn";
+    static final String CLUSTER_STATE = "CamelAwsMSKClusterState";
+
+    @Override
+    public String getComponent() {
+        return "aws2-msk";
+    }
+
+    @Override
+    public String getComponentClassName() {
+        return "org.apache.camel.component.aws2.msk.MSK2Component";
+    }
+
+    @Override
+    public void beforeTracingEvent(Span span, Exchange exchange, Endpoint endpoint) {
+        super.beforeTracingEvent(span, exchange, endpoint);
+
+        String operation = exchange.getIn().getHeader(OPERATION, String.class);
+        if (operation != null) {
+            span.setTag(MSK_OPERATION, operation);
+        }
+
+        String clusterName = exchange.getIn().getHeader(CLUSTER_NAME, String.class);
+        if (clusterName != null) {
+            span.setTag(MSK_CLUSTER_NAME, clusterName);
+        }
+
+        String clusterArn = exchange.getIn().getHeader(CLUSTER_ARN, String.class);
+        if (clusterArn != null) {
+            span.setTag(MSK_CLUSTER_ARN, clusterArn);
+        }
+
+        String clusterState = exchange.getIn().getHeader(CLUSTER_STATE, String.class);
+        if (clusterState != null) {
+            span.setTag(MSK_CLUSTER_STATE, clusterState);
+        }
+    }
+
+}
diff --git a/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/decorators/AwsRedshiftDataSpanDecorator.java b/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/decorators/AwsRedshiftDataSpanDecorator.java
new file mode 100644
index 000000000000..3ed55fb70edd
--- /dev/null
+++ b/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/decorators/AwsRedshiftDataSpanDecorator.java
@@ -0,0 +1,77 @@
+/*
+ * 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.telemetry.decorators;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.telemetry.Span;
+import org.apache.camel.telemetry.TagConstants;
+
+public class AwsRedshiftDataSpanDecorator extends AbstractSpanDecorator {
+
+    static final String REDSHIFTDATA_OPERATION = "operation";
+    static final String REDSHIFTDATA_CLUSTER_IDENTIFIER = "clusterIdentifier";
+    static final String REDSHIFTDATA_DATABASE = "database";
+    static final String REDSHIFTDATA_STATEMENT_NAME = "statementName";
+
+    /**
+     * Constants copied from {@link org.apache.camel.component.aws2.redshift.data.RedshiftData2Constants}
+     */
+    static final String OPERATION = "CamelAwsRedshiftDataOperation";
+    static final String CLUSTER_IDENTIFIER = "CamelAwsRedshiftDataClusterIdentifier";
+    static final String DATABASE = "CamelAwsRedshiftDataDatabase";
+    static final String STATEMENT_NAME = "CamelAwsRedshiftDataStatementName";
+
+    @Override
+    public String getComponent() {
+        return "aws2-redshift-data";
+    }
+
+    @Override
+    public String getComponentClassName() {
+        return "org.apache.camel.component.aws2.redshift.data.RedshiftData2Component";
+    }
+
+    @Override
+    public void beforeTracingEvent(Span span, Exchange exchange, Endpoint endpoint) {
+        super.beforeTracingEvent(span, exchange, endpoint);
+
+        span.setTag(TagConstants.DB_SYSTEM, "redshift");
+
+        String operation = exchange.getIn().getHeader(OPERATION, String.class);
+        if (operation != null) {
+            span.setTag(REDSHIFTDATA_OPERATION, operation);
+        }
+
+        String clusterIdentifier = exchange.getIn().getHeader(CLUSTER_IDENTIFIER, String.class);
+        if (clusterIdentifier != null) {
+            span.setTag(REDSHIFTDATA_CLUSTER_IDENTIFIER, clusterIdentifier);
+        }
+
+        String database = exchange.getIn().getHeader(DATABASE, String.class);
+        if (database != null) {
+            span.setTag(REDSHIFTDATA_DATABASE, database);
+            span.setTag(TagConstants.DB_NAME, database);
+        }
+
+        String statementName = exchange.getIn().getHeader(STATEMENT_NAME, String.class);
+        if (statementName != null) {
+            span.setTag(REDSHIFTDATA_STATEMENT_NAME, statementName);
+        }
+    }
+
+}
diff --git a/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/decorators/AwsStepFunctionsSpanDecorator.java b/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/decorators/AwsStepFunctionsSpanDecorator.java
new file mode 100644
index 000000000000..1058d060736c
--- /dev/null
+++ b/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/decorators/AwsStepFunctionsSpanDecorator.java
@@ -0,0 +1,80 @@
+/*
+ * 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.telemetry.decorators;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.telemetry.Span;
+
+public class AwsStepFunctionsSpanDecorator extends AbstractSpanDecorator {
+
+    static final String STEPFUNCTIONS_OPERATION = "operation";
+    static final String STEPFUNCTIONS_STATE_MACHINE_NAME = "stateMachineName";
+    static final String STEPFUNCTIONS_STATE_MACHINE_ARN = "stateMachineArn";
+    static final String STEPFUNCTIONS_EXECUTION_ARN = "executionArn";
+    static final String STEPFUNCTIONS_EXECUTION_NAME = "executionName";
+
+    /**
+     * Constants copied from {@link org.apache.camel.component.aws2.stepfunctions.StepFunctions2Constants}
+     */
+    static final String OPERATION = "CamelAwsStepFunctionsOperation";
+    static final String STATE_MACHINE_NAME = "CamelAwsStepFunctionsStateMachineName";
+    static final String STATE_MACHINE_ARN = "CamelAwsStepFunctionsStateMachineArn";
+    static final String EXECUTION_ARN = "CamelAwsStepFunctionsExecutionArn";
+    static final String EXECUTION_NAME = "CamelAwsStepFunctionsExecutionName";
+
+    @Override
+    public String getComponent() {
+        return "aws2-step-functions";
+    }
+
+    @Override
+    public String getComponentClassName() {
+        return "org.apache.camel.component.aws2.stepfunctions.StepFunctions2Component";
+    }
+
+    @Override
+    public void beforeTracingEvent(Span span, Exchange exchange, Endpoint endpoint) {
+        super.beforeTracingEvent(span, exchange, endpoint);
+
+        String operation = exchange.getIn().getHeader(OPERATION, String.class);
+        if (operation != null) {
+            span.setTag(STEPFUNCTIONS_OPERATION, operation);
+        }
+
+        String stateMachineName = exchange.getIn().getHeader(STATE_MACHINE_NAME, String.class);
+        if (stateMachineName != null) {
+            span.setTag(STEPFUNCTIONS_STATE_MACHINE_NAME, stateMachineName);
+        }
+
+        String stateMachineArn = exchange.getIn().getHeader(STATE_MACHINE_ARN, String.class);
+        if (stateMachineArn != null) {
+            span.setTag(STEPFUNCTIONS_STATE_MACHINE_ARN, stateMachineArn);
+        }
+
+        String executionArn = exchange.getIn().getHeader(EXECUTION_ARN, String.class);
+        if (executionArn != null) {
+            span.setTag(STEPFUNCTIONS_EXECUTION_ARN, executionArn);
+        }
+
+        String executionName = exchange.getIn().getHeader(EXECUTION_NAME, String.class);
+        if (executionName != null) {
+            span.setTag(STEPFUNCTIONS_EXECUTION_NAME, executionName);
+        }
+    }
+
+}
diff --git a/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/decorators/AwsTimestreamSpanDecorator.java b/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/decorators/AwsTimestreamSpanDecorator.java
new file mode 100644
index 000000000000..30ee7bb4f209
--- /dev/null
+++ b/components/camel-telemetry/src/main/java/org/apache/camel/telemetry/decorators/AwsTimestreamSpanDecorator.java
@@ -0,0 +1,70 @@
+/*
+ * 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.telemetry.decorators;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.telemetry.Span;
+import org.apache.camel.telemetry.TagConstants;
+
+public class AwsTimestreamSpanDecorator extends AbstractSpanDecorator {
+
+    static final String TIMESTREAM_OPERATION = "operation";
+    static final String TIMESTREAM_DATABASE_NAME = "databaseName";
+    static final String TIMESTREAM_TABLE_NAME = "tableName";
+
+    /**
+     * Constants copied from {@link org.apache.camel.component.aws2.timestream.Timestream2Constants}
+     */
+    static final String OPERATION = "CamelAwsTimestreamOperation";
+    static final String DATABASE_NAME = "CamelAwsTimestreamDatabaseName";
+    static final String TABLE_NAME = "CamelAwsTimestreamTableName";
+
+    @Override
+    public String getComponent() {
+        return "aws2-timestream";
+    }
+
+    @Override
+    public String getComponentClassName() {
+        return "org.apache.camel.component.aws2.timestream.Timestream2Component";
+    }
+
+    @Override
+    public void beforeTracingEvent(Span span, Exchange exchange, Endpoint endpoint) {
+        super.beforeTracingEvent(span, exchange, endpoint);
+
+        span.setTag(TagConstants.DB_SYSTEM, "timestream");
+
+        String operation = exchange.getIn().getHeader(OPERATION, String.class);
+        if (operation != null) {
+            span.setTag(TIMESTREAM_OPERATION, operation);
+        }
+
+        String databaseName = exchange.getIn().getHeader(DATABASE_NAME, String.class);
+        if (databaseName != null) {
+            span.setTag(TIMESTREAM_DATABASE_NAME, databaseName);
+            span.setTag(TagConstants.DB_NAME, databaseName);
+        }
+
+        String tableName = exchange.getIn().getHeader(TABLE_NAME, String.class);
+        if (tableName != null) {
+            span.setTag(TIMESTREAM_TABLE_NAME, tableName);
+        }
+    }
+
+}
diff --git a/components/camel-telemetry/src/main/resources/META-INF/services/org.apache.camel.telemetry.SpanDecorator b/components/camel-telemetry/src/main/resources/META-INF/services/org.apache.camel.telemetry.SpanDecorator
index 26073ccaa47a..c34a4b214104 100644
--- a/components/camel-telemetry/src/main/resources/META-INF/services/org.apache.camel.telemetry.SpanDecorator
+++ b/components/camel-telemetry/src/main/resources/META-INF/services/org.apache.camel.telemetry.SpanDecorator
@@ -19,18 +19,26 @@ org.apache.camel.telemetry.decorators.ActiveMQ6SpanDecorator
 org.apache.camel.telemetry.decorators.ActiveMQSpanDecorator
 org.apache.camel.telemetry.decorators.AhcSpanDecorator
 org.apache.camel.telemetry.decorators.AmqpSpanDecorator
+org.apache.camel.telemetry.decorators.AwsAthenaSpanDecorator
 org.apache.camel.telemetry.decorators.AwsBedrockSpanDecorator
+org.apache.camel.telemetry.decorators.AwsCloudtrailSpanDecorator
+org.apache.camel.telemetry.decorators.AwsCwSpanDecorator
 org.apache.camel.telemetry.decorators.AwsDdbSpanDecorator
 org.apache.camel.telemetry.decorators.AwsDdbStreamSpanDecorator
 org.apache.camel.telemetry.decorators.AwsEventbridgeSpanDecorator
 org.apache.camel.telemetry.decorators.AwsKinesisFirehoseSpanDecorator
 org.apache.camel.telemetry.decorators.AwsKinesisSpanDecorator
+org.apache.camel.telemetry.decorators.AwsKmsSpanDecorator
 org.apache.camel.telemetry.decorators.AwsLambdaSpanDecorator
 org.apache.camel.telemetry.decorators.AwsMqSpanDecorator
+org.apache.camel.telemetry.decorators.AwsMskSpanDecorator
+org.apache.camel.telemetry.decorators.AwsRedshiftDataSpanDecorator
 org.apache.camel.telemetry.decorators.AwsS3SpanDecorator
 org.apache.camel.telemetry.decorators.AwsSesSpanDecorator
 org.apache.camel.telemetry.decorators.AwsSnsSpanDecorator
 org.apache.camel.telemetry.decorators.AwsSqsSpanDecorator
+org.apache.camel.telemetry.decorators.AwsStepFunctionsSpanDecorator
+org.apache.camel.telemetry.decorators.AwsTimestreamSpanDecorator
 org.apache.camel.telemetry.decorators.AzureServiceBusSpanDecorator
 org.apache.camel.telemetry.decorators.CometdSpanDecorator
 org.apache.camel.telemetry.decorators.CometdsSpanDecorator
diff --git a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/decorators/AwsAthenaSpanDecoratorTest.java b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/decorators/AwsAthenaSpanDecoratorTest.java
new file mode 100644
index 000000000000..a05b3de296f1
--- /dev/null
+++ b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/decorators/AwsAthenaSpanDecoratorTest.java
@@ -0,0 +1,67 @@
+/*
+ * 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.telemetry.decorators;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.telemetry.TagConstants;
+import org.apache.camel.telemetry.mock.MockSpanAdapter;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class AwsAthenaSpanDecoratorTest {
+
+    @Test
+    public void testPre() {
+        String operation = "startQueryExecution";
+        String database = "myDatabase";
+        String queryExecutionId = "abcd-1234";
+        String workGroup = "primary";
+        String queryExecutionState = "SUCCEEDED";
+
+        Endpoint endpoint = Mockito.mock(Endpoint.class);
+        Exchange exchange = Mockito.mock(Exchange.class);
+        Message message = Mockito.mock(Message.class);
+
+        Mockito.when(endpoint.getEndpointUri()).thenReturn("aws2-athena:default");
+        Mockito.when(exchange.getIn()).thenReturn(message);
+        Mockito.when(exchange.getExchangeId()).thenReturn("exchange-1");
+        Mockito.when(message.getHeader(AwsAthenaSpanDecorator.OPERATION)).thenReturn(operation);
+        Mockito.when(message.getHeader(AwsAthenaSpanDecorator.DATABASE, String.class)).thenReturn(database);
+        Mockito.when(message.getHeader(AwsAthenaSpanDecorator.QUERY_EXECUTION_ID, String.class)).thenReturn(queryExecutionId);
+        Mockito.when(message.getHeader(AwsAthenaSpanDecorator.WORK_GROUP, String.class)).thenReturn(workGroup);
+        Mockito.when(message.getHeader(AwsAthenaSpanDecorator.QUERY_EXECUTION_STATE)).thenReturn(queryExecutionState);
+
+        AbstractSpanDecorator decorator = new AwsAthenaSpanDecorator();
+
+        MockSpanAdapter span = new MockSpanAdapter();
+
+        decorator.beforeTracingEvent(span, exchange, endpoint);
+
+        assertEquals("athena", span.tags().get(TagConstants.DB_SYSTEM));
+        assertEquals(operation, span.tags().get(AwsAthenaSpanDecorator.ATHENA_OPERATION));
+        assertEquals(database, span.tags().get(AwsAthenaSpanDecorator.ATHENA_DATABASE));
+        assertEquals(database, span.tags().get(TagConstants.DB_NAME));
+        assertEquals(queryExecutionId, span.tags().get(AwsAthenaSpanDecorator.ATHENA_QUERY_EXECUTION_ID));
+        assertEquals(workGroup, span.tags().get(AwsAthenaSpanDecorator.ATHENA_WORK_GROUP));
+        assertEquals(queryExecutionState, span.tags().get(AwsAthenaSpanDecorator.ATHENA_QUERY_EXECUTION_STATE));
+    }
+
+}
diff --git a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/decorators/AwsCloudtrailSpanDecoratorTest.java b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/decorators/AwsCloudtrailSpanDecoratorTest.java
new file mode 100644
index 000000000000..212df192e016
--- /dev/null
+++ b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/decorators/AwsCloudtrailSpanDecoratorTest.java
@@ -0,0 +1,68 @@
+/*
+ * 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.telemetry.decorators;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.telemetry.mock.MockSpanAdapter;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class AwsCloudtrailSpanDecoratorTest {
+
+    @Test
+    public void testGetMessageId() {
+        String eventId = "abcd-1234";
+        Exchange exchange = Mockito.mock(Exchange.class);
+        Message message = Mockito.mock(Message.class);
+
+        Mockito.when(exchange.getIn()).thenReturn(message);
+        Mockito.when(message.getHeader(AwsCloudtrailSpanDecorator.EVENT_ID, String.class)).thenReturn(eventId);
+
+        AbstractMessagingSpanDecorator decorator = new AwsCloudtrailSpanDecorator();
+
+        assertEquals(eventId, decorator.getMessageId(exchange));
+    }
+
+    @Test
+    public void testPre() {
+        String eventName = "ConsoleLogin";
+        String eventSource = "signin.amazonaws.com";
+
+        Endpoint endpoint = Mockito.mock(Endpoint.class);
+        Exchange exchange = Mockito.mock(Exchange.class);
+        Message message = Mockito.mock(Message.class);
+
+        Mockito.when(endpoint.getEndpointUri()).thenReturn("aws-cloudtrail:default");
+        Mockito.when(exchange.getIn()).thenReturn(message);
+        Mockito.when(message.getHeader(AwsCloudtrailSpanDecorator.EVENT_NAME, String.class)).thenReturn(eventName);
+        Mockito.when(message.getHeader(AwsCloudtrailSpanDecorator.EVENT_SOURCE, String.class)).thenReturn(eventSource);
+
+        AbstractMessagingSpanDecorator decorator = new AwsCloudtrailSpanDecorator();
+
+        MockSpanAdapter span = new MockSpanAdapter();
+
+        decorator.beforeTracingEvent(span, exchange, endpoint);
+
+        assertEquals(eventName, span.tags().get(AwsCloudtrailSpanDecorator.CLOUDTRAIL_EVENT_NAME));
+        assertEquals(eventSource, span.tags().get(AwsCloudtrailSpanDecorator.CLOUDTRAIL_EVENT_SOURCE));
+    }
+
+}
diff --git a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/decorators/AwsCwSpanDecoratorTest.java b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/decorators/AwsCwSpanDecoratorTest.java
new file mode 100644
index 000000000000..03c3bbdf6e7b
--- /dev/null
+++ b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/decorators/AwsCwSpanDecoratorTest.java
@@ -0,0 +1,64 @@
+/*
+ * 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.telemetry.decorators;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.telemetry.mock.MockSpanAdapter;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class AwsCwSpanDecoratorTest {
+
+    @Test
+    public void testPre() {
+        String operation = "putMetricData";
+        String metricNamespace = "MyApp";
+        String metricName = "RequestCount";
+        String alarmName = "HighRequestCount";
+        String alarmState = "ALARM";
+
+        Endpoint endpoint = Mockito.mock(Endpoint.class);
+        Exchange exchange = Mockito.mock(Exchange.class);
+        Message message = Mockito.mock(Message.class);
+
+        Mockito.when(endpoint.getEndpointUri()).thenReturn("aws2-cw:MyApp");
+        Mockito.when(exchange.getIn()).thenReturn(message);
+        Mockito.when(exchange.getExchangeId()).thenReturn("exchange-1");
+        Mockito.when(message.getHeader(AwsCwSpanDecorator.OPERATION, String.class)).thenReturn(operation);
+        Mockito.when(message.getHeader(AwsCwSpanDecorator.METRIC_NAMESPACE, String.class)).thenReturn(metricNamespace);
+        Mockito.when(message.getHeader(AwsCwSpanDecorator.METRIC_NAME, String.class)).thenReturn(metricName);
+        Mockito.when(message.getHeader(AwsCwSpanDecorator.ALARM_NAME, String.class)).thenReturn(alarmName);
+        Mockito.when(message.getHeader(AwsCwSpanDecorator.ALARM_STATE, String.class)).thenReturn(alarmState);
+
+        AbstractSpanDecorator decorator = new AwsCwSpanDecorator();
+
+        MockSpanAdapter span = new MockSpanAdapter();
+
+        decorator.beforeTracingEvent(span, exchange, endpoint);
+
+        assertEquals(operation, span.tags().get(AwsCwSpanDecorator.CW_OPERATION));
+        assertEquals(metricNamespace, span.tags().get(AwsCwSpanDecorator.CW_METRIC_NAMESPACE));
+        assertEquals(metricName, span.tags().get(AwsCwSpanDecorator.CW_METRIC_NAME));
+        assertEquals(alarmName, span.tags().get(AwsCwSpanDecorator.CW_ALARM_NAME));
+        assertEquals(alarmState, span.tags().get(AwsCwSpanDecorator.CW_ALARM_STATE));
+    }
+
+}
diff --git a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/decorators/AwsKmsSpanDecoratorTest.java b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/decorators/AwsKmsSpanDecoratorTest.java
new file mode 100644
index 000000000000..3985ec54afbf
--- /dev/null
+++ b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/decorators/AwsKmsSpanDecoratorTest.java
@@ -0,0 +1,58 @@
+/*
+ * 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.telemetry.decorators;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.telemetry.mock.MockSpanAdapter;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class AwsKmsSpanDecoratorTest {
+
+    @Test
+    public void testPre() {
+        String operation = "createKey";
+        String keyArn = "arn:aws:kms:us-east-1:123456789012:key/1234abcd-12ab-34cd-56ef-1234567890ab";
+        String keyState = "Enabled";
+
+        Endpoint endpoint = Mockito.mock(Endpoint.class);
+        Exchange exchange = Mockito.mock(Exchange.class);
+        Message message = Mockito.mock(Message.class);
+
+        Mockito.when(endpoint.getEndpointUri()).thenReturn("aws2-kms:default");
+        Mockito.when(exchange.getIn()).thenReturn(message);
+        Mockito.when(exchange.getExchangeId()).thenReturn("exchange-1");
+        Mockito.when(message.getHeader(AwsKmsSpanDecorator.OPERATION, String.class)).thenReturn(operation);
+        Mockito.when(message.getHeader(AwsKmsSpanDecorator.KEY_ARN, String.class)).thenReturn(keyArn);
+        Mockito.when(message.getHeader(AwsKmsSpanDecorator.KEY_STATE, String.class)).thenReturn(keyState);
+
+        AbstractSpanDecorator decorator = new AwsKmsSpanDecorator();
+
+        MockSpanAdapter span = new MockSpanAdapter();
+
+        decorator.beforeTracingEvent(span, exchange, endpoint);
+
+        assertEquals(operation, span.tags().get(AwsKmsSpanDecorator.KMS_OPERATION));
+        assertEquals(keyArn, span.tags().get(AwsKmsSpanDecorator.KMS_KEY_ARN));
+        assertEquals(keyState, span.tags().get(AwsKmsSpanDecorator.KMS_KEY_STATE));
+    }
+
+}
diff --git a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/decorators/AwsMskSpanDecoratorTest.java b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/decorators/AwsMskSpanDecoratorTest.java
new file mode 100644
index 000000000000..e7348b1b0b05
--- /dev/null
+++ b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/decorators/AwsMskSpanDecoratorTest.java
@@ -0,0 +1,61 @@
+/*
+ * 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.telemetry.decorators;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.telemetry.mock.MockSpanAdapter;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class AwsMskSpanDecoratorTest {
+
+    @Test
+    public void testPre() {
+        String operation = "createCluster";
+        String clusterName = "myCluster";
+        String clusterArn = "arn:aws:kafka:us-east-1:123456789012:cluster/myCluster/abcd";
+        String clusterState = "ACTIVE";
+
+        Endpoint endpoint = Mockito.mock(Endpoint.class);
+        Exchange exchange = Mockito.mock(Exchange.class);
+        Message message = Mockito.mock(Message.class);
+
+        Mockito.when(endpoint.getEndpointUri()).thenReturn("aws2-msk:default");
+        Mockito.when(exchange.getIn()).thenReturn(message);
+        Mockito.when(exchange.getExchangeId()).thenReturn("exchange-1");
+        Mockito.when(message.getHeader(AwsMskSpanDecorator.OPERATION, String.class)).thenReturn(operation);
+        Mockito.when(message.getHeader(AwsMskSpanDecorator.CLUSTER_NAME, String.class)).thenReturn(clusterName);
+        Mockito.when(message.getHeader(AwsMskSpanDecorator.CLUSTER_ARN, String.class)).thenReturn(clusterArn);
+        Mockito.when(message.getHeader(AwsMskSpanDecorator.CLUSTER_STATE, String.class)).thenReturn(clusterState);
+
+        AbstractSpanDecorator decorator = new AwsMskSpanDecorator();
+
+        MockSpanAdapter span = new MockSpanAdapter();
+
+        decorator.beforeTracingEvent(span, exchange, endpoint);
+
+        assertEquals(operation, span.tags().get(AwsMskSpanDecorator.MSK_OPERATION));
+        assertEquals(clusterName, span.tags().get(AwsMskSpanDecorator.MSK_CLUSTER_NAME));
+        assertEquals(clusterArn, span.tags().get(AwsMskSpanDecorator.MSK_CLUSTER_ARN));
+        assertEquals(clusterState, span.tags().get(AwsMskSpanDecorator.MSK_CLUSTER_STATE));
+    }
+
+}
diff --git a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/decorators/AwsRedshiftDataSpanDecoratorTest.java b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/decorators/AwsRedshiftDataSpanDecoratorTest.java
new file mode 100644
index 000000000000..232abd451009
--- /dev/null
+++ b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/decorators/AwsRedshiftDataSpanDecoratorTest.java
@@ -0,0 +1,65 @@
+/*
+ * 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.telemetry.decorators;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.telemetry.TagConstants;
+import org.apache.camel.telemetry.mock.MockSpanAdapter;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class AwsRedshiftDataSpanDecoratorTest {
+
+    @Test
+    public void testPre() {
+        String operation = "executeStatement";
+        String clusterIdentifier = "myCluster";
+        String database = "myDatabase";
+        String statementName = "myStatement";
+
+        Endpoint endpoint = Mockito.mock(Endpoint.class);
+        Exchange exchange = Mockito.mock(Exchange.class);
+        Message message = Mockito.mock(Message.class);
+
+        Mockito.when(endpoint.getEndpointUri()).thenReturn("aws2-redshift-data:default");
+        Mockito.when(exchange.getIn()).thenReturn(message);
+        Mockito.when(exchange.getExchangeId()).thenReturn("exchange-1");
+        Mockito.when(message.getHeader(AwsRedshiftDataSpanDecorator.OPERATION, String.class)).thenReturn(operation);
+        Mockito.when(message.getHeader(AwsRedshiftDataSpanDecorator.CLUSTER_IDENTIFIER, String.class))
+                .thenReturn(clusterIdentifier);
+        Mockito.when(message.getHeader(AwsRedshiftDataSpanDecorator.DATABASE, String.class)).thenReturn(database);
+        Mockito.when(message.getHeader(AwsRedshiftDataSpanDecorator.STATEMENT_NAME, String.class)).thenReturn(statementName);
+
+        AbstractSpanDecorator decorator = new AwsRedshiftDataSpanDecorator();
+
+        MockSpanAdapter span = new MockSpanAdapter();
+
+        decorator.beforeTracingEvent(span, exchange, endpoint);
+
+        assertEquals("redshift", span.tags().get(TagConstants.DB_SYSTEM));
+        assertEquals(operation, span.tags().get(AwsRedshiftDataSpanDecorator.REDSHIFTDATA_OPERATION));
+        assertEquals(clusterIdentifier, span.tags().get(AwsRedshiftDataSpanDecorator.REDSHIFTDATA_CLUSTER_IDENTIFIER));
+        assertEquals(database, span.tags().get(AwsRedshiftDataSpanDecorator.REDSHIFTDATA_DATABASE));
+        assertEquals(database, span.tags().get(TagConstants.DB_NAME));
+        assertEquals(statementName, span.tags().get(AwsRedshiftDataSpanDecorator.REDSHIFTDATA_STATEMENT_NAME));
+    }
+
+}
diff --git a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/decorators/AwsStepFunctionsSpanDecoratorTest.java b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/decorators/AwsStepFunctionsSpanDecoratorTest.java
new file mode 100644
index 000000000000..b20372f377e8
--- /dev/null
+++ b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/decorators/AwsStepFunctionsSpanDecoratorTest.java
@@ -0,0 +1,66 @@
+/*
+ * 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.telemetry.decorators;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.telemetry.mock.MockSpanAdapter;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class AwsStepFunctionsSpanDecoratorTest {
+
+    @Test
+    public void testPre() {
+        String operation = "startExecution";
+        String stateMachineName = "myStateMachine";
+        String stateMachineArn = "arn:aws:states:us-east-1:123456789012:stateMachine:myStateMachine";
+        String executionArn = "arn:aws:states:us-east-1:123456789012:execution:myStateMachine:abcd";
+        String executionName = "myExecution";
+
+        Endpoint endpoint = Mockito.mock(Endpoint.class);
+        Exchange exchange = Mockito.mock(Exchange.class);
+        Message message = Mockito.mock(Message.class);
+
+        Mockito.when(endpoint.getEndpointUri()).thenReturn("aws2-step-functions:default");
+        Mockito.when(exchange.getIn()).thenReturn(message);
+        Mockito.when(exchange.getExchangeId()).thenReturn("exchange-1");
+        Mockito.when(message.getHeader(AwsStepFunctionsSpanDecorator.OPERATION, String.class)).thenReturn(operation);
+        Mockito.when(message.getHeader(AwsStepFunctionsSpanDecorator.STATE_MACHINE_NAME, String.class))
+                .thenReturn(stateMachineName);
+        Mockito.when(message.getHeader(AwsStepFunctionsSpanDecorator.STATE_MACHINE_ARN, String.class))
+                .thenReturn(stateMachineArn);
+        Mockito.when(message.getHeader(AwsStepFunctionsSpanDecorator.EXECUTION_ARN, String.class)).thenReturn(executionArn);
+        Mockito.when(message.getHeader(AwsStepFunctionsSpanDecorator.EXECUTION_NAME, String.class)).thenReturn(executionName);
+
+        AbstractSpanDecorator decorator = new AwsStepFunctionsSpanDecorator();
+
+        MockSpanAdapter span = new MockSpanAdapter();
+
+        decorator.beforeTracingEvent(span, exchange, endpoint);
+
+        assertEquals(operation, span.tags().get(AwsStepFunctionsSpanDecorator.STEPFUNCTIONS_OPERATION));
+        assertEquals(stateMachineName, span.tags().get(AwsStepFunctionsSpanDecorator.STEPFUNCTIONS_STATE_MACHINE_NAME));
+        assertEquals(stateMachineArn, span.tags().get(AwsStepFunctionsSpanDecorator.STEPFUNCTIONS_STATE_MACHINE_ARN));
+        assertEquals(executionArn, span.tags().get(AwsStepFunctionsSpanDecorator.STEPFUNCTIONS_EXECUTION_ARN));
+        assertEquals(executionName, span.tags().get(AwsStepFunctionsSpanDecorator.STEPFUNCTIONS_EXECUTION_NAME));
+    }
+
+}
diff --git a/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/decorators/AwsTimestreamSpanDecoratorTest.java b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/decorators/AwsTimestreamSpanDecoratorTest.java
new file mode 100644
index 000000000000..eb6c9e2b85d0
--- /dev/null
+++ b/components/camel-telemetry/src/test/java/org/apache/camel/telemetry/decorators/AwsTimestreamSpanDecoratorTest.java
@@ -0,0 +1,61 @@
+/*
+ * 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.telemetry.decorators;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.telemetry.TagConstants;
+import org.apache.camel.telemetry.mock.MockSpanAdapter;
+import org.junit.jupiter.api.Test;
+import org.mockito.Mockito;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class AwsTimestreamSpanDecoratorTest {
+
+    @Test
+    public void testPre() {
+        String operation = "writeRecords";
+        String databaseName = "myDatabase";
+        String tableName = "myTable";
+
+        Endpoint endpoint = Mockito.mock(Endpoint.class);
+        Exchange exchange = Mockito.mock(Exchange.class);
+        Message message = Mockito.mock(Message.class);
+
+        Mockito.when(endpoint.getEndpointUri()).thenReturn("aws2-timestream:write");
+        Mockito.when(exchange.getIn()).thenReturn(message);
+        Mockito.when(exchange.getExchangeId()).thenReturn("exchange-1");
+        Mockito.when(message.getHeader(AwsTimestreamSpanDecorator.OPERATION, String.class)).thenReturn(operation);
+        Mockito.when(message.getHeader(AwsTimestreamSpanDecorator.DATABASE_NAME, String.class)).thenReturn(databaseName);
+        Mockito.when(message.getHeader(AwsTimestreamSpanDecorator.TABLE_NAME, String.class)).thenReturn(tableName);
+
+        AbstractSpanDecorator decorator = new AwsTimestreamSpanDecorator();
+
+        MockSpanAdapter span = new MockSpanAdapter();
+
+        decorator.beforeTracingEvent(span, exchange, endpoint);
+
+        assertEquals("timestream", span.tags().get(TagConstants.DB_SYSTEM));
+        assertEquals(operation, span.tags().get(AwsTimestreamSpanDecorator.TIMESTREAM_OPERATION));
+        assertEquals(databaseName, span.tags().get(AwsTimestreamSpanDecorator.TIMESTREAM_DATABASE_NAME));
+        assertEquals(databaseName, span.tags().get(TagConstants.DB_NAME));
+        assertEquals(tableName, span.tags().get(AwsTimestreamSpanDecorator.TIMESTREAM_TABLE_NAME));
+    }
+
+}