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 2022/04/07 18:29:10 UTC

[camel] branch errorhandler-in-dsl updated (5b5accbb7d0 -> 9ba4540d96b)

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

davsclaus pushed a change to branch errorhandler-in-dsl
in repository https://gitbox.apache.org/repos/asf/camel.git


    from 5b5accbb7d0 CAMEL-16834: error handler in model DSL. WIP
     new cc69f0eafe0 CAMEL-16834: error handler in model DSL. WIP
     new 01daada6ef5 CAMEL-16834: error handler in model DSL. WIP
     new 9ba4540d96b CAMEL-16834: error handler in model DSL. WIP

The 3 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.


Summary of changes:
 .../catalog/components/google-bigquery-sql.json    |    3 +-
 .../camel/catalog/components/google-bigquery.json  |    3 +-
 .../apache/camel/catalog/components/rabbitmq.json  |   25 +
 .../camel/catalog/components/reactive-streams.json |    4 +
 .../org/apache/camel/catalog/components/rest.json  |    8 +
 .../apache/camel/catalog/components/resteasy.json  |   13 +
 .../camel/catalog/components/robotframework.json   |    5 +
 .../org/apache/camel/catalog/components/rss.json   |    3 +
 .../org/apache/camel/catalog/models.properties     |    8 +-
 .../apache/camel/catalog/models/camelContext.json  |    2 -
 .../camel/catalog/models/circuitBreaker.json       |    1 -
 .../camel/catalog/models}/deadLetterChannel.json   |    0
 .../camel/catalog/models}/defaultErrorHandler.json |    0
 .../apache/camel/catalog/models/errorHandler.json  |   24 +-
 .../camel/catalog/models}/errorHandlerRef.json     |    0
 .../models}/jtaTransactionErrorHandler.json        |    0
 .../camel/catalog/models}/noErrorHandler.json      |    0
 .../camel/catalog/models/redeliveryPolicy.json     |   27 +-
 .../catalog/models/redeliveryPolicyProfile.json    |    2 +-
 .../models}/springTransactionErrorHandler.json     |    0
 .../org/apache/camel/catalog/others/cdi-jta.json   |    2 +-
 .../apache/camel/catalog/schemas/camel-spring.xsd  | 1372 +++++++++-----------
 components/camel-cdi-jta/pom.xml                   |    1 +
 .../src/generated/resources/cdi-jta.json           |    2 +-
 .../camel-cdi-jta/src/main/docs/cdi-jta.adoc       |    2 +-
 .../java/org/apache/camel/cdi/CdiRouteBuilder.java |   16 -
 .../component/cxf/jaxrs/CxfRsConsumerTest.java     |    4 +-
 .../cxf/jaxrs/CxfRsSpringConsumerTest.java         |    4 +-
 ...JMXTXUseOriginalBodyWithTXErrorHandlerTest.java |    4 +-
 ...tionErrorHandlerRedeliveryDelayTest-context.xml |    2 +-
 .../jms/tx/JMSTransactionErrorHandlerTest.xml      |    2 +-
 .../jms/tx/JMSTransactionalClientTest.xml          |    2 +-
 .../tx/JMSTransactionalClientWithRollbackTest.xml  |    2 +-
 ...nsactionErrorHandlerBuilderAsSpringBeanTest.xml |    2 +-
 .../camel/builder/DeadLetterChannelBuilder.java    |   74 --
 .../camel/builder/DefaultErrorHandlerBuilder.java  |  667 ----------
 .../camel/builder/ErrorHandlerBuilderRef.java      |   78 --
 .../builder/LegacyDeadLetterChannelBuilder.java    |    2 +-
 .../camel/builder/NoErrorHandlerBuilder.java       |   36 -
 .../camel/dsl/groovy/common/GroovyDSL.groovy       |    4 +-
 .../org/apache/camel/dsl/js/JavaScriptDSL.java     |    4 +-
 .../org/apache/camel/dsl/kotlin/KotlinDSL.kt       |    4 +-
 .../org/apache/camel/itest/TransactionSupport.java |    8 +-
 43 files changed, 714 insertions(+), 1708 deletions(-)
 copy {core/camel-core-model/src/generated/resources/org/apache/camel/model/errorhandler => catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models}/deadLetterChannel.json (100%)
 copy {core/camel-core-model/src/generated/resources/org/apache/camel/model/errorhandler => catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models}/defaultErrorHandler.json (100%)
 copy {core/camel-core-model/src/generated/resources/org/apache/camel/model/errorhandler => catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models}/errorHandlerRef.json (100%)
 copy {core/camel-core-model/src/generated/resources/org/apache/camel/model/errorhandler => catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models}/jtaTransactionErrorHandler.json (100%)
 copy {core/camel-core-model/src/generated/resources/org/apache/camel/model/errorhandler => catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models}/noErrorHandler.json (100%)
 copy {core/camel-core-model/src/generated/resources/org/apache/camel/model/errorhandler => catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models}/springTransactionErrorHandler.json (100%)
 delete mode 100644 core/camel-core-model/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java
 delete mode 100644 core/camel-core-model/src/main/java/org/apache/camel/builder/DefaultErrorHandlerBuilder.java
 delete mode 100644 core/camel-core-model/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java
 delete mode 100644 core/camel-core-model/src/main/java/org/apache/camel/builder/NoErrorHandlerBuilder.java


[camel] 02/03: CAMEL-16834: error handler in model DSL. WIP

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

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

commit 01daada6ef58c6caa4e7847510c52e87ef4a62c2
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Apr 7 20:11:21 2022 +0200

    CAMEL-16834: error handler in model DSL. WIP
---
 components/camel-cdi-jta/pom.xml                         |  1 +
 .../camel-cdi-jta/src/generated/resources/cdi-jta.json   |  2 +-
 components/camel-cdi-jta/src/main/docs/cdi-jta.adoc      |  2 +-
 .../main/java/org/apache/camel/cdi/CdiRouteBuilder.java  | 16 ----------------
 .../camel/component/cxf/jaxrs/CxfRsConsumerTest.java     |  4 ++--
 .../component/cxf/jaxrs/CxfRsSpringConsumerTest.java     |  4 ++--
 .../tx/JMXTXUseOriginalBodyWithTXErrorHandlerTest.java   |  4 ++--
 ...ransactionErrorHandlerRedeliveryDelayTest-context.xml |  2 +-
 .../component/jms/tx/JMSTransactionErrorHandlerTest.xml  |  2 +-
 .../component/jms/tx/JMSTransactionalClientTest.xml      |  2 +-
 .../jms/tx/JMSTransactionalClientWithRollbackTest.xml    |  2 +-
 .../TransactionErrorHandlerBuilderAsSpringBeanTest.xml   |  2 +-
 .../java/org/apache/camel/itest/TransactionSupport.java  |  8 ++++----
 13 files changed, 18 insertions(+), 33 deletions(-)

diff --git a/components/camel-cdi-jta/pom.xml b/components/camel-cdi-jta/pom.xml
index f3cec03bf1d..1b7170a8398 100644
--- a/components/camel-cdi-jta/pom.xml
+++ b/components/camel-cdi-jta/pom.xml
@@ -36,6 +36,7 @@
         <firstVersion>3.15.0</firstVersion>
         <label>java</label>
         <title>CDI JTA</title>
+        <supportLevel>Experimental</supportLevel>
     </properties>
 
     <dependencies>
diff --git a/components/camel-cdi-jta/src/generated/resources/cdi-jta.json b/components/camel-cdi-jta/src/generated/resources/cdi-jta.json
index c3a841c75a6..8df4f2c17e9 100644
--- a/components/camel-cdi-jta/src/generated/resources/cdi-jta.json
+++ b/components/camel-cdi-jta/src/generated/resources/cdi-jta.json
@@ -7,7 +7,7 @@
     "deprecated": false,
     "firstVersion": "3.15.0",
     "label": "java",
-    "supportLevel": "Stable",
+    "supportLevel": "Experimental",
     "groupId": "org.apache.camel",
     "artifactId": "camel-cdi-jta",
     "version": "3.17.0-SNAPSHOT"
diff --git a/components/camel-cdi-jta/src/main/docs/cdi-jta.adoc b/components/camel-cdi-jta/src/main/docs/cdi-jta.adoc
index 956b43d8795..f600785d96a 100644
--- a/components/camel-cdi-jta/src/main/docs/cdi-jta.adoc
+++ b/components/camel-cdi-jta/src/main/docs/cdi-jta.adoc
@@ -4,7 +4,7 @@
 :artifactid: camel-cdi-jta
 :description: JTA Transaction support for Camel CDI
 :since: 3.15
-:supportlevel: Stable
+:supportlevel: Experimental
 
 *Since Camel {since}*
 
diff --git a/components/camel-cdi-jta/src/main/java/org/apache/camel/cdi/CdiRouteBuilder.java b/components/camel-cdi-jta/src/main/java/org/apache/camel/cdi/CdiRouteBuilder.java
index a695b0d8287..e3c49c32605 100644
--- a/components/camel-cdi-jta/src/main/java/org/apache/camel/cdi/CdiRouteBuilder.java
+++ b/components/camel-cdi-jta/src/main/java/org/apache/camel/cdi/CdiRouteBuilder.java
@@ -16,9 +16,7 @@
  */
 package org.apache.camel.cdi;
 
-import org.apache.camel.builder.DefaultErrorHandlerBuilder;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.cdi.transaction.CdiTransactionalErrorHandlerBuilder;
 
 /**
  * An extension of the {@link RouteBuilder} to provide some additional JTA helper methods.
@@ -28,18 +26,4 @@ import org.apache.camel.cdi.transaction.CdiTransactionalErrorHandlerBuilder;
  */
 public abstract class CdiRouteBuilder extends RouteBuilder {
 
-    /**
-     * Creates a transaction error handler that will lookup in application context for an exiting transaction manager.
-     *
-     * @return the created error handler
-     */
-    // IMPORTANT: don't leak CdiJtaTransactionErrorHandlerBuilder in the signature,
-    //            only things not depending on camel-jta
-    public <T extends DefaultErrorHandlerBuilder & CdiTransactionalErrorHandlerBuilder> T transactionErrorHandler() {
-        try {
-            return (T) new org.apache.camel.cdi.transaction.CdiJtaTransactionErrorHandlerBuilder();
-        } catch (final NoClassDefFoundError e) {
-            throw new IllegalStateException("JTA not available");
-        }
-    }
 }
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsConsumerTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsConsumerTest.java
index 45312b0cc38..8ef339584d4 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsConsumerTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsConsumerTest.java
@@ -37,7 +37,7 @@ import org.apache.camel.LoggingLevel;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.RuntimeCamelException;
-import org.apache.camel.builder.NoErrorHandlerBuilder;
+import org.apache.camel.builder.LegacyNoErrorHandlerBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.cxf.CXFTestSupport;
 import org.apache.camel.component.cxf.common.message.CxfConstants;
@@ -91,7 +91,7 @@ public class CxfRsConsumerTest extends CamelTestSupport {
         final Processor testProcessor3 = new TestProcessor3();
         return new RouteBuilder() {
             public void configure() {
-                errorHandler(new NoErrorHandlerBuilder());
+                errorHandler(new LegacyNoErrorHandlerBuilder());
                 from(CXF_RS_ENDPOINT_URI).process(testProcessor);
                 from(CXF_RS_ENDPOINT_URI2).process(testProcessor);
                 from(CXF_RS_ENDPOINT_URI3).process(testProcessor);
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsSpringConsumerTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsSpringConsumerTest.java
index 14a87098340..671caa1d5f0 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsSpringConsumerTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsSpringConsumerTest.java
@@ -18,7 +18,7 @@ package org.apache.camel.component.cxf.jaxrs;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
-import org.apache.camel.builder.NoErrorHandlerBuilder;
+import org.apache.camel.builder.LegacyNoErrorHandlerBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.cxf.CXFTestSupport;
 import org.apache.camel.component.cxf.jaxrs.testbean.CustomException;
@@ -55,7 +55,7 @@ public class CxfRsSpringConsumerTest extends CamelSpringTestSupport {
         };
         return new RouteBuilder() {
             public void configure() {
-                errorHandler(new NoErrorHandlerBuilder());
+                errorHandler(new LegacyNoErrorHandlerBuilder());
                 from("cxfrs://bean://rsServer").process(testProcessor);
                 from("cxfrs://bean://rsServer2").process(testProcessor);
                 from("cxfrs://bean://rsServerInvoke?performInvocation=true").process(responseProcessor);
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/tx/JMXTXUseOriginalBodyWithTXErrorHandlerTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/tx/JMXTXUseOriginalBodyWithTXErrorHandlerTest.java
index b57f95d4a76..7862558fc6d 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/tx/JMXTXUseOriginalBodyWithTXErrorHandlerTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/tx/JMXTXUseOriginalBodyWithTXErrorHandlerTest.java
@@ -23,7 +23,7 @@ import org.apache.camel.Produce;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.spring.spi.TransactionErrorHandlerBuilder;
+import org.apache.camel.spring.spi.LegacyTransactionErrorHandlerBuilder;
 import org.junit.jupiter.api.Test;
 import org.springframework.context.support.AbstractXmlApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;
@@ -91,7 +91,7 @@ public class JMXTXUseOriginalBodyWithTXErrorHandlerTest extends JMXTXUseOriginal
 
         @Override
         public void configure() {
-            errorHandler(new TransactionErrorHandlerBuilder());
+            errorHandler(new LegacyTransactionErrorHandlerBuilder());
 
             onException(Exception.class)
                     .handled(true)
diff --git a/components/camel-jms/src/test/resources/org/apache/camel/component/jms/issues/TransactionErrorHandlerRedeliveryDelayTest-context.xml b/components/camel-jms/src/test/resources/org/apache/camel/component/jms/issues/TransactionErrorHandlerRedeliveryDelayTest-context.xml
index 9328946cd0b..6f200341048 100644
--- a/components/camel-jms/src/test/resources/org/apache/camel/component/jms/issues/TransactionErrorHandlerRedeliveryDelayTest-context.xml
+++ b/components/camel-jms/src/test/resources/org/apache/camel/component/jms/issues/TransactionErrorHandlerRedeliveryDelayTest-context.xml
@@ -35,7 +35,7 @@
 
     <bean id="myFailureProcessor" class="org.apache.camel.component.jms.issues.TransactionErrorHandlerRedeliveryDelayTest$MyFailureProcessor"/>
 
-    <bean id="myTransactionErrorHandler" class="org.apache.camel.spring.spi.TransactionErrorHandlerBuilder">
+    <bean id="myTransactionErrorHandler" class="org.apache.camel.spring.spi.LegacyTransactionErrorHandlerBuilder">
         <property name="transactionTemplate" ref="PROPAGATION_REQUIRED"/>
     </bean>
 
diff --git a/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/JMSTransactionErrorHandlerTest.xml b/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/JMSTransactionErrorHandlerTest.xml
index b3e13d1de7f..1fbc765667d 100644
--- a/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/JMSTransactionErrorHandlerTest.xml
+++ b/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/JMSTransactionErrorHandlerTest.xml
@@ -56,7 +56,7 @@
 
     <!-- START SNIPPET: e3 -->
     <!-- use a transaction error handler -->
-    <bean id="myErrorHandler" class="org.apache.camel.spring.spi.TransactionErrorHandlerBuilder">
+    <bean id="myErrorHandler" class="org.apache.camel.spring.spi.LegacyTransactionErrorHandlerBuilder">
         <property name="redeliveryPolicy" ref="myPolicy"/>
     </bean>
     <!-- and let it try to redeliver up till 4 times -->
diff --git a/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/JMSTransactionalClientTest.xml b/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/JMSTransactionalClientTest.xml
index 6e77f1f332b..1d87f3d9954 100644
--- a/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/JMSTransactionalClientTest.xml
+++ b/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/JMSTransactionalClientTest.xml
@@ -46,7 +46,7 @@
 
     <!-- START SNIPPET: e2 -->
     <!-- the transactional error handler -->
-    <bean id="errorHandler" class="org.apache.camel.spring.spi.TransactionErrorHandlerBuilder">
+    <bean id="errorHandler" class="org.apache.camel.spring.spi.LegacyTransactionErrorHandlerBuilder">
         <property name="springTransactionPolicy" ref="PROPAGATION_REQUIRED"/>
     </bean>
 
diff --git a/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/JMSTransactionalClientWithRollbackTest.xml b/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/JMSTransactionalClientWithRollbackTest.xml
index 336d64e4f2f..11fc9f97111 100644
--- a/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/JMSTransactionalClientWithRollbackTest.xml
+++ b/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/JMSTransactionalClientWithRollbackTest.xml
@@ -55,7 +55,7 @@
 
     <!-- START SNIPPET: e2 -->
     <!-- the transactional error handler -->
-    <bean id="errorHandler" class="org.apache.camel.spring.spi.TransactionErrorHandlerBuilder">
+    <bean id="errorHandler" class="org.apache.camel.spring.spi.LegacyTransactionErrorHandlerBuilder">
         <property name="springTransactionPolicy" ref="PROPAGATION_REQUIRED"/>
     </bean>
 
diff --git a/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/TransactionErrorHandlerBuilderAsSpringBeanTest.xml b/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/TransactionErrorHandlerBuilderAsSpringBeanTest.xml
index 038bf43fdb4..cfecb8c9f20 100644
--- a/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/TransactionErrorHandlerBuilderAsSpringBeanTest.xml
+++ b/components/camel-jms/src/test/resources/org/apache/camel/component/jms/tx/TransactionErrorHandlerBuilderAsSpringBeanTest.xml
@@ -66,7 +66,7 @@
     </bean>
 
     <!-- the transaction error handle we refer to from the route -->
-    <bean id="transactionErrorHandler" class="org.apache.camel.spring.spi.TransactionErrorHandlerBuilder">
+    <bean id="transactionErrorHandler" class="org.apache.camel.spring.spi.LegacyTransactionErrorHandlerBuilder">
         <property name="transactionTemplate" ref="PROPAGATION_REQUIRED"/>
     </bean>
 
diff --git a/tests/camel-itest/src/test/java/org/apache/camel/itest/TransactionSupport.java b/tests/camel-itest/src/test/java/org/apache/camel/itest/TransactionSupport.java
index 506d60c2b6b..0ed9c8c878b 100644
--- a/tests/camel-itest/src/test/java/org/apache/camel/itest/TransactionSupport.java
+++ b/tests/camel-itest/src/test/java/org/apache/camel/itest/TransactionSupport.java
@@ -17,8 +17,8 @@
 
 package org.apache.camel.itest;
 
+import org.apache.camel.spring.spi.LegacyTransactionErrorHandlerBuilder;
 import org.apache.camel.spring.spi.SpringTransactionPolicy;
-import org.apache.camel.spring.spi.TransactionErrorHandlerBuilder;
 import org.springframework.transaction.support.TransactionTemplate;
 
 public final class TransactionSupport {
@@ -31,7 +31,7 @@ public final class TransactionSupport {
      * @param  policy using this transaction policy (eg: required, supports, ...)
      * @return        the created error handler
      */
-    public static TransactionErrorHandlerBuilder transactionErrorHandler(SpringTransactionPolicy policy) {
+    public static LegacyTransactionErrorHandlerBuilder transactionErrorHandler(SpringTransactionPolicy policy) {
         return transactionErrorHandler(policy.getTransactionTemplate());
     }
 
@@ -41,8 +41,8 @@ public final class TransactionSupport {
      * @param  template the spring transaction template
      * @return          the created error handler
      */
-    private static TransactionErrorHandlerBuilder transactionErrorHandler(TransactionTemplate template) {
-        TransactionErrorHandlerBuilder answer = new TransactionErrorHandlerBuilder();
+    private static LegacyTransactionErrorHandlerBuilder transactionErrorHandler(TransactionTemplate template) {
+        LegacyTransactionErrorHandlerBuilder answer = new LegacyTransactionErrorHandlerBuilder();
         answer.setTransactionTemplate(template);
         return answer;
     }


[camel] 03/03: CAMEL-16834: error handler in model DSL. WIP

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

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

commit 9ba4540d96ba45c72df4fd5f74d84bd004640b02
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Apr 7 20:28:46 2022 +0200

    CAMEL-16834: error handler in model DSL. WIP
---
 .../catalog/components/google-bigquery-sql.json    |    3 +-
 .../camel/catalog/components/google-bigquery.json  |    3 +-
 .../apache/camel/catalog/components/rabbitmq.json  |   25 +
 .../camel/catalog/components/reactive-streams.json |    4 +
 .../org/apache/camel/catalog/components/rest.json  |    8 +
 .../apache/camel/catalog/components/resteasy.json  |   13 +
 .../camel/catalog/components/robotframework.json   |    5 +
 .../org/apache/camel/catalog/components/rss.json   |    3 +
 .../org/apache/camel/catalog/models.properties     |    8 +-
 .../apache/camel/catalog/models/camelContext.json  |    2 -
 .../camel/catalog/models/circuitBreaker.json       |    1 -
 .../camel/catalog/models/deadLetterChannel.json    |   31 +
 .../camel/catalog/models/defaultErrorHandler.json  |   29 +
 .../apache/camel/catalog/models/errorHandler.json  |   24 +-
 .../camel/catalog/models/errorHandlerRef.json      |   18 +
 .../catalog/models/jtaTransactionErrorHandler.json |   31 +
 .../camel/catalog/models/noErrorHandler.json       |   17 +
 .../camel/catalog/models/redeliveryPolicy.json     |   27 +-
 .../catalog/models/redeliveryPolicyProfile.json    |    2 +-
 .../models/springTransactionErrorHandler.json      |   31 +
 .../org/apache/camel/catalog/others/cdi-jta.json   |    2 +-
 .../apache/camel/catalog/schemas/camel-spring.xsd  | 1372 +++++++++-----------
 .../camel/dsl/groovy/common/GroovyDSL.groovy       |    4 +-
 .../org/apache/camel/dsl/js/JavaScriptDSL.java     |    4 +-
 .../org/apache/camel/dsl/kotlin/KotlinDSL.kt       |    4 +-
 25 files changed, 852 insertions(+), 819 deletions(-)

diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-bigquery-sql.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-bigquery-sql.json
index fb7ffde7a0d..95678b94136 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-bigquery-sql.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-bigquery-sql.json
@@ -35,6 +35,7 @@
     "projectId": { "kind": "path", "displayName": "Project Id", "group": "common", "label": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.bigquery.sql.GoogleBigQuerySQLConfiguration", "configurationField": "configuration", "description": "Google Cloud Project Id" },
     "queryString": { "kind": "path", "displayName": "Query String", "group": "common", "label": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.bigquery.sql.GoogleBigQuerySQLConfiguration", "configurationField": "configuration", "description": "BigQuery standard SQL query" },
     "connectionFactory": { "kind": "parameter", "displayName": "Connection Factory", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.bigquery.GoogleBigQueryConnectionFactory", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.google.bigquery.sql.GoogleBigQuerySQLConfiguration", "configurationField": "configuration", "description": "Connecti [...]
-    "lazyStartProducer": { "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during sta [...]
+    "lazyStartProducer": { "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during sta [...]
+    "serviceAccountKey": { "kind": "parameter", "displayName": "Service Account Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.bigquery.sql.GoogleBigQuerySQLConfiguration", "configurationField": "configuration", "description": "Service account key in json format to authenticate an ap [...]
   }
 }
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-bigquery.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-bigquery.json
index 2649c56bfe7..6d7c3006919 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-bigquery.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/google-bigquery.json
@@ -40,6 +40,7 @@
     "tableId": { "kind": "path", "displayName": "Table Id", "group": "common", "label": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.bigquery.GoogleBigQueryConfiguration", "configurationField": "configuration", "description": "BigQuery table id" },
     "connectionFactory": { "kind": "parameter", "displayName": "Connection Factory", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.google.bigquery.GoogleBigQueryConnectionFactory", "deprecated": false, "deprecationNote": "", "autowired": true, "secret": false, "configurationClass": "org.apache.camel.component.google.bigquery.GoogleBigQueryConfiguration", "configurationField": "configuration", "description": "ConnectionFacto [...]
     "lazyStartProducer": { "kind": "parameter", "displayName": "Lazy Start Producer", "group": "producer", "label": "producer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during sta [...]
-    "useAsInsertId": { "kind": "parameter", "displayName": "Use As Insert Id", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.bigquery.GoogleBigQueryConfiguration", "configurationField": "configuration", "description": "Field name to use as insert id" }
+    "useAsInsertId": { "kind": "parameter", "displayName": "Use As Insert Id", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.bigquery.GoogleBigQueryConfiguration", "configurationField": "configuration", "description": "Field name to use as insert id" },
+    "serviceAccountKey": { "kind": "parameter", "displayName": "Service Account Key", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.google.bigquery.GoogleBigQueryConfiguration", "configurationField": "configuration", "description": "Service account key in json format to authenticate an applicati [...]
   }
 }
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/rabbitmq.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/rabbitmq.json
index 2d0bb30caf1..b3d17e0f98b 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/rabbitmq.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/rabbitmq.json
@@ -79,6 +79,31 @@
     "trustManager": { "kind": "property", "displayName": "Trust Manager", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "javax.net.ssl.TrustManager", "deprecated": false, "autowired": false, "secret": false, "description": "Configure SSL trust manager, SSL should be enabled for this option to be effective" },
     "username": { "kind": "property", "displayName": "Username", "group": "security", "label": "security", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": true, "defaultValue": "guest", "description": "Username in case of authenticated access" }
   },
+  "headers": {
+    "CamelRabbitmqRoutingKey": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Consumer: The routing key that was used to receive the message, or the routing key that will be used when producing a message Producer: The routing key that will be used when sending the message" },
+    "CamelRabbitmqExchangeOverrideName": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Used for force sending the message to this exchange instead of the endpoint configured name on the producer" },
+    "CamelRabbitmqExchangeName": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Consumer: The exchange the message was received from Producer: The exchange the message was received from" },
+    "CamelRabbitmqContentType": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The contentType to set on the RabbitMQ message" },
+    "CamelRabbitmqPriority": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "int", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The priority header to set on the RabbitMQ message" },
+    "CamelRabbitmqDeliveryTag": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The rabbitmq delivery tag of the received message" },
+    "CamelRabbitmqRedeliveryTag": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Whether the message is a redelivered" },
+    "CamelRabbitmqCorrelationId": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The correlationId to set on the RabbitMQ message." },
+    "CamelRabbitmqMessageId": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The message id to set on the RabbitMQ message." },
+    "CamelRabbitmqDeliveryMode": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "If the message should be persistent or not" },
+    "CamelRabbitmqUserId": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The userId to set on the RabbitMQ message" },
+    "CamelRabbitmqClusterId": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The clusterId to set on the RabbitMQ message" },
+    "CamelRabbitmqRequestTimeout": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The timeout for waiting for a reply when using the InOut Exchange Pattern (in milliseconds)" },
+    "CamelRabbitmqReplyTo": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The replyTo to set on the RabbitMQ message" },
+    "CamelRabbitmqContentEncoding": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The contentEncoding to set on the RabbitMQ message" },
+    "CamelRabbitmqType": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The type to set on the RabbitMQ message" },
+    "CamelRabbitmqExpiration": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The expiration to set on the RabbitMQ message" },
+    "CamelRabbitmqTimestamp": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "java.util.Date", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The timestamp to set on the RabbitMQ message" },
+    "CamelRabbitmqAppId": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The appId to set on the RabbitMQ message" },
+    "CamelRabbitmqRequeue": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "This is used by the consumer to control rejection of the message. When the consumer is complete processing the exchange, and if the exchange failed, then the consumer is going to reject the message from the RabbitMQ broker. The value of this header contr [...]
+    "CamelRabbitmqMandatory": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The flag telling the server how to react if the message cannot be routed to a queue." },
+    "CamelRabbitmqImmediate": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Boolean", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The flag telling the server how to react if the message cannot be routed to a queue consumer immediately." },
+    "CamelMessageTimestamp": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "long", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The timestamp of the RabbitMQ message" }
+  },
   "properties": {
     "exchangeName": { "kind": "path", "displayName": "Exchange Name", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The exchange name determines the exchange to which the produced messages will be sent to. In the case of consumers, the exchange name determines the exchange the queue will be bound to." },
     "addresses": { "kind": "parameter", "displayName": "Addresses", "group": "common", "label": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "If this option is set, camel-rabbitmq will try to create connection based on the setting of option addresses. The addresses value is a string which looks like server1:12345, server2:12345" },
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/reactive-streams.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/reactive-streams.json
index 456515615ea..e52ff283681 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/reactive-streams.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/reactive-streams.json
@@ -32,6 +32,10 @@
     "reactiveStreamsEngineConfiguration": { "kind": "property", "displayName": "Reactive Streams Engine Configuration", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.reactive.streams.engine.ReactiveStreamsEngineConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "To use an existing reactive stream engine configuration." },
     "serviceType": { "kind": "property", "displayName": "Service Type", "group": "advanced", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Set the type of the underlying reactive streams implementation to use. The implementation is looked up from the registry or using a ServiceLoader, the default implementation is DefaultCamelReactiveStreamsService" }
   },
+  "headers": {
+    "CamelReactiveStreamsEventType": { "kind": "header", "displayName": "", "group": "consumer", "label": "consumer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Every exchange consumed by Camel has this header set to indicate if the exchange contains an item (value=onNext), an error (value=onError) or a completion event (value=onComplete). Errors and completion notification are not forwarded by [...]
+    "CamelReactiveStreamsCallback": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "org.apache.camel.component.reactive.streams.api.DispatchCallback", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The callback." }
+  },
   "properties": {
     "stream": { "kind": "path", "displayName": "Stream", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Name of the stream channel used by the endpoint to exchange messages." },
     "bridgeErrorHandler": { "kind": "parameter", "displayName": "Bridge Error Handler", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a m [...]
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/rest.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/rest.json
index 2ae80f02515..251211a32db 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/rest.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/rest.json
@@ -32,6 +32,14 @@
     "producerComponentName": { "kind": "property", "displayName": "Producer Component Name", "group": "producer", "label": "producer", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The Camel Rest component to use for (producer) the REST transport, such as http, undertow. If no component has been explicit configured, then Camel will lookup if there is a Camel component that integrates with the [...]
     "autowiredEnabled": { "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which t [...]
   },
+  "headers": {
+    "CamelRestHttpQuery": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The query parameters for the rest call to be used" },
+    "CamelRestHttpUri": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The http uri for the rest call to be used" },
+    "CamelHttpMethod": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The method should be in upper case" },
+    "Content-Type": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The media type such as: 'text\/xml', or 'application\/json' this REST service returns." },
+    "Accept": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The media type such as: 'text\/xml', or 'application\/json' this REST service accepts." },
+    "CamelHttpResponseCode": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The http response code" }
+  },
   "properties": {
     "method": { "kind": "path", "displayName": "Method", "group": "common", "label": "common", "required": true, "type": "string", "javaType": "java.lang.String", "enum": [ "get", "post", "put", "delete", "patch", "head", "trace", "connect", "options" ], "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "HTTP method to use." },
     "path": { "kind": "path", "displayName": "Path", "group": "common", "label": "common", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The base path" },
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/resteasy.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/resteasy.json
index 7c5202837dc..f4c848eb078 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/resteasy.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/resteasy.json
@@ -43,6 +43,19 @@
     "redirectHandlingDisabled": { "kind": "property", "displayName": "Redirect Handling Disabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Disables automatic redirect handling" },
     "headerFilterStrategy": { "kind": "property", "displayName": "Header Filter Strategy", "group": "filter", "label": "filter", "required": false, "type": "object", "javaType": "org.apache.camel.spi.HeaderFilterStrategy", "deprecated": false, "autowired": false, "secret": false, "description": "To use a custom org.apache.camel.spi.HeaderFilterStrategy to filter header to and from Camel message." }
   },
+  "headers": {
+    "CamelResteasyProxyMethod": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The resteasy method to process the request" },
+    "CamelResteasyProxyMethodArgs": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "java.util.ArrayList", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The proxy method params" },
+    "CamelResteasyLogin": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The username" },
+    "CamelResteasyPassword": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The password" },
+    "CamelResteasyContextPath": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The context path" },
+    "CamelResteasyHttpMethod": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The resteasy method to process the request" },
+    "CamelResteasyHttpRequest": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The http request" },
+    "CamelResteasyProxyProducerException": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "Exception", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The proxy client exception" },
+    "CamelHttpQuery": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The http query" },
+    "Content-Type": { "kind": "header", "displayName": "", "group": "producer", "label": "producer", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The content type" },
+    "CamelHttpPath": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The http path" }
+  },
   "properties": {
     "httpUri": { "kind": "path", "displayName": "Http Uri", "group": "common", "label": "common", "required": true, "type": "string", "javaType": "java.net.URI", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The url of the HTTP endpoint to call." },
     "disableStreamCache": { "kind": "parameter", "displayName": "Disable Stream Cache", "group": "common", "label": "common", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Determines whether or not the raw input stream from Servlet is cached or not (Camel will read the stream into a in memory\/overflow to file, Stream caching) cache. By default Camel will cache the Servlet inpu [...]
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/robotframework.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/robotframework.json
index 3f0c8642f3e..22b9b62cab8 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/robotframework.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/robotframework.json
@@ -74,6 +74,11 @@
     "autowiredEnabled": { "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which t [...]
     "configuration": { "kind": "property", "displayName": "Configuration", "group": "advanced", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.component.robotframework.RobotFrameworkCamelConfiguration", "deprecated": false, "autowired": false, "secret": false, "description": "The configuration" }
   },
+  "headers": {
+    "CamelRobotVariables": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "List<String>", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The robot variables." },
+    "CamelRobotReturnCode": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "Integer", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The return code." },
+    "CamelRobotResourceUri": { "kind": "header", "displayName": "", "group": "common", "label": "", "required": false, "javaType": "String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The new resource URI." }
+  },
   "properties": {
     "resourceUri": { "kind": "path", "displayName": "Resource Uri", "group": "common", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "Path to the resource. You can prefix with: classpath, file, http, ref, or bean. classpath, file and http loads the resource using these protocols (classpath is default). ref will lookup the resource in the registry. bean will c [...]
     "allowContextMapAll": { "kind": "parameter", "displayName": "Allow Context Map All", "group": "common", "label": "", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "configurationClass": "org.apache.camel.component.robotframework.RobotFrameworkCamelConfiguration", "configurationField": "configuration", "description": "Sets whether the context map should allow access to all details. By defaul [...]
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/rss.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/rss.json
index b8b9c25125f..7c0f8893e2f 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/rss.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/rss.json
@@ -25,6 +25,9 @@
     "bridgeErrorHandler": { "kind": "property", "displayName": "Bridge Error Handler", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a me [...]
     "autowiredEnabled": { "kind": "property", "displayName": "Autowired Enabled", "group": "advanced", "label": "advanced", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether autowiring is enabled. This is used for automatic autowiring options (the option must be marked as autowired) by looking up in the registry to find if there is a single instance of matching type, which t [...]
   },
+  "headers": {
+    "CamelRssFeed": { "kind": "header", "displayName": "", "group": "consumer", "label": "", "required": false, "javaType": "Object", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The entire SyncFeed object." }
+  },
   "properties": {
     "feedUri": { "kind": "path", "displayName": "Feed Uri", "group": "consumer", "label": "", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "deprecationNote": "", "autowired": false, "secret": false, "description": "The URI to the feed to poll." },
     "bridgeErrorHandler": { "kind": "parameter", "displayName": "Bridge Error Handler", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a m [...]
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models.properties b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models.properties
index 53d3b3afd1b..064d36c8182 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models.properties
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models.properties
@@ -34,6 +34,8 @@ customLoadBalancer
 customServiceFilter
 dataFormats
 datasonnet
+deadLetterChannel
+defaultErrorHandler
 defaultLoadBalancer
 delay
 delete
@@ -46,6 +48,7 @@ dynamicRouter
 endpoint
 enrich
 errorHandler
+errorHandlerRef
 etcdServiceDiscovery
 exchangeProperty
 expression
@@ -68,7 +71,6 @@ header
 healthyServiceFilter
 hl7
 hl7terser
-hystrixConfiguration
 ical
 idempotentConsumer
 inOnly
@@ -83,6 +85,7 @@ joor
 json
 jsonApi
 jsonpath
+jtaTransactionErrorHandler
 kamelet
 keyStoreParameters
 kubernetesServiceDiscovery
@@ -98,6 +101,7 @@ mimeMultipart
 multicast
 mutualTLS
 mvel
+noErrorHandler
 oauth2
 ognl
 onCompletion
@@ -165,7 +169,6 @@ script
 secureRandomParameters
 security
 securityDefinitions
-securityRequirements
 serviceCall
 serviceCallConfiguration
 serviceChooserConfiguration
@@ -181,6 +184,7 @@ soap
 sort
 spel
 split
+springTransactionErrorHandler
 sslContextParameters
 staticServiceDiscovery
 step
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/camelContext.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/camelContext.json
index 7f7a543ee13..926c5f2c0c0 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/camelContext.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/camelContext.json
@@ -60,8 +60,6 @@
     "beans": { "kind": "element", "displayName": "Beans", "required": true, "type": "array", "javaType": "java.util.List<java.lang.Object>", "oneOf": [ "errorHandler" ], "deprecated": false, "autowired": false, "secret": false, "description": "Miscellaneous configurations" },
     "defaultServiceCallConfiguration": { "kind": "element", "displayName": "Default Service Call Configuration", "required": false, "type": "object", "javaType": "org.apache.camel.model.cloud.ServiceCallConfigurationDefinition", "deprecated": false, "autowired": false, "secret": false, "description": "ServiceCall EIP default configuration" },
     "serviceCallConfiguration": { "kind": "element", "displayName": "Service Call Configuration", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.cloud.ServiceCallConfigurationDefinition>", "deprecated": false, "autowired": false, "secret": false, "description": "ServiceCall EIP configurations" },
-    "defaultHystrixConfiguration": { "kind": "element", "displayName": "Default Hystrix Configuration", "required": false, "type": "object", "javaType": "org.apache.camel.model.HystrixConfigurationDefinition", "deprecated": false, "autowired": false, "secret": false, "description": "Hystrix EIP default configuration" },
-    "hystrixConfiguration": { "kind": "element", "displayName": "Hystrix Configuration", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.HystrixConfigurationDefinition>", "deprecated": false, "autowired": false, "secret": false, "description": "Hystrix Circuit Breaker EIP configurations" },
     "defaultResilience4jConfiguration": { "kind": "element", "displayName": "Default Resilience4j Configuration", "required": false, "type": "object", "javaType": "org.apache.camel.model.Resilience4jConfigurationDefinition", "deprecated": false, "autowired": false, "secret": false, "description": "Resilience4j EIP default configuration" },
     "resilience4jConfiguration": { "kind": "element", "displayName": "Resilience4j Configuration", "required": false, "type": "array", "javaType": "java.util.List<org.apache.camel.model.Resilience4jConfigurationDefinition>", "deprecated": false, "autowired": false, "secret": false, "description": "Resilience4j Circuit Breaker EIP configurations" },
     "defaultFaultToleranceConfiguration": { "kind": "element", "displayName": "Default Fault Tolerance Configuration", "required": false, "type": "object", "javaType": "org.apache.camel.model.FaultToleranceConfigurationDefinition", "deprecated": false, "autowired": false, "secret": false, "description": "MicroProfile Fault Tolerance EIP default configuration" },
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/circuitBreaker.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/circuitBreaker.json
index 54054748801..aaf7a376cb7 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/circuitBreaker.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/circuitBreaker.json
@@ -12,7 +12,6 @@
     "output": false
   },
   "properties": {
-    "hystrixConfiguration": { "kind": "element", "displayName": "Hystrix Configuration", "required": false, "type": "object", "javaType": "org.apache.camel.model.HystrixConfigurationDefinition", "deprecated": true, "autowired": false, "secret": false, "description": "Configures the circuit breaker to use Hystrix with the given configuration." },
     "resilience4jConfiguration": { "kind": "element", "displayName": "Resilience4j Configuration", "required": false, "type": "object", "javaType": "org.apache.camel.model.Resilience4jConfigurationDefinition", "deprecated": false, "autowired": false, "secret": false, "description": "Configures the circuit breaker to use Resilience4j with the given configuration." },
     "faultToleranceConfiguration": { "kind": "element", "displayName": "Fault Tolerance Configuration", "required": false, "type": "object", "javaType": "org.apache.camel.model.FaultToleranceConfigurationDefinition", "deprecated": false, "autowired": false, "secret": false, "description": "Configures the circuit breaker to use MicroProfile Fault Tolerance with the given configuration." },
     "configuration": { "kind": "attribute", "displayName": "Configuration", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Refers to a circuit breaker configuration (such as hystrix, resillience4j, or microprofile-fault-tolerance) to use for configuring the circuit breaker EIP." },
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/deadLetterChannel.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/deadLetterChannel.json
new file mode 100644
index 00000000000..5e30167a115
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/deadLetterChannel.json
@@ -0,0 +1,31 @@
+{
+  "model": {
+    "kind": "model",
+    "name": "deadLetterChannel",
+    "title": "Dead Letter Channel",
+    "description": "Dead letter channel error handler.",
+    "deprecated": false,
+    "label": "configuration,error",
+    "javaType": "org.apache.camel.model.errorhandler.DeadLetterChannelDefinition",
+    "abstract": false,
+    "input": false,
+    "output": false
+  },
+  "properties": {
+    "deadLetterUri": { "kind": "attribute", "displayName": "Dead Letter Uri", "required": true, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The dead letter endpoint uri for the Dead Letter error handler." },
+    "deadLetterHandleNewException": { "kind": "attribute", "displayName": "Dead Letter Handle New Exception", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Whether the dead letter channel should handle (and ignore) any new exception that may been thrown during sending the message to the dead letter endpoint. The default value is true which means an [...]
+    "loggerRef": { "kind": "attribute", "displayName": "Logger Ref", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "References to a logger to use as logger for the error handler" },
+    "level": { "kind": "attribute", "displayName": "Level", "label": "advanced", "required": false, "type": "enum", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "debug", "error", "info", "off", "trace", "warn" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "ERROR", "description": "Logging level to use when using the logging error handler type." },
+    "logName": { "kind": "attribute", "displayName": "Log Name", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Name of the logger to use for the logging error handler" },
+    "useOriginalMessage": { "kind": "attribute", "displayName": "Use Original Message", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Will use the original input org.apache.camel.Message (original body and headers) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have fail [...]
+    "useOriginalBody": { "kind": "attribute", "displayName": "Use Original Body", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Will use the original input org.apache.camel.Message body (original body only) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and t [...]
+    "onRedeliveryRef": { "kind": "attribute", "displayName": "On Redelivery Ref", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.Processor", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a processor that should be processed before a redelivery attempt. Can be used to change the org.apache.camel.Exchange before its being redelivered." },
+    "onExceptionOccurredRef": { "kind": "attribute", "displayName": "On Exception Occurred Ref", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.Processor", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a processor that should be processed just after an exception occurred. Can be used to perform custom logging about the occurred exception at the exact time it happened. Important: Any exception thrown  [...]
+    "onPrepareFailureRef": { "kind": "attribute", "displayName": "On Prepare Failure Ref", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.Processor", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a processor to prepare the org.apache.camel.Exchange before handled by the failure processor \/ dead letter channel. This allows for example to enrich the message before sending to a dead letter queue." },
+    "retryWhileRef": { "kind": "attribute", "displayName": "Retry While Ref", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.Processor", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a retry while predicate. Will continue retrying until the predicate evaluates to false." },
+    "redeliveryPolicyRef": { "kind": "attribute", "displayName": "Redelivery Policy Ref", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.processor.errorhandler.RedeliveryPolicy", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a RedeliveryPolicy to be used for redelivery settings." },
+    "executorServiceRef": { "kind": "attribute", "displayName": "Executor Service Ref", "label": "advanced", "required": false, "type": "object", "javaType": "java.util.concurrent.ScheduledExecutorService", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a thread pool to be used by the error handler" },
+    "redeliveryPolicy": { "kind": "element", "displayName": "Redelivery Policy", "required": false, "type": "object", "javaType": "org.apache.camel.model.RedeliveryPolicyDefinition", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the redelivery settings" },
+    "id": { "kind": "attribute", "displayName": "Id", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The id of this node" }
+  }
+}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/defaultErrorHandler.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/defaultErrorHandler.json
new file mode 100644
index 00000000000..724d2885089
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/defaultErrorHandler.json
@@ -0,0 +1,29 @@
+{
+  "model": {
+    "kind": "model",
+    "name": "defaultErrorHandler",
+    "title": "Default Error Handler",
+    "description": "Default error handler.",
+    "deprecated": false,
+    "label": "configuration,error",
+    "javaType": "org.apache.camel.model.errorhandler.DefaultErrorHandlerDefinition",
+    "abstract": false,
+    "input": false,
+    "output": false
+  },
+  "properties": {
+    "loggerRef": { "kind": "attribute", "displayName": "Logger Ref", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "References to a logger to use as logger for the error handler" },
+    "level": { "kind": "attribute", "displayName": "Level", "label": "advanced", "required": false, "type": "enum", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "debug", "error", "info", "off", "trace", "warn" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "ERROR", "description": "Logging level to use when using the logging error handler type." },
+    "logName": { "kind": "attribute", "displayName": "Log Name", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Name of the logger to use for the logging error handler" },
+    "useOriginalMessage": { "kind": "attribute", "displayName": "Use Original Message", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Will use the original input org.apache.camel.Message (original body and headers) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have fail [...]
+    "useOriginalBody": { "kind": "attribute", "displayName": "Use Original Body", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Will use the original input org.apache.camel.Message body (original body only) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and t [...]
+    "onRedeliveryRef": { "kind": "attribute", "displayName": "On Redelivery Ref", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.Processor", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a processor that should be processed before a redelivery attempt. Can be used to change the org.apache.camel.Exchange before its being redelivered." },
+    "onExceptionOccurredRef": { "kind": "attribute", "displayName": "On Exception Occurred Ref", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.Processor", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a processor that should be processed just after an exception occurred. Can be used to perform custom logging about the occurred exception at the exact time it happened. Important: Any exception thrown  [...]
+    "onPrepareFailureRef": { "kind": "attribute", "displayName": "On Prepare Failure Ref", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.Processor", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a processor to prepare the org.apache.camel.Exchange before handled by the failure processor \/ dead letter channel. This allows for example to enrich the message before sending to a dead letter queue." },
+    "retryWhileRef": { "kind": "attribute", "displayName": "Retry While Ref", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.Processor", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a retry while predicate. Will continue retrying until the predicate evaluates to false." },
+    "redeliveryPolicyRef": { "kind": "attribute", "displayName": "Redelivery Policy Ref", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.processor.errorhandler.RedeliveryPolicy", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a RedeliveryPolicy to be used for redelivery settings." },
+    "executorServiceRef": { "kind": "attribute", "displayName": "Executor Service Ref", "label": "advanced", "required": false, "type": "object", "javaType": "java.util.concurrent.ScheduledExecutorService", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a thread pool to be used by the error handler" },
+    "redeliveryPolicy": { "kind": "element", "displayName": "Redelivery Policy", "required": false, "type": "object", "javaType": "org.apache.camel.model.RedeliveryPolicyDefinition", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the redelivery settings" },
+    "id": { "kind": "attribute", "displayName": "Id", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The id of this node" }
+  }
+}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/errorHandler.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/errorHandler.json
index 01f274bc93e..9b2e751b23a 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/errorHandler.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/errorHandler.json
@@ -3,32 +3,16 @@
     "kind": "model",
     "name": "errorHandler",
     "title": "Error Handler",
-    "description": "Error handler settings",
+    "description": "Base class for error handler definitions.",
     "deprecated": false,
-    "label": "spring,configuration,error",
-    "javaType": "org.apache.camel.spring.xml.ErrorHandlerDefinition",
+    "label": "configuration,error",
+    "javaType": "org.apache.camel.model.ErrorHandlerDefinition",
     "abstract": false,
     "input": false,
     "output": false
   },
   "properties": {
-    "type": { "kind": "attribute", "displayName": "Type", "required": true, "type": "enum", "javaType": "org.apache.camel.spring.xml.ErrorHandlerType", "enum": [ "dead-letter-channel", "default-error-handler", "no-error-handler", "transaction-error-handler" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "DefaultErrorHandler", "description": "The type of the error handler" },
-    "deadLetterUri": { "kind": "attribute", "displayName": "Dead Letter Uri", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The dead letter endpoint uri for the Dead Letter error handler." },
-    "deadLetterHandleNewException": { "kind": "attribute", "displayName": "Dead Letter Handle New Exception", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Whether the dead letter channel should handle (and ignore) any new exception that may been thrown during sending the message to the dead letter endpoint. The default value is true which means any such kind of exception is handled and ignor [...]
-    "level": { "kind": "attribute", "displayName": "Level", "required": false, "type": "enum", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "debug", "error", "info", "off", "trace", "warn" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "ERROR", "description": "Logging level to use when using the logging error handler type." },
-    "rollbackLoggingLevel": { "kind": "attribute", "displayName": "Rollback Logging Level", "required": false, "type": "enum", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "debug", "error", "info", "off", "trace", "warn" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "WARN", "description": "Sets the logging level to use for logging transactional rollback. This option is default WARN." },
-    "logName": { "kind": "attribute", "displayName": "Log Name", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Name of the logger to use for the logging error handler" },
-    "useOriginalMessage": { "kind": "attribute", "displayName": "Use Original Message", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Will use the original input org.apache.camel.Message (original body and headers) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache [...]
-    "useOriginalBody": { "kind": "attribute", "displayName": "Use Original Body", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Will use the original input org.apache.camel.Message body (original body only) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and the org.apache.camel.E [...]
-    "transactionTemplateRef": { "kind": "attribute", "displayName": "Transaction Template Ref", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "References to the org.springframework.transaction.support.TransactionTemplate to use with the transaction error handler." },
-    "transactionManagerRef": { "kind": "attribute", "displayName": "Transaction Manager Ref", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "References to the org.springframework.transaction.PlatformTransactionManager to use with the transaction error handler." },
-    "onRedeliveryRef": { "kind": "attribute", "displayName": "On Redelivery Ref", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a processor that should be processed before a redelivery attempt. Can be used to change the org.apache.camel.Exchange before its being redelivered." },
-    "onExceptionOccurredRef": { "kind": "attribute", "displayName": "On Exception Occurred Ref", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a processor that should be processed just after an exception occurred. Can be used to perform custom logging about the occurred exception at the exact time it happened. Important: Any exception thrown from this processor will be ign [...]
-    "onPrepareFailureRef": { "kind": "attribute", "displayName": "On Prepare Failure Ref", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a processor to prepare the org.apache.camel.Exchange before handled by the failure processor \/ dead letter channel. This allows for example to enrich the message before sending to a dead letter queue." },
-    "retryWhileRef": { "kind": "attribute", "displayName": "Retry While Ref", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to an retry while expression. Will continue retrying until expression evaluates to false." },
-    "redeliveryPolicyRef": { "kind": "attribute", "displayName": "Redelivery Policy Ref", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a RedeliveryPolicy to be used for redelivery settings." },
-    "executorServiceRef": { "kind": "attribute", "displayName": "Executor Service Ref", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a thread pool to be used by the error handler" },
-    "redeliveryPolicy": { "kind": "element", "displayName": "Redelivery Policy", "required": false, "type": "object", "javaType": "org.apache.camel.spring.xml.CamelRedeliveryPolicyFactoryBean", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the redelivery settings" },
+    "errorHandlerType": { "kind": "element", "displayName": "Error Handler Type", "required": true, "type": "object", "javaType": "org.apache.camel.ErrorHandlerFactory", "oneOf": [ "deadLetterChannel", "defaultErrorHandler", "jtaTransactionErrorHandler", "noErrorHandler", "springTransactionErrorHandler" ], "deprecated": false, "autowired": false, "secret": false },
     "id": { "kind": "attribute", "displayName": "Id", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The id of this node" }
   }
 }
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/errorHandlerRef.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/errorHandlerRef.json
new file mode 100644
index 00000000000..b1cc07bde2a
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/errorHandlerRef.json
@@ -0,0 +1,18 @@
+{
+  "model": {
+    "kind": "model",
+    "name": "errorHandlerRef",
+    "title": "Error Handler Ref",
+    "description": "Dead letter channel error handler.",
+    "deprecated": false,
+    "label": "configuration,error",
+    "javaType": "org.apache.camel.model.errorhandler.ErrorHandlerRefDefinition",
+    "abstract": false,
+    "input": false,
+    "output": false
+  },
+  "properties": {
+    "ref": { "kind": "attribute", "displayName": "Ref", "required": false, "type": "object", "javaType": "org.apache.camel.ErrorHandlerFactory", "deprecated": false, "autowired": false, "secret": false, "description": "References to an existing or custom error handler." },
+    "id": { "kind": "attribute", "displayName": "Id", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The id of this node" }
+  }
+}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/jtaTransactionErrorHandler.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/jtaTransactionErrorHandler.json
new file mode 100644
index 00000000000..e80961aebb2
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/jtaTransactionErrorHandler.json
@@ -0,0 +1,31 @@
+{
+  "model": {
+    "kind": "model",
+    "name": "jtaTransactionErrorHandler",
+    "title": "Jta Transaction Error Handler",
+    "description": "JTA based transactional error handler (requires camel-jta).",
+    "deprecated": false,
+    "label": "configuration,error",
+    "javaType": "org.apache.camel.model.errorhandler.JtaTransactionErrorHandlerDefinition",
+    "abstract": false,
+    "input": false,
+    "output": false
+  },
+  "properties": {
+    "transactedPolicyRef": { "kind": "attribute", "displayName": "Transacted Policy Ref", "required": false, "type": "object", "javaType": "org.apache.camel.spi.TransactedPolicy", "deprecated": false, "autowired": false, "secret": false, "description": "The transacted policy to use that is configured for either Spring or JTA based transactions. If no policy has been configured then Camel will attempt to auto-discover." },
+    "rollbackLoggingLevel": { "kind": "attribute", "displayName": "Rollback Logging Level", "required": false, "type": "enum", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "WARN", "description": "Sets the logging level to use for logging transactional rollback. This option is default WARN." },
+    "loggerRef": { "kind": "attribute", "displayName": "Logger Ref", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "References to a logger to use as logger for the error handler" },
+    "level": { "kind": "attribute", "displayName": "Level", "label": "advanced", "required": false, "type": "enum", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "debug", "error", "info", "off", "trace", "warn" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "ERROR", "description": "Logging level to use when using the logging error handler type." },
+    "logName": { "kind": "attribute", "displayName": "Log Name", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Name of the logger to use for the logging error handler" },
+    "useOriginalMessage": { "kind": "attribute", "displayName": "Use Original Message", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Will use the original input org.apache.camel.Message (original body and headers) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have fail [...]
+    "useOriginalBody": { "kind": "attribute", "displayName": "Use Original Body", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Will use the original input org.apache.camel.Message body (original body only) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and t [...]
+    "onRedeliveryRef": { "kind": "attribute", "displayName": "On Redelivery Ref", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.Processor", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a processor that should be processed before a redelivery attempt. Can be used to change the org.apache.camel.Exchange before its being redelivered." },
+    "onExceptionOccurredRef": { "kind": "attribute", "displayName": "On Exception Occurred Ref", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.Processor", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a processor that should be processed just after an exception occurred. Can be used to perform custom logging about the occurred exception at the exact time it happened. Important: Any exception thrown  [...]
+    "onPrepareFailureRef": { "kind": "attribute", "displayName": "On Prepare Failure Ref", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.Processor", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a processor to prepare the org.apache.camel.Exchange before handled by the failure processor \/ dead letter channel. This allows for example to enrich the message before sending to a dead letter queue." },
+    "retryWhileRef": { "kind": "attribute", "displayName": "Retry While Ref", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.Processor", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a retry while predicate. Will continue retrying until the predicate evaluates to false." },
+    "redeliveryPolicyRef": { "kind": "attribute", "displayName": "Redelivery Policy Ref", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.processor.errorhandler.RedeliveryPolicy", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a RedeliveryPolicy to be used for redelivery settings." },
+    "executorServiceRef": { "kind": "attribute", "displayName": "Executor Service Ref", "label": "advanced", "required": false, "type": "object", "javaType": "java.util.concurrent.ScheduledExecutorService", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a thread pool to be used by the error handler" },
+    "redeliveryPolicy": { "kind": "element", "displayName": "Redelivery Policy", "required": false, "type": "object", "javaType": "org.apache.camel.model.RedeliveryPolicyDefinition", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the redelivery settings" },
+    "id": { "kind": "attribute", "displayName": "Id", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The id of this node" }
+  }
+}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/noErrorHandler.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/noErrorHandler.json
new file mode 100644
index 00000000000..f0e1feaaa4f
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/noErrorHandler.json
@@ -0,0 +1,17 @@
+{
+  "model": {
+    "kind": "model",
+    "name": "noErrorHandler",
+    "title": "No Error Handler",
+    "description": "No error handler.",
+    "deprecated": false,
+    "label": "configuration,error",
+    "javaType": "org.apache.camel.model.errorhandler.NoErrorHandlerDefinition",
+    "abstract": false,
+    "input": false,
+    "output": false
+  },
+  "properties": {
+    "id": { "kind": "attribute", "displayName": "Id", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The id of this node" }
+  }
+}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/redeliveryPolicy.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/redeliveryPolicy.json
index b4b43682a8a..c8af0840dac 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/redeliveryPolicy.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/redeliveryPolicy.json
@@ -13,28 +13,29 @@
   },
   "properties": {
     "maximumRedeliveries": { "kind": "attribute", "displayName": "Maximum Redeliveries", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the maximum redeliveries x = redeliver at most x times 0 = no redeliveries -1 = redeliver forever" },
-    "redeliveryDelay": { "kind": "attribute", "displayName": "Redelivery Delay", "required": false, "type": "duration", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the initial redelivery delay" },
+    "redeliveryDelay": { "kind": "attribute", "displayName": "Redelivery Delay", "required": false, "type": "duration", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "1000", "description": "Sets the initial redelivery delay" },
     "asyncDelayedRedelivery": { "kind": "attribute", "displayName": "Async Delayed Redelivery", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Allow asynchronous delayed redelivery. The route, in particular the consumer's component, must support the Asynchronous Routing Engine (e.g. seda)." },
-    "backOffMultiplier": { "kind": "attribute", "displayName": "Back Off Multiplier", "required": false, "type": "number", "javaType": "java.lang.Double", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the back off multiplier" },
+    "backOffMultiplier": { "kind": "attribute", "displayName": "Back Off Multiplier", "required": false, "type": "number", "javaType": "java.lang.Double", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "2.0", "description": "Sets the back off multiplier" },
     "useExponentialBackOff": { "kind": "attribute", "displayName": "Use Exponential Back Off", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Turn on exponential backk off" },
-    "collisionAvoidanceFactor": { "kind": "attribute", "displayName": "Collision Avoidance Factor", "label": "advanced", "required": false, "type": "number", "javaType": "java.lang.Double", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the collision avoidance factor" },
+    "collisionAvoidanceFactor": { "kind": "attribute", "displayName": "Collision Avoidance Factor", "label": "advanced", "required": false, "type": "number", "javaType": "java.lang.Double", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "0.15", "description": "Sets the collision avoidance factor" },
     "useCollisionAvoidance": { "kind": "attribute", "displayName": "Use Collision Avoidance", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Turn on collision avoidance." },
-    "maximumRedeliveryDelay": { "kind": "attribute", "displayName": "Maximum Redelivery Delay", "required": false, "type": "duration", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the maximum delay between redelivery" },
-    "retriesExhaustedLogLevel": { "kind": "attribute", "displayName": "Retries Exhausted Log Level", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.LoggingLevel", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the logging level to use when retries have been exhausted" },
-    "retryAttemptedLogLevel": { "kind": "attribute", "displayName": "Retry Attempted Log Level", "required": false, "type": "object", "javaType": "org.apache.camel.LoggingLevel", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the logging level to use for logging retry attempts" },
-    "retryAttemptedLogInterval": { "kind": "attribute", "displayName": "Retry Attempted Log Interval", "label": "advanced", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the interval to use for logging retry attempts" },
-    "logRetryAttempted": { "kind": "attribute", "displayName": "Log Retry Attempted", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether retry attempts should be logged or not. Can be used to include or reduce verbose." },
-    "logStackTrace": { "kind": "attribute", "displayName": "Log Stack Trace", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether stack traces should be logged. Can be used to include or reduce verbose." },
+    "maximumRedeliveryDelay": { "kind": "attribute", "displayName": "Maximum Redelivery Delay", "required": false, "type": "duration", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "60000", "description": "Sets the maximum delay between redelivery" },
+    "retriesExhaustedLogLevel": { "kind": "attribute", "displayName": "Retries Exhausted Log Level", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.LoggingLevel", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "ERROR", "description": "Sets the logging level to use when retries have been exhausted" },
+    "retryAttemptedLogLevel": { "kind": "attribute", "displayName": "Retry Attempted Log Level", "required": false, "type": "object", "javaType": "org.apache.camel.LoggingLevel", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "DEBUG", "description": "Sets the logging level to use for logging retry attempts" },
+    "retryAttemptedLogInterval": { "kind": "attribute", "displayName": "Retry Attempted Log Interval", "label": "advanced", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "1", "description": "Sets the interval to use for logging retry attempts" },
+    "logRetryAttempted": { "kind": "attribute", "displayName": "Log Retry Attempted", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Sets whether retry attempts should be logged or not. Can be used to include or reduce verbose." },
+    "logStackTrace": { "kind": "attribute", "displayName": "Log Stack Trace", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Sets whether stack traces should be logged. Can be used to include or reduce verbose." },
     "logRetryStackTrace": { "kind": "attribute", "displayName": "Log Retry Stack Trace", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether stack traces should be logged when an retry attempt failed. Can be used to include or reduce verbose." },
     "logHandled": { "kind": "attribute", "displayName": "Log Handled", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether handled exceptions should be logged or not. Can be used to include or reduce verbose." },
-    "logNewException": { "kind": "attribute", "displayName": "Log New Exception", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether new exceptions should be logged or not. Can be used to include or reduce verbose. A new exception is an exception that was thrown while handling a previous exception." },
+    "logNewException": { "kind": "attribute", "displayName": "Log New Exception", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Sets whether new exceptions should be logged or not. Can be used to include or reduce verbose. A new exception is an exception that was thrown while handling a previous exception." },
     "logContinued": { "kind": "attribute", "displayName": "Log Continued", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether continued exceptions should be logged or not. Can be used to include or reduce verbose." },
-    "logExhausted": { "kind": "attribute", "displayName": "Log Exhausted", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether exhausted exceptions should be logged or not. Can be used to include or reduce verbose." },
+    "logExhausted": { "kind": "attribute", "displayName": "Log Exhausted", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Sets whether exhausted exceptions should be logged or not. Can be used to include or reduce verbose." },
     "logExhaustedMessageHistory": { "kind": "attribute", "displayName": "Log Exhausted Message History", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether exhausted exceptions should be logged including message history or not (supports property placeholders). Can be used to include or reduce verbose." },
     "logExhaustedMessageBody": { "kind": "attribute", "displayName": "Log Exhausted Message Body", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Sets whether exhausted message body should be logged including message history or not (supports property placeholders). Can be used to include or reduce verbose. Requires logExhaustedMessageHistory to be  [...]
     "disableRedelivery": { "kind": "attribute", "displayName": "Disable Redelivery", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Disables redelivery (same as setting maximum redeliveries to 0)" },
     "delayPattern": { "kind": "attribute", "displayName": "Delay Pattern", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the delay pattern with delay intervals." },
-    "allowRedeliveryWhileStopping": { "kind": "attribute", "displayName": "Allow Redelivery While Stopping", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Controls whether to allow redelivery while stopping\/shutting down a route that uses error handling." },
-    "exchangeFormatterRef": { "kind": "attribute", "displayName": "Exchange Formatter Ref", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the reference of the instance of org.apache.camel.spi.ExchangeFormatter to generate the log message from exchange." }
+    "allowRedeliveryWhileStopping": { "kind": "attribute", "displayName": "Allow Redelivery While Stopping", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": true, "description": "Controls whether to allow redelivery while stopping\/shutting down a route that uses error handling." },
+    "exchangeFormatterRef": { "kind": "attribute", "displayName": "Exchange Formatter Ref", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the reference of the instance of org.apache.camel.spi.ExchangeFormatter to generate the log message from exchange." },
+    "id": { "kind": "attribute", "displayName": "Id", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The id of this node" }
   }
 }
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/redeliveryPolicyProfile.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/redeliveryPolicyProfile.json
index 6e4afad07bc..8d5e4c3df90 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/redeliveryPolicyProfile.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/redeliveryPolicyProfile.json
@@ -4,7 +4,7 @@
     "name": "redeliveryPolicyProfile",
     "title": "Redelivery Policy Profile",
     "description": "Configuration of redelivery policy.",
-    "deprecated": false,
+    "deprecated": true,
     "label": "spring,configuration",
     "javaType": "org.apache.camel.spring.xml.CamelRedeliveryPolicyFactoryBean",
     "abstract": false,
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/springTransactionErrorHandler.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/springTransactionErrorHandler.json
new file mode 100644
index 00000000000..13e9822a850
--- /dev/null
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/springTransactionErrorHandler.json
@@ -0,0 +1,31 @@
+{
+  "model": {
+    "kind": "model",
+    "name": "springTransactionErrorHandler",
+    "title": "Spring Transaction Error Handler",
+    "description": "Spring based transactional error handler (requires camel-spring).",
+    "deprecated": false,
+    "label": "configuration,error",
+    "javaType": "org.apache.camel.model.errorhandler.SpringTransactionErrorHandlerDefinition",
+    "abstract": false,
+    "input": false,
+    "output": false
+  },
+  "properties": {
+    "transactedPolicyRef": { "kind": "attribute", "displayName": "Transacted Policy Ref", "required": false, "type": "object", "javaType": "org.apache.camel.spi.TransactedPolicy", "deprecated": false, "autowired": false, "secret": false, "description": "The transacted policy to use that is configured for either Spring or JTA based transactions. If no policy has been configured then Camel will attempt to auto-discover." },
+    "rollbackLoggingLevel": { "kind": "attribute", "displayName": "Rollback Logging Level", "required": false, "type": "enum", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "TRACE", "DEBUG", "INFO", "WARN", "ERROR", "OFF" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "WARN", "description": "Sets the logging level to use for logging transactional rollback. This option is default WARN." },
+    "loggerRef": { "kind": "attribute", "displayName": "Logger Ref", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "References to a logger to use as logger for the error handler" },
+    "level": { "kind": "attribute", "displayName": "Level", "label": "advanced", "required": false, "type": "enum", "javaType": "org.apache.camel.LoggingLevel", "enum": [ "debug", "error", "info", "off", "trace", "warn" ], "deprecated": false, "autowired": false, "secret": false, "defaultValue": "ERROR", "description": "Logging level to use when using the logging error handler type." },
+    "logName": { "kind": "attribute", "displayName": "Log Name", "label": "advanced", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Name of the logger to use for the logging error handler" },
+    "useOriginalMessage": { "kind": "attribute", "displayName": "Use Original Message", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Will use the original input org.apache.camel.Message (original body and headers) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have fail [...]
+    "useOriginalBody": { "kind": "attribute", "displayName": "Use Original Body", "label": "advanced", "required": false, "type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, "defaultValue": false, "description": "Will use the original input org.apache.camel.Message body (original body only) when an org.apache.camel.Exchange is moved to the dead letter queue. Notice: this only applies when all redeliveries attempt have failed and t [...]
+    "onRedeliveryRef": { "kind": "attribute", "displayName": "On Redelivery Ref", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.Processor", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a processor that should be processed before a redelivery attempt. Can be used to change the org.apache.camel.Exchange before its being redelivered." },
+    "onExceptionOccurredRef": { "kind": "attribute", "displayName": "On Exception Occurred Ref", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.Processor", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a processor that should be processed just after an exception occurred. Can be used to perform custom logging about the occurred exception at the exact time it happened. Important: Any exception thrown  [...]
+    "onPrepareFailureRef": { "kind": "attribute", "displayName": "On Prepare Failure Ref", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.Processor", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a processor to prepare the org.apache.camel.Exchange before handled by the failure processor \/ dead letter channel. This allows for example to enrich the message before sending to a dead letter queue." },
+    "retryWhileRef": { "kind": "attribute", "displayName": "Retry While Ref", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.Processor", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a retry while predicate. Will continue retrying until the predicate evaluates to false." },
+    "redeliveryPolicyRef": { "kind": "attribute", "displayName": "Redelivery Policy Ref", "label": "advanced", "required": false, "type": "object", "javaType": "org.apache.camel.processor.errorhandler.RedeliveryPolicy", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a RedeliveryPolicy to be used for redelivery settings." },
+    "executorServiceRef": { "kind": "attribute", "displayName": "Executor Service Ref", "label": "advanced", "required": false, "type": "object", "javaType": "java.util.concurrent.ScheduledExecutorService", "deprecated": false, "autowired": false, "secret": false, "description": "Sets a reference to a thread pool to be used by the error handler" },
+    "redeliveryPolicy": { "kind": "element", "displayName": "Redelivery Policy", "required": false, "type": "object", "javaType": "org.apache.camel.model.RedeliveryPolicyDefinition", "deprecated": false, "autowired": false, "secret": false, "description": "Sets the redelivery settings" },
+    "id": { "kind": "attribute", "displayName": "Id", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The id of this node" }
+  }
+}
diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/cdi-jta.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/cdi-jta.json
index c3a841c75a6..8df4f2c17e9 100644
--- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/cdi-jta.json
+++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/others/cdi-jta.json
@@ -7,7 +7,7 @@
     "deprecated": false,
     "firstVersion": "3.15.0",
     "label": "java",
-    "supportLevel": "Stable",
+    "supportLevel": "Experimental",
     "groupId": "org.apache.camel",
     "artifactId": "camel-cdi-jta",
     "version": "3.17.0-SNAPSHOT"
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 c86ff4cc407..cb9bf4b0194 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
@@ -294,6 +294,22 @@ To use DataSonnet scripts for message transformations.
     </xs:annotation>
   </xs:element>
 
+  <xs:element name="deadLetterChannel" type="tns:deadLetterChannelDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en"><![CDATA[
+Dead letter channel error handler.
+      ]]></xs:documentation>
+    </xs:annotation>
+  </xs:element>
+
+  <xs:element name="defaultErrorHandler" type="tns:defaultErrorHandlerDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en"><![CDATA[
+Default error handler.
+      ]]></xs:documentation>
+    </xs:annotation>
+  </xs:element>
+
   <xs:element name="defaultLoadBalancer" type="tns:defaultServiceCallServiceLoadBalancerConfiguration">
     <xs:annotation>
       <xs:documentation xml:lang="en"><![CDATA[
@@ -382,10 +398,18 @@ Enriches a message with data from a secondary resource
     </xs:annotation>
   </xs:element>
 
-  <xs:element name="errorHandler" type="tns:errorHandlerDefinition">
+  <xs:element name="errorHandler" nillable="true" type="xs:anyType">
+    <xs:annotation>
+      <xs:documentation xml:lang="en"><![CDATA[
+Base class for error handler definitions.
+      ]]></xs:documentation>
+    </xs:annotation>
+  </xs:element>
+
+  <xs:element name="errorHandlerRef" type="tns:errorHandlerRefDefinition">
     <xs:annotation>
       <xs:documentation xml:lang="en"><![CDATA[
-Error handler settings
+Dead letter channel error handler.
       ]]></xs:documentation>
     </xs:annotation>
   </xs:element>
@@ -572,14 +596,6 @@ syntax.
     </xs:annotation>
   </xs:element>
 
-  <xs:element name="hystrixConfiguration" type="tns:hystrixConfigurationDefinition">
-    <xs:annotation>
-      <xs:documentation xml:lang="en"><![CDATA[
-Deprecated: Hystrix Circuit Breaker EIP configuration
-      ]]></xs:documentation>
-    </xs:annotation>
-  </xs:element>
-
   <xs:element name="ical" type="tns:icalDataFormat">
     <xs:annotation>
       <xs:documentation xml:lang="en"><![CDATA[
@@ -709,6 +725,14 @@ Evaluates a JSONPath expression against a JSON message body.
     </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[
@@ -830,6 +854,14 @@ Evaluates a MVEL template.
     </xs:annotation>
   </xs:element>
 
+  <xs:element name="noErrorHandler" type="tns:noErrorHandlerDefinition">
+    <xs:annotation>
+      <xs:documentation xml:lang="en"><![CDATA[
+No error handler.
+      ]]></xs:documentation>
+    </xs:annotation>
+  </xs:element>
+
   <xs:element name="oauth2" type="tns:oAuth2Definition">
     <xs:annotation>
       <xs:documentation xml:lang="en"><![CDATA[
@@ -1073,7 +1105,7 @@ To configure re-delivery for error handling
   <xs:element name="redeliveryPolicyProfile" type="tns:camelRedeliveryPolicyFactoryBean">
     <xs:annotation>
       <xs:documentation xml:lang="en"><![CDATA[
-Configuration of redelivery policy.
+Deprecated: Configuration of redelivery policy.
       ]]></xs:documentation>
     </xs:annotation>
   </xs:element>
@@ -1527,6 +1559,14 @@ Splits a single message into many sub-messages.
     </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[
@@ -3759,7 +3799,6 @@ the branch that matched. Default value: false
     <xs:complexContent>
       <xs:extension base="tns:output">
         <xs:sequence>
-          <xs:element minOccurs="0" ref="tns:hystrixConfiguration"/>
           <xs:element minOccurs="0" ref="tns:resilience4jConfiguration"/>
           <xs:element minOccurs="0" ref="tns:faultToleranceConfiguration"/>
           <xs:choice maxOccurs="unbounded" minOccurs="0">
@@ -3843,305 +3882,6 @@ microprofile-fault-tolerance) to use for configuring the circuit breaker EIP.
     </xs:complexContent>
   </xs:complexType>
 
-  <xs:complexType name="hystrixConfigurationDefinition">
-    <xs:complexContent>
-      <xs:extension base="tns:hystrixConfigurationCommon">
-        <xs:sequence/>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-
-  <xs:complexType name="hystrixConfigurationCommon">
-    <xs:complexContent>
-      <xs:extension base="tns:identifiedType">
-        <xs:sequence/>
-        <xs:attribute name="groupKey" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Sets the group key to use. The default value is CamelHystrix. Default value:
-CamelHystrix
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="threadPoolKey" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Sets the thread pool key to use. Will by default use the same value as groupKey
-has been configured to use. Default value: CamelHystrix
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="circuitBreakerEnabled" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Whether to use a HystrixCircuitBreaker or not. If false no circuit-breaker logic
-will be used and all requests permitted. This is similar in effect to
-circuitBreakerForceClosed() except that continues tracking metrics and knowing
-whether it should be open/closed, this property results in not even
-instantiating a circuit-breaker. Default value: true
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="circuitBreakerErrorThresholdPercentage" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Error percentage threshold (as whole number such as 50) at which point the
-circuit breaker will trip open and reject requests. It will stay tripped for the
-duration defined in circuitBreakerSleepWindowInMilliseconds; The error
-percentage this is compared against comes from
-HystrixCommandMetrics.getHealthCounts(). Default value: 50
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="circuitBreakerForceClosed" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-If true the HystrixCircuitBreaker#allowRequest() will always return true to
-allow requests regardless of the error percentage from
-HystrixCommandMetrics.getHealthCounts(). The circuitBreakerForceOpen() property
-takes precedence so if it set to true this property does nothing. Default value:
-false
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="circuitBreakerForceOpen" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-If true the HystrixCircuitBreaker.allowRequest() will always return false,
-causing the circuit to be open (tripped) and reject all requests. This property
-takes precedence over circuitBreakerForceClosed();. Default value: false
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="circuitBreakerRequestVolumeThreshold" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Minimum number of requests in the
-metricsRollingStatisticalWindowInMilliseconds() that must exist before the
-HystrixCircuitBreaker will trip. If below this number the circuit will not trip
-regardless of error percentage. Default value: 20
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="circuitBreakerSleepWindowInMilliseconds" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-The time in milliseconds after a HystrixCircuitBreaker trips open that it should
-wait before trying requests again. Default value: 5000
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="executionIsolationSemaphoreMaxConcurrentRequests" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Number of concurrent requests permitted to HystrixCommand.run(). Requests beyond
-the concurrent limit will be rejected. Applicable only when
-executionIsolationStrategy == SEMAPHORE. Default value: 20
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="executionIsolationStrategy" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-What isolation strategy HystrixCommand.run() will be executed with. If THREAD
-then it will be executed on a separate thread and concurrent requests limited by
-the number of threads in the thread-pool. If SEMAPHORE then it will be executed
-on the calling thread and concurrent requests limited by the semaphore count.
-Default value: THREAD
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="executionIsolationThreadInterruptOnTimeout" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Whether the execution thread should attempt an interrupt (using Future#cancel )
-when a thread times out. Applicable only when executionIsolationStrategy() ==
-THREAD. Default value: true
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="executionTimeoutInMilliseconds" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Time in milliseconds at which point the command will timeout and halt execution.
-If executionIsolationThreadInterruptOnTimeout == true and the command is
-thread-isolated, the executing thread will be interrupted. If the command is
-semaphore-isolated and a HystrixObservableCommand, that command will get
-unsubscribed. Default value: 1000
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="executionTimeoutEnabled" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Whether the timeout mechanism is enabled for this command. Default value: true
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="fallbackIsolationSemaphoreMaxConcurrentRequests" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Number of concurrent requests permitted to HystrixCommand.getFallback().
-Requests beyond the concurrent limit will fail-fast and not attempt retrieving a
-fallback. Default value: 10
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="fallbackEnabled" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Whether HystrixCommand.getFallback() should be attempted when failure occurs.
-Default value: true
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="metricsHealthSnapshotIntervalInMilliseconds" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Time in milliseconds to wait between allowing health snapshots to be taken that
-calculate success and error percentages and affect
-HystrixCircuitBreaker.isOpen() status. On high-volume circuits the continual
-calculation of error percentage can become CPU intensive thus this controls how
-often it is calculated. Default value: 500
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="metricsRollingPercentileBucketSize" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Maximum number of values stored in each bucket of the rolling percentile. This
-is passed into HystrixRollingPercentile inside HystrixCommandMetrics. Default
-value: 10
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="metricsRollingPercentileEnabled" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Whether percentile metrics should be captured using HystrixRollingPercentile
-inside HystrixCommandMetrics. Default value: true
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="metricsRollingPercentileWindowInMilliseconds" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Duration of percentile rolling window in milliseconds. This is passed into
-HystrixRollingPercentile inside HystrixCommandMetrics. Default value: 10000
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="metricsRollingPercentileWindowBuckets" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Number of buckets the rolling percentile window is broken into. This is passed
-into HystrixRollingPercentile inside HystrixCommandMetrics. Default value: 6
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="metricsRollingStatisticalWindowInMilliseconds" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-This property sets the duration of the statistical rolling window, in
-milliseconds. This is how long metrics are kept for the thread pool. The window
-is divided into buckets and rolls by those increments. Default value: 10000
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="metricsRollingStatisticalWindowBuckets" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Number of buckets the rolling statistical window is broken into. This is passed
-into HystrixRollingNumber inside HystrixCommandMetrics. Default value: 10
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="requestLogEnabled" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Whether HystrixCommand execution and events should be logged to
-HystrixRequestLog. Default value: true
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="corePoolSize" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Core thread-pool size that gets passed to
-java.util.concurrent.ThreadPoolExecutor#setCorePoolSize(int). Default value: 10
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="maximumSize" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Maximum thread-pool size that gets passed to
-ThreadPoolExecutor#setMaximumPoolSize(int) . This is the maximum amount of
-concurrency that can be supported without starting to reject HystrixCommands.
-Please note that this setting only takes effect if you also set
-allowMaximumSizeToDivergeFromCoreSize. Default value: 10
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="keepAliveTime" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Keep-alive time in minutes that gets passed to
-ThreadPoolExecutor#setKeepAliveTime(long,TimeUnit). Default value: 1
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="maxQueueSize" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Max queue size that gets passed to BlockingQueue in
-HystrixConcurrencyStrategy.getBlockingQueue(int) This should only affect the
-instantiation of a threadpool - it is not eliglible to change a queue size on
-the fly. For that, use queueSizeRejectionThreshold(). Default value: -1
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="queueSizeRejectionThreshold" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Queue size rejection threshold is an artificial max size at which rejections
-will occur even if maxQueueSize has not been reached. This is done because the
-maxQueueSize of a BlockingQueue can not be dynamically changed and we want to
-support dynamically changing the queue size that affects rejections. This is
-used by HystrixCommand when queuing a thread for execution. Default value: 5
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="threadPoolRollingNumberStatisticalWindowInMilliseconds" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Duration of statistical rolling window in milliseconds. This is passed into
-HystrixRollingNumber inside each HystrixThreadPoolMetrics instance. Default
-value: 10000
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="threadPoolRollingNumberStatisticalWindowBuckets" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Number of buckets the rolling statistical window is broken into. This is passed
-into HystrixRollingNumber inside each HystrixThreadPoolMetrics instance. Default
-value: 10
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="allowMaximumSizeToDivergeFromCoreSize" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Allows the configuration for maximumSize to take effect. That value can then be
-equal to, or higher, than coreSize. 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">
@@ -4697,83 +4437,525 @@ producers.
         <xs:attribute name="aggregationStrategy" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the AggregationStrategy to be used to merge the reply from the external
-service, into a single outgoing message. By default Camel will use the reply
-from the external service as outgoing message.
+Sets the AggregationStrategy to be used to merge the reply from the external
+service, into a single outgoing message. By default Camel will use the reply
+from the external service as outgoing message.
+            ]]></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
+POJOs 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 if there was no
+data to enrich. If this option is true then null values is used as the
+oldExchange (when no data to enrich), when using POJOs as the
+AggregationStrategy.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="aggregateOnException" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+If this option is false then the aggregate method is not used if there was an
+exception thrown while trying to retrieve the data to enrich from the resource.
+Setting this option to true allows end users to control what to do if there was
+an exception in the aggregate method. For example to suppress the exception or
+set a custom message body etc. Default value: false
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="shareUnitOfWork" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Shares the org.apache.camel.spi.UnitOfWork with the parent and the resource
+exchange. Enrich will by default not share unit of work between the parent
+exchange and the resource exchange. This means the resource exchange has its own
+individual unit of work. Default value: false
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="cacheSize" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is
+used to cache and reuse producer when uris are reused. Beware that when using
+dynamic endpoints then it affects how well the cache can be utilized. If each
+dynamic endpoint is unique then its best to turn of caching by setting this to
+-1, which allows Camel to not cache both the producers and endpoints; they are
+regarded as prototype scoped and will be stopped and discarded after use. This
+reduces memory usage as otherwise producers/endpoints are stored in memory in
+the caches. However if there are a high degree of dynamic endpoints that have
+been used before, then it can benefit to use the cache to reuse both producers
+and endpoints and therefore the cache size can be set accordingly or rely on the
+default size (1000). If there is a mix of unique and used before dynamic
+endpoints, then setting a reasonable cache size can help reduce memory usage to
+avoid storing too many non frequent used producers.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="ignoreInvalidEndpoint" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Ignore the invalidate endpoint exception when try to create a producer with that
+endpoint. Default value: false
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="allowOptimisedComponents" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Whether to allow components to optimise enricher if they are
+org.apache.camel.spi.SendDynamicAware . Default value: true
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="errorHandlerDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:identifiedType">
+        <xs:sequence>
+          <xs:choice minOccurs="0">
+            <xs:element ref="tns:deadLetterChannel"/>
+            <xs:element ref="tns:defaultErrorHandler"/>
+            <xs:element ref="tns:noErrorHandler"/>
+            <xs:element ref="tns:jtaTransactionErrorHandler"/>
+            <xs:element ref="tns:springTransactionErrorHandler"/>
+          </xs:choice>
+        </xs:sequence>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="deadLetterChannelDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:defaultErrorHandlerDefinition">
+        <xs:sequence/>
+        <xs:attribute name="deadLetterUri" type="xs:string" use="required">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+The dead letter endpoint uri for the Dead Letter error handler.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="deadLetterHandleNewException" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Whether the dead letter channel should handle (and ignore) any new exception
+that may been thrown during sending the message to the dead letter endpoint. The
+default value is true which means any such kind of exception is handled and
+ignored. Set this to false to let the exception be propagated back on the
+org.apache.camel.Exchange . This can be used in situations where you use
+transactions, and want to use Camel's dead letter channel to deal with
+exceptions during routing, but if the dead letter channel itself fails because
+of a new exception being thrown, then by setting this to false the new
+exceptions is propagated back and set on the org.apache.camel.Exchange , which
+allows the transaction to detect the exception, and rollback. Default value:
+true
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="defaultErrorHandlerDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:baseErrorHandlerDefinition">
+        <xs:sequence>
+          <xs:element minOccurs="0" ref="tns:redeliveryPolicy"/>
+        </xs:sequence>
+        <xs:attribute name="loggerRef" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+References to a logger to use as logger for the error handler.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="level" type="tns:loggingLevel">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Logging level to use when using the logging error handler type. Default value:
+ERROR
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="logName" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Name of the logger to use for the logging error handler.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="useOriginalMessage" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Will use the original input org.apache.camel.Message (original body and headers)
+when an org.apache.camel.Exchange is moved to the dead letter queue. Notice:
+this only applies when all redeliveries attempt have failed and the
+org.apache.camel.Exchange is doomed for failure. Instead of using the current
+inprogress org.apache.camel.Exchange IN message we use the original IN message
+instead. This allows you to store the original input in the dead letter queue
+instead of the inprogress snapshot of the IN message. For instance if you route
+transform the IN body during routing and then failed. With the original exchange
+store in the dead letter queue it might be easier to manually re submit the
+org.apache.camel.Exchange again as the IN message is the same as when Camel
+received it. So you should be able to send the org.apache.camel.Exchange to the
+same input. The difference between useOriginalMessage and useOriginalBody is
+that the former includes both the original body and headers, where as the latter
+only includes the original body. You can use the latter to enrich the message
+with custom headers and include the original message body. The former wont let
+you do this, as its using the original message body and headers as they are. You
+cannot enable both useOriginalMessage and useOriginalBody. Important: The
+original input means the input message that are bounded by the current
+org.apache.camel.spi.UnitOfWork . An unit of work typically spans one route, or
+multiple routes if they are connected using internal endpoints such as direct or
+seda. When messages is passed via external endpoints such as JMS or HTTP then
+the consumer will create a new unit of work, with the message it received as
+input as the original input. Also some EIP patterns such as splitter, multicast,
+will create a new unit of work boundary for the messages in their sub-route (eg
+the splitted message); however these EIPs have an option named shareUnitOfWork
+which allows to combine with the parent unit of work in regard to error handling
+and therefore use the parent original message. By default this feature is off.
+Default value: false
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="useOriginalBody" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Will use the original input org.apache.camel.Message body (original body only)
+when an org.apache.camel.Exchange is moved to the dead letter queue. Notice:
+this only applies when all redeliveries attempt have failed and the
+org.apache.camel.Exchange is doomed for failure. Instead of using the current
+inprogress org.apache.camel.Exchange IN message we use the original IN message
+instead. This allows you to store the original input in the dead letter queue
+instead of the inprogress snapshot of the IN message. For instance if you route
+transform the IN body during routing and then failed. With the original exchange
+store in the dead letter queue it might be easier to manually re submit the
+org.apache.camel.Exchange again as the IN message is the same as when Camel
+received it. So you should be able to send the org.apache.camel.Exchange to the
+same input. The difference between useOriginalMessage and useOriginalBody is
+that the former includes both the original body and headers, where as the latter
+only includes the original body. You can use the latter to enrich the message
+with custom headers and include the original message body. The former wont let
+you do this, as its using the original message body and headers as they are. You
+cannot enable both useOriginalMessage and useOriginalBody. Important: The
+original input means the input message that are bounded by the current
+org.apache.camel.spi.UnitOfWork . An unit of work typically spans one route, or
+multiple routes if they are connected using internal endpoints such as direct or
+seda. When messages is passed via external endpoints such as JMS or HTTP then
+the consumer will create a new unit of work, with the message it received as
+input as the original input. Also some EIP patterns such as splitter, multicast,
+will create a new unit of work boundary for the messages in their sub-route (eg
+the splitted message); however these EIPs have an option named shareUnitOfWork
+which allows to combine with the parent unit of work in regard to error handling
+and therefore use the parent original message. By default this feature is off.
+Default value: false
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="onRedeliveryRef" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Sets a reference to a processor that should be processed before a redelivery
+attempt. Can be used to change the org.apache.camel.Exchange before its being
+redelivered.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="onExceptionOccurredRef" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Sets a reference to a processor that should be processed just after an exception
+occurred. Can be used to perform custom logging about the occurred exception at
+the exact time it happened. Important: Any exception thrown from this processor
+will be ignored.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="onPrepareFailureRef" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Sets a reference to a processor to prepare the org.apache.camel.Exchange before
+handled by the failure processor / dead letter channel. This allows for example
+to enrich the message before sending to a dead letter queue.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="retryWhileRef" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Sets a retry while predicate. Will continue retrying until the predicate
+evaluates to false.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="redeliveryPolicyRef" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Sets a reference to a RedeliveryPolicy to be used for redelivery settings.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="executorServiceRef" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Sets a reference to a thread pool to be used by the error handler.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType abstract="true" name="baseErrorHandlerDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:identifiedType">
+        <xs:sequence/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="redeliveryPolicyDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:identifiedType">
+        <xs:sequence/>
+        <xs:attribute name="maximumRedeliveries" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Sets the maximum redeliveries x = redeliver at most x times 0 = no redeliveries
+-1 = redeliver forever.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="redeliveryDelay" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Sets the initial redelivery delay. Default value: 1000
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="asyncDelayedRedelivery" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Allow asynchronous delayed redelivery. The route, in particular the consumer's
+component, must support the Asynchronous Routing Engine (e.g. seda). 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 back off multiplier. Default value: 2.0
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="useExponentialBackOff" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Turn on exponential backk off. 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 collision avoidance factor. 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[
+Turn on collision avoidance. 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 delay between redelivery. 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 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 logging retry attempts. 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 to use for logging retry attempts. Default value: 1
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="logRetryAttempted" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Sets whether retry attempts should be logged or not. Can be used to include or
+reduce verbose. 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. Can be used to include or reduce
+verbose. 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 when an retry attempt failed. Can be
+used to include or reduce verbose. 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 handled exceptions should be logged or not. Can be used to include
+or reduce verbose. 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 new exceptions should be logged or not. Can be used to include or
+reduce verbose. A new exception is an exception that was thrown while handling a
+previous exception. Default value: true
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
-        <xs:attribute name="aggregationStrategyMethodName" type="xs:string">
+        <xs:attribute name="logContinued" 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
-POJOs as the AggregationStrategy.
+Sets whether continued exceptions should be logged or not. Can be used to
+include or reduce verbose. Default value: false
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
-        <xs:attribute name="aggregationStrategyMethodAllowNull" type="xs:string">
+        <xs:attribute name="logExhausted" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-If this option is false then the aggregate method is not used if there was no
-data to enrich. If this option is true then null values is used as the
-oldExchange (when no data to enrich), when using POJOs as the
-AggregationStrategy.
+Sets whether exhausted exceptions should be logged or not. Can be used to
+include or reduce verbose. Default value: true
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
-        <xs:attribute name="aggregateOnException" type="xs:string">
+        <xs:attribute name="logExhaustedMessageHistory" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-If this option is false then the aggregate method is not used if there was an
-exception thrown while trying to retrieve the data to enrich from the resource.
-Setting this option to true allows end users to control what to do if there was
-an exception in the aggregate method. For example to suppress the exception or
-set a custom message body etc. Default value: false
+Sets whether exhausted exceptions should be logged including message history or
+not (supports property placeholders). Can be used to include or reduce verbose.
+Default value: false
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
-        <xs:attribute name="shareUnitOfWork" type="xs:string">
+        <xs:attribute name="logExhaustedMessageBody" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Shares the org.apache.camel.spi.UnitOfWork with the parent and the resource
-exchange. Enrich will by default not share unit of work between the parent
-exchange and the resource exchange. This means the resource exchange has its own
-individual unit of work. Default value: false
+Sets whether exhausted message body should be logged including message history
+or not (supports property placeholders). Can be used to include or reduce
+verbose. Requires logExhaustedMessageHistory to be enabled. Default value: false
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
-        <xs:attribute name="cacheSize" type="xs:string">
+        <xs:attribute name="disableRedelivery" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Sets the maximum size used by the org.apache.camel.spi.ProducerCache which is
-used to cache and reuse producer when uris are reused. Beware that when using
-dynamic endpoints then it affects how well the cache can be utilized. If each
-dynamic endpoint is unique then its best to turn of caching by setting this to
--1, which allows Camel to not cache both the producers and endpoints; they are
-regarded as prototype scoped and will be stopped and discarded after use. This
-reduces memory usage as otherwise producers/endpoints are stored in memory in
-the caches. However if there are a high degree of dynamic endpoints that have
-been used before, then it can benefit to use the cache to reuse both producers
-and endpoints and therefore the cache size can be set accordingly or rely on the
-default size (1000). If there is a mix of unique and used before dynamic
-endpoints, then setting a reasonable cache size can help reduce memory usage to
-avoid storing too many non frequent used producers.
+Disables redelivery (same as setting maximum redeliveries to 0). Default value:
+false
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
-        <xs:attribute name="ignoreInvalidEndpoint" type="xs:string">
+        <xs:attribute name="delayPattern" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Ignore the invalidate endpoint exception when try to create a producer with that
-endpoint. Default value: false
+Sets the delay pattern with delay intervals.
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
-        <xs:attribute name="allowOptimisedComponents" type="xs:string">
+        <xs:attribute name="allowRedeliveryWhileStopping" type="xs:string">
           <xs:annotation>
             <xs:documentation xml:lang="en"><![CDATA[
-Whether to allow components to optimise enricher if they are
-org.apache.camel.spi.SendDynamicAware . Default value: true
+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 name="noErrorHandlerDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:baseErrorHandlerDefinition">
+        <xs:sequence/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType name="jtaTransactionErrorHandlerDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:transactionErrorHandlerDefinition">
+        <xs:sequence/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
+  <xs:complexType abstract="true" name="transactionErrorHandlerDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:defaultErrorHandlerDefinition">
+        <xs:sequence/>
+        <xs:attribute name="transactedPolicyRef" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+The transacted policy to use that is configured for either Spring or JTA based
+transactions. If no policy has been configured then Camel will attempt to
+auto-discover.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+        <xs:attribute name="rollbackLoggingLevel" type="xs:string">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+Sets the logging level to use for logging transactional rollback. This option is
+default WARN. Default value: WARN
             ]]></xs:documentation>
           </xs:annotation>
         </xs:attribute>
@@ -4781,6 +4963,14 @@ org.apache.camel.spi.SendDynamicAware . Default value: true
     </xs:complexContent>
   </xs:complexType>
 
+  <xs:complexType name="springTransactionErrorHandlerDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:transactionErrorHandlerDefinition">
+        <xs:sequence/>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
   <xs:complexType name="filterDefinition">
     <xs:complexContent>
       <xs:extension base="tns:processorDefinition">
@@ -9336,221 +9526,31 @@ inprogress org.apache.camel.Exchange IN message we use the original IN message
 instead. This allows you to store the original input in the dead letter queue
 instead of the inprogress snapshot of the IN message. For instance if you route
 transform the IN body during routing and then failed. With the original exchange
-store in the dead letter queue it might be easier to manually re submit the
-org.apache.camel.Exchange again as the IN message is the same as when Camel
-received it. So you should be able to send the org.apache.camel.Exchange to the
-same input. The difference between useOriginalMessage and useOriginalBody is
-that the former includes both the original body and headers, where as the latter
-only includes the original body. You can use the latter to enrich the message
-with custom headers and include the original message body. The former wont let
-you do this, as its using the original message body and headers as they are. You
-cannot enable both useOriginalMessage and useOriginalBody. Important: The
-original input means the input message that are bounded by the current
-org.apache.camel.spi.UnitOfWork . An unit of work typically spans one route, or
-multiple routes if they are connected using internal endpoints such as direct or
-seda. When messages is passed via external endpoints such as JMS or HTTP then
-the consumer will create a new unit of work, with the message it received as
-input as the original input. Also some EIP patterns such as splitter, multicast,
-will create a new unit of work boundary for the messages in their sub-route (eg
-the split message); however these EIPs have an option named shareUnitOfWork
-which allows to combine with the parent unit of work in regard to error handling
-and therefore use the parent original message. By default this feature is off.
-Default value: false
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
-
-  <xs:complexType name="redeliveryPolicyDefinition">
-    <xs:sequence/>
-    <xs:attribute name="maximumRedeliveries" type="xs:string">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Sets the maximum redeliveries x = redeliver at most x times 0 = no redeliveries
--1 = redeliver forever.
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="redeliveryDelay" type="xs:string">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Sets the initial redelivery delay.
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="asyncDelayedRedelivery" type="xs:string">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Allow asynchronous delayed redelivery. The route, in particular the consumer's
-component, must support the Asynchronous Routing Engine (e.g. seda). 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 back off multiplier.
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="useExponentialBackOff" type="xs:string">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Turn on exponential backk off. 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 collision avoidance factor.
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="useCollisionAvoidance" type="xs:string">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Turn on collision avoidance. 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 delay between redelivery.
-        ]]></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 when retries have been exhausted.
-        ]]></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 logging retry attempts.
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="retryAttemptedLogInterval" type="xs:string">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Sets the interval to use for logging retry attempts.
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="logRetryAttempted" type="xs:string">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Sets whether retry attempts should be logged or not. Can be used to include or
-reduce verbose. Default value: false
-        ]]></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. Can be used to include or reduce
-verbose. Default value: false
-        ]]></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 when an retry attempt failed. Can be
-used to include or reduce verbose. 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 handled exceptions should be logged or not. Can be used to include
-or reduce verbose. 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 new exceptions should be logged or not. Can be used to include or
-reduce verbose. A new exception is an exception that was thrown while handling a
-previous exception. Default value: false
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="logContinued" type="xs:string">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Sets whether continued exceptions should be logged or not. Can be used to
-include or reduce verbose. 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. Can be used to
-include or reduce verbose. Default value: false
-        ]]></xs:documentation>
-      </xs:annotation>
-    </xs:attribute>
-    <xs:attribute name="logExhaustedMessageHistory" type="xs:string">
-      <xs:annotation>
-        <xs:documentation xml:lang="en"><![CDATA[
-Sets whether exhausted exceptions should be logged including message history or
-not (supports property placeholders). Can be used to include or reduce verbose.
+store in the dead letter queue it might be easier to manually re submit the
+org.apache.camel.Exchange again as the IN message is the same as when Camel
+received it. So you should be able to send the org.apache.camel.Exchange to the
+same input. The difference between useOriginalMessage and useOriginalBody is
+that the former includes both the original body and headers, where as the latter
+only includes the original body. You can use the latter to enrich the message
+with custom headers and include the original message body. The former wont let
+you do this, as its using the original message body and headers as they are. You
+cannot enable both useOriginalMessage and useOriginalBody. Important: The
+original input means the input message that are bounded by the current
+org.apache.camel.spi.UnitOfWork . An unit of work typically spans one route, or
+multiple routes if they are connected using internal endpoints such as direct or
+seda. When messages is passed via external endpoints such as JMS or HTTP then
+the consumer will create a new unit of work, with the message it received as
+input as the original input. Also some EIP patterns such as splitter, multicast,
+will create a new unit of work boundary for the messages in their sub-route (eg
+the split message); however these EIPs have an option named shareUnitOfWork
+which allows to combine with the parent unit of work in regard to error handling
+and therefore use the parent original message. By default this feature is off.
 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 should be logged including message history
-or not (supports property placeholders). Can be used to include or reduce
-verbose. Requires logExhaustedMessageHistory to be enabled. 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 (same as 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 the delay pattern with delay intervals.
-        ]]></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: false
-        ]]></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:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
   </xs:complexType>
 
   <xs:complexType name="onFallbackDefinition">
@@ -13204,6 +13204,21 @@ Set a reference to a custom Expression to use.
     </xs:sequence>
   </xs:complexType>
 
+  <xs:complexType name="errorHandlerRefDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:baseErrorHandlerDefinition">
+        <xs:sequence/>
+        <xs:attribute name="ref" type="xs:string" use="required">
+          <xs:annotation>
+            <xs:documentation xml:lang="en"><![CDATA[
+References to an existing or custom error handler.
+            ]]></xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
+
   <xs:complexType name="cSimpleExpression">
     <xs:simpleContent>
       <xs:extension base="tns:expression">
@@ -14906,14 +14921,6 @@ ServiceCall EIP default configuration.
             </xs:annotation>
           </xs:element>
           <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:serviceCallConfiguration"/>
-          <xs:element minOccurs="0" name="defaultHystrixConfiguration" type="tns:hystrixConfigurationDefinition">
-            <xs:annotation>
-              <xs:documentation xml:lang="en"><![CDATA[
-Hystrix EIP default configuration.
-              ]]></xs:documentation>
-            </xs:annotation>
-          </xs:element>
-          <xs:element maxOccurs="unbounded" minOccurs="0" ref="tns:hystrixConfiguration"/>
           <xs:element minOccurs="0" name="defaultResilience4jConfiguration" type="tns:resilience4JConfigurationDefinition">
             <xs:annotation>
               <xs:documentation xml:lang="en"><![CDATA[
@@ -15313,205 +15320,28 @@ DEBUG. Default value: DEBUG
     </xs:complexContent>
   </xs:complexType>
 
-  <xs:complexType name="errorHandlerDefinition">
+  <xs:complexType name="springErrorHandlerDefinition">
     <xs:complexContent>
       <xs:extension base="tns:identifiedType">
         <xs:sequence>
-          <xs:element minOccurs="0" name="redeliveryPolicy" type="tns:camelRedeliveryPolicyFactoryBean">
-            <xs:annotation>
-              <xs:documentation xml:lang="en"><![CDATA[
-Sets the redelivery settings.
-              ]]></xs:documentation>
-            </xs:annotation>
-          </xs:element>
+          <xs:element minOccurs="0" name="redeliveryPolicy" type="tns:camelRedeliveryPolicyFactoryBean"/>
         </xs:sequence>
-        <xs:attribute name="type" type="tns:errorHandlerType">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-The type of the error handler. Default value: DefaultErrorHandler
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="deadLetterUri" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-The dead letter endpoint uri for the Dead Letter error handler.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="deadLetterHandleNewException" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Whether the dead letter channel should handle (and ignore) any new exception
-that may been thrown during sending the message to the dead letter endpoint. The
-default value is true which means any such kind of exception is handled and
-ignored. Set this to false to let the exception be propagated back on the
-org.apache.camel.Exchange . This can be used in situations where you use
-transactions, and want to use Camel's dead letter channel to deal with
-exceptions during routing, but if the dead letter channel itself fails because
-of a new exception being thrown, then by setting this to false the new
-exceptions is propagated back and set on the org.apache.camel.Exchange , which
-allows the transaction to detect the exception, and rollback.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="level" type="tns:loggingLevel">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Logging level to use when using the logging error handler type. Default value:
-ERROR
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="rollbackLoggingLevel" type="tns:loggingLevel">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Sets the logging level to use for logging transactional rollback. This option is
-default WARN. Default value: WARN
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="logName" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Name of the logger to use for the logging error handler.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="useOriginalMessage" type="xs:boolean">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Will use the original input org.apache.camel.Message (original body and headers)
-when an org.apache.camel.Exchange is moved to the dead letter queue. Notice:
-this only applies when all redeliveries attempt have failed and the
-org.apache.camel.Exchange is doomed for failure. Instead of using the current
-inprogress org.apache.camel.Exchange IN message we use the original IN message
-instead. This allows you to store the original input in the dead letter queue
-instead of the inprogress snapshot of the IN message. For instance if you route
-transform the IN body during routing and then failed. With the original exchange
-store in the dead letter queue it might be easier to manually re submit the
-org.apache.camel.Exchange again as the IN message is the same as when Camel
-received it. So you should be able to send the org.apache.camel.Exchange to the
-same input. The difference between useOriginalMessage and useOriginalBody is
-that the former includes both the original body and headers, where as the latter
-only includes the original body. You can use the latter to enrich the message
-with custom headers and include the original message body. The former wont let
-you do this, as its using the original message body and headers as they are. You
-cannot enable both useOriginalMessage and useOriginalBody. Important: The
-original input means the input message that are bounded by the current
-org.apache.camel.spi.UnitOfWork . An unit of work typically spans one route, or
-multiple routes if they are connected using internal endpoints such as direct or
-seda. When messages is passed via external endpoints such as JMS or HTTP then
-the consumer will create a new unit of work, with the message it received as
-input as the original input. Also some EIP patterns such as splitter, multicast,
-will create a new unit of work boundary for the messages in their sub-route (eg
-the splitted message); however these EIPs have an option named shareUnitOfWork
-which allows to combine with the parent unit of work in regard to error handling
-and therefore use the parent original message. By default this feature is off.
-Default value: false
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="useOriginalBody" type="xs:boolean">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Will use the original input org.apache.camel.Message body (original body only)
-when an org.apache.camel.Exchange is moved to the dead letter queue. Notice:
-this only applies when all redeliveries attempt have failed and the
-org.apache.camel.Exchange is doomed for failure. Instead of using the current
-inprogress org.apache.camel.Exchange IN message we use the original IN message
-instead. This allows you to store the original input in the dead letter queue
-instead of the inprogress snapshot of the IN message. For instance if you route
-transform the IN body during routing and then failed. With the original exchange
-store in the dead letter queue it might be easier to manually re submit the
-org.apache.camel.Exchange again as the IN message is the same as when Camel
-received it. So you should be able to send the org.apache.camel.Exchange to the
-same input. The difference between useOriginalMessage and useOriginalBody is
-that the former includes both the original body and headers, where as the latter
-only includes the original body. You can use the latter to enrich the message
-with custom headers and include the original message body. The former wont let
-you do this, as its using the original message body and headers as they are. You
-cannot enable both useOriginalMessage and useOriginalBody. Important: The
-original input means the input message that are bounded by the current
-org.apache.camel.spi.UnitOfWork . An unit of work typically spans one route, or
-multiple routes if they are connected using internal endpoints such as direct or
-seda. When messages is passed via external endpoints such as JMS or HTTP then
-the consumer will create a new unit of work, with the message it received as
-input as the original input. Also some EIP patterns such as splitter, multicast,
-will create a new unit of work boundary for the messages in their sub-route (eg
-the splitted message); however these EIPs have an option named shareUnitOfWork
-which allows to combine with the parent unit of work in regard to error handling
-and therefore use the parent original message. By default this feature is off.
-Default value: false
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="transactionTemplateRef" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-References to the org.springframework.transaction.support.TransactionTemplate to
-use with the transaction error handler.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="transactionManagerRef" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-References to the org.springframework.transaction.PlatformTransactionManager to
-use with the transaction error handler.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="onRedeliveryRef" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Sets a reference to a processor that should be processed before a redelivery
-attempt. Can be used to change the org.apache.camel.Exchange before its being
-redelivered.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="onExceptionOccurredRef" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Sets a reference to a processor that should be processed just after an exception
-occurred. Can be used to perform custom logging about the occurred exception at
-the exact time it happened. Important: Any exception thrown from this processor
-will be ignored.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="onPrepareFailureRef" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Sets a reference to a processor to prepare the org.apache.camel.Exchange before
-handled by the failure processor / dead letter channel. This allows for example
-to enrich the message before sending to a dead letter queue.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="retryWhileRef" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Sets a reference to an retry while expression. Will continue retrying until
-expression evaluates to false.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="redeliveryPolicyRef" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Sets a reference to a RedeliveryPolicy to be used for redelivery settings.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-        <xs:attribute name="executorServiceRef" type="xs:string">
-          <xs:annotation>
-            <xs:documentation xml:lang="en"><![CDATA[
-Sets a reference to a thread pool to be used by the error handler.
-            ]]></xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
+        <xs:attribute name="type" type="tns:springErrorHandlerType"/>
+        <xs:attribute name="deadLetterUri" type="xs:string"/>
+        <xs:attribute name="deadLetterHandleNewException" type="xs:string"/>
+        <xs:attribute name="level" type="tns:loggingLevel"/>
+        <xs:attribute name="rollbackLoggingLevel" type="tns:loggingLevel"/>
+        <xs:attribute name="logName" type="xs:string"/>
+        <xs:attribute name="useOriginalMessage" type="xs:boolean"/>
+        <xs:attribute name="useOriginalBody" type="xs:boolean"/>
+        <xs:attribute name="transactionTemplateRef" type="xs:string"/>
+        <xs:attribute name="transactionManagerRef" type="xs:string"/>
+        <xs:attribute name="onRedeliveryRef" type="xs:string"/>
+        <xs:attribute name="onExceptionOccurredRef" type="xs:string"/>
+        <xs:attribute name="onPrepareFailureRef" type="xs:string"/>
+        <xs:attribute name="retryWhileRef" type="xs:string"/>
+        <xs:attribute name="redeliveryPolicyRef" type="xs:string"/>
+        <xs:attribute name="executorServiceRef" type="xs:string"/>
       </xs:extension>
     </xs:complexContent>
   </xs:complexType>
@@ -15904,7 +15734,7 @@ multiple certificates.
     </xs:restriction>
   </xs:simpleType>
 
-  <xs:simpleType name="errorHandlerType">
+  <xs:simpleType name="springErrorHandlerType">
     <xs:restriction base="xs:string">
       <xs:enumeration value="DefaultErrorHandler"/>
       <xs:enumeration value="DeadLetterChannel"/>
diff --git a/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/GroovyDSL.groovy b/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/GroovyDSL.groovy
index 2258c5e4d45..1168ea71237 100644
--- a/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/GroovyDSL.groovy
+++ b/dsl/camel-groovy-dsl/camel-groovy-dsl-common/src/main/groovy/org/apache/camel/dsl/groovy/common/GroovyDSL.groovy
@@ -16,13 +16,13 @@
  */
 package org.apache.camel.dsl.groovy.common
 
+import org.apache.camel.ErrorHandlerFactory
 import org.apache.camel.Exchange
 import org.apache.camel.Expression
 import org.apache.camel.Predicate
 import org.apache.camel.Processor
 import org.apache.camel.builder.BuilderSupport
 import org.apache.camel.builder.EndpointConsumerBuilder
-import org.apache.camel.builder.ErrorHandlerBuilder
 import org.apache.camel.builder.endpoint.EndpointBuilderFactory
 import org.apache.camel.builder.endpoint.EndpointRouteBuilder
 import org.apache.camel.dsl.groovy.common.model.BeansConfiguration
@@ -114,7 +114,7 @@ class GroovyDSL extends BuilderSupport implements EndpointBuilderFactory {
         return builder.interceptSendToEndpoint(uri)
     }
 
-    void errorHandler(ErrorHandlerBuilder handler) {
+    void errorHandler(ErrorHandlerFactory handler) {
         builder.errorHandler(handler)
     }
 
diff --git a/dsl/camel-js-dsl/src/main/java/org/apache/camel/dsl/js/JavaScriptDSL.java b/dsl/camel-js-dsl/src/main/java/org/apache/camel/dsl/js/JavaScriptDSL.java
index 295d82bf7da..24ede56e15f 100644
--- a/dsl/camel-js-dsl/src/main/java/org/apache/camel/dsl/js/JavaScriptDSL.java
+++ b/dsl/camel-js-dsl/src/main/java/org/apache/camel/dsl/js/JavaScriptDSL.java
@@ -19,11 +19,11 @@ package org.apache.camel.dsl.js;
 import java.util.function.Consumer;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.ErrorHandlerFactory;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.BuilderSupport;
 import org.apache.camel.builder.EndpointConsumerBuilder;
-import org.apache.camel.builder.ErrorHandlerBuilder;
 import org.apache.camel.builder.endpoint.EndpointBuilderFactory;
 import org.apache.camel.builder.endpoint.EndpointRouteBuilder;
 import org.apache.camel.model.InterceptDefinition;
@@ -89,7 +89,7 @@ public class JavaScriptDSL extends BuilderSupport implements EndpointBuilderFact
         return builder.interceptSendToEndpoint(uri);
     }
 
-    public void errorHandler(ErrorHandlerBuilder handler) {
+    public void errorHandler(ErrorHandlerFactory handler) {
         builder.errorHandler(handler);
     }
 
diff --git a/dsl/camel-kotlin-dsl/src/main/kotlin/org/apache/camel/dsl/kotlin/KotlinDSL.kt b/dsl/camel-kotlin-dsl/src/main/kotlin/org/apache/camel/dsl/kotlin/KotlinDSL.kt
index 27212cee092..08e87fe2238 100644
--- a/dsl/camel-kotlin-dsl/src/main/kotlin/org/apache/camel/dsl/kotlin/KotlinDSL.kt
+++ b/dsl/camel-kotlin-dsl/src/main/kotlin/org/apache/camel/dsl/kotlin/KotlinDSL.kt
@@ -16,12 +16,12 @@
  */
 package org.apache.camel.dsl.kotlin
 
+import org.apache.camel.ErrorHandlerFactory
 import org.apache.camel.Exchange
 import org.apache.camel.Predicate
 import org.apache.camel.Processor
 import org.apache.camel.builder.BuilderSupport
 import org.apache.camel.builder.EndpointConsumerBuilder
-import org.apache.camel.builder.ErrorHandlerBuilder
 import org.apache.camel.builder.endpoint.EndpointBuilderFactory
 import org.apache.camel.builder.endpoint.EndpointRouteBuilder
 import org.apache.camel.dsl.kotlin.model.BeansConfiguration
@@ -83,7 +83,7 @@ abstract class KotlinDSL(
         return builder.interceptSendToEndpoint(uri)
     }
 
-    fun errorHandler(handler: ErrorHandlerBuilder) {
+    fun errorHandler(handler: ErrorHandlerFactory) {
         builder.errorHandler(handler)
     }
 


[camel] 01/03: CAMEL-16834: error handler in model DSL. WIP

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

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

commit cc69f0eafe0cf1dd50f871b9b0acc0d3b594e9ee
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Apr 7 19:54:20 2022 +0200

    CAMEL-16834: error handler in model DSL. WIP
---
 .../camel/builder/DeadLetterChannelBuilder.java    |  74 ---
 .../camel/builder/DefaultErrorHandlerBuilder.java  | 667 ---------------------
 .../camel/builder/ErrorHandlerBuilderRef.java      |  78 ---
 .../builder/LegacyDeadLetterChannelBuilder.java    |   2 +-
 .../camel/builder/NoErrorHandlerBuilder.java       |  36 --
 5 files changed, 1 insertion(+), 856 deletions(-)

diff --git a/core/camel-core-model/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java b/core/camel-core-model/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java
deleted file mode 100644
index d7fb0e185be..00000000000
--- a/core/camel-core-model/src/main/java/org/apache/camel/builder/DeadLetterChannelBuilder.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.builder;
-
-import org.apache.camel.Endpoint;
-import org.apache.camel.LoggingLevel;
-import org.apache.camel.model.errorhandler.DeadLetterChannelConfiguration;
-import org.apache.camel.model.errorhandler.DeadLetterChannelProperties;
-import org.apache.camel.model.errorhandler.DefaultErrorHandlerConfiguration;
-import org.apache.camel.processor.errorhandler.DeadLetterChannel;
-import org.apache.camel.spi.CamelLogger;
-import org.slf4j.LoggerFactory;
-
-/**
- * Legacy error handler for XML DSL in camel-spring-xml/camel-blueprint
- */
-@Deprecated
-public class DeadLetterChannelBuilder extends DefaultErrorHandlerBuilder implements DeadLetterChannelProperties {
-
-    public DeadLetterChannelBuilder() {
-        // no-arg constructor used by Spring DSL
-    }
-
-    public DeadLetterChannelBuilder(Endpoint deadLetter) {
-        setDeadLetterUri(deadLetter.getEndpointUri());
-        // DLC do not log exhausted by default
-        getRedeliveryPolicy().setLogExhausted(false);
-    }
-
-    public DeadLetterChannelBuilder(String uri) {
-        setDeadLetterUri(uri);
-        // DLC do not log exhausted by default
-        getRedeliveryPolicy().setLogExhausted(false);
-    }
-
-    @Override
-    DefaultErrorHandlerConfiguration createConfiguration() {
-        return new DeadLetterChannelConfiguration();
-    }
-
-    @Override
-    public LegacyErrorHandlerBuilder cloneBuilder() {
-        DeadLetterChannelBuilder answer = new DeadLetterChannelBuilder();
-        super.cloneBuilder(answer);
-        return answer;
-    }
-
-    // Properties
-    // -------------------------------------------------------------------------
-
-    @Override
-    protected CamelLogger createLogger() {
-        return new CamelLogger(LoggerFactory.getLogger(DeadLetterChannel.class), LoggingLevel.ERROR);
-    }
-
-    @Override
-    public String toString() {
-        return "DeadLetterChannelBuilder(" + getDeadLetterUri() + ")";
-    }
-}
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/builder/DefaultErrorHandlerBuilder.java b/core/camel-core-model/src/main/java/org/apache/camel/builder/DefaultErrorHandlerBuilder.java
deleted file mode 100644
index 5248bfb4c60..00000000000
--- a/core/camel-core-model/src/main/java/org/apache/camel/builder/DefaultErrorHandlerBuilder.java
+++ /dev/null
@@ -1,667 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.builder;
-
-import java.util.concurrent.ScheduledExecutorService;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.Expression;
-import org.apache.camel.LoggingLevel;
-import org.apache.camel.Predicate;
-import org.apache.camel.Processor;
-import org.apache.camel.model.errorhandler.DefaultErrorHandlerConfiguration;
-import org.apache.camel.model.errorhandler.DefaultErrorHandlerProperties;
-import org.apache.camel.processor.errorhandler.DefaultErrorHandler;
-import org.apache.camel.processor.errorhandler.RedeliveryPolicy;
-import org.apache.camel.spi.CamelLogger;
-import org.apache.camel.spi.Language;
-import org.apache.camel.support.ExpressionToPredicateAdapter;
-import org.slf4j.LoggerFactory;
-
-/**
- * Legacy error handler for XML DSL in camel-spring-xml/camel-blueprint
- */
-@Deprecated
-public class DefaultErrorHandlerBuilder extends LegacyErrorHandlerBuilderSupport implements DefaultErrorHandlerProperties {
-
-    private final DefaultErrorHandlerConfiguration configuration;
-
-    public DefaultErrorHandlerBuilder() {
-        configuration = createConfiguration();
-    }
-
-    DefaultErrorHandlerConfiguration createConfiguration() {
-        return new DefaultErrorHandlerConfiguration();
-    }
-
-    @Override
-    public boolean supportTransacted() {
-        return false;
-    }
-
-    @Override
-    public LegacyErrorHandlerBuilder cloneBuilder() {
-        DefaultErrorHandlerBuilder answer = new DefaultErrorHandlerBuilder();
-        cloneBuilder(answer);
-        return answer;
-    }
-
-    protected void cloneBuilder(DefaultErrorHandlerBuilder other) {
-        other.setLogger(configuration.getLogger());
-        if (configuration.getRedeliveryPolicy() != null) {
-            other.setRedeliveryPolicy(configuration.getRedeliveryPolicy().copy());
-        }
-        other.setOnRedelivery(configuration.getOnRedelivery());
-        other.setOnRedeliveryRef(configuration.getOnRedeliveryRef());
-        other.setRetryWhile(configuration.getRetryWhile());
-        other.setRetryWhileRef(configuration.getRetryWhileRef());
-        other.setDeadLetterUri(configuration.getDeadLetterUri());
-        other.setOnPrepareFailure(configuration.getOnPrepareFailure());
-        other.setOnPrepareFailureRef(configuration.getOnPrepareFailureRef());
-        other.setOnExceptionOccurred(configuration.getOnExceptionOccurred());
-        other.setOnExceptionOccurredRef(configuration.getOnExceptionOccurredRef());
-        other.setDeadLetterHandleNewException(configuration.isDeadLetterHandleNewException());
-        other.setUseOriginalMessage(configuration.isUseOriginalMessage());
-        other.setUseOriginalBody(configuration.isUseOriginalBody());
-        other.setAsyncDelayedRedelivery(configuration.isAsyncDelayedRedelivery());
-        other.setExecutorServiceRef(configuration.getExecutorServiceRef());
-    }
-
-    // Builder methods
-    // -------------------------------------------------------------------------
-    public DefaultErrorHandlerBuilder backOffMultiplier(double backOffMultiplier) {
-        getRedeliveryPolicy().backOffMultiplier(backOffMultiplier);
-        return this;
-    }
-
-    public DefaultErrorHandlerBuilder collisionAvoidancePercent(double collisionAvoidancePercent) {
-        getRedeliveryPolicy().collisionAvoidancePercent(collisionAvoidancePercent);
-        return this;
-    }
-
-    public DefaultErrorHandlerBuilder redeliveryDelay(long delay) {
-        getRedeliveryPolicy().redeliveryDelay(delay);
-        return this;
-    }
-
-    public DefaultErrorHandlerBuilder delayPattern(String delayPattern) {
-        getRedeliveryPolicy().delayPattern(delayPattern);
-        return this;
-    }
-
-    public DefaultErrorHandlerBuilder maximumRedeliveries(int maximumRedeliveries) {
-        getRedeliveryPolicy().maximumRedeliveries(maximumRedeliveries);
-        return this;
-    }
-
-    public DefaultErrorHandlerBuilder disableRedelivery() {
-        getRedeliveryPolicy().maximumRedeliveries(0);
-        return this;
-    }
-
-    public DefaultErrorHandlerBuilder maximumRedeliveryDelay(long maximumRedeliveryDelay) {
-        getRedeliveryPolicy().maximumRedeliveryDelay(maximumRedeliveryDelay);
-        return this;
-    }
-
-    public DefaultErrorHandlerBuilder useCollisionAvoidance() {
-        getRedeliveryPolicy().useCollisionAvoidance();
-        return this;
-    }
-
-    public DefaultErrorHandlerBuilder useExponentialBackOff() {
-        getRedeliveryPolicy().useExponentialBackOff();
-        return this;
-    }
-
-    public DefaultErrorHandlerBuilder retriesExhaustedLogLevel(LoggingLevel retriesExhaustedLogLevel) {
-        getRedeliveryPolicy().setRetriesExhaustedLogLevel(retriesExhaustedLogLevel);
-        return this;
-    }
-
-    public DefaultErrorHandlerBuilder retryAttemptedLogLevel(LoggingLevel retryAttemptedLogLevel) {
-        getRedeliveryPolicy().setRetryAttemptedLogLevel(retryAttemptedLogLevel);
-        return this;
-    }
-
-    public DefaultErrorHandlerBuilder retryAttemptedLogInterval(int retryAttemptedLogInterval) {
-        getRedeliveryPolicy().setRetryAttemptedLogInterval(retryAttemptedLogInterval);
-        return this;
-    }
-
-    public DefaultErrorHandlerBuilder logStackTrace(boolean logStackTrace) {
-        getRedeliveryPolicy().setLogStackTrace(logStackTrace);
-        return this;
-    }
-
-    public DefaultErrorHandlerBuilder logRetryStackTrace(boolean logRetryStackTrace) {
-        getRedeliveryPolicy().setLogRetryStackTrace(logRetryStackTrace);
-        return this;
-    }
-
-    public DefaultErrorHandlerBuilder logHandled(boolean logHandled) {
-        getRedeliveryPolicy().setLogHandled(logHandled);
-        return this;
-    }
-
-    public DefaultErrorHandlerBuilder logNewException(boolean logNewException) {
-        getRedeliveryPolicy().setLogNewException(logNewException);
-        return this;
-    }
-
-    public DefaultErrorHandlerBuilder logExhausted(boolean logExhausted) {
-        getRedeliveryPolicy().setLogExhausted(logExhausted);
-        return this;
-    }
-
-    public DefaultErrorHandlerBuilder logRetryAttempted(boolean logRetryAttempted) {
-        getRedeliveryPolicy().setLogRetryAttempted(logRetryAttempted);
-        return this;
-    }
-
-    public DefaultErrorHandlerBuilder logExhaustedMessageHistory(boolean logExhaustedMessageHistory) {
-        getRedeliveryPolicy().setLogExhaustedMessageHistory(logExhaustedMessageHistory);
-        return this;
-    }
-
-    public DefaultErrorHandlerBuilder logExhaustedMessageBody(boolean logExhaustedMessageBody) {
-        getRedeliveryPolicy().setLogExhaustedMessageBody(logExhaustedMessageBody);
-        return this;
-    }
-
-    public DefaultErrorHandlerBuilder exchangeFormatterRef(String exchangeFormatterRef) {
-        getRedeliveryPolicy().setExchangeFormatterRef(exchangeFormatterRef);
-        return this;
-    }
-
-    /**
-     * Will allow asynchronous delayed redeliveries. The route, in particular the consumer's component, must support the
-     * Asynchronous Routing Engine (e.g. seda)
-     *
-     * @see    RedeliveryPolicy#setAsyncDelayedRedelivery(boolean)
-     * @return the builder
-     */
-    public DefaultErrorHandlerBuilder asyncDelayedRedelivery() {
-        getRedeliveryPolicy().setAsyncDelayedRedelivery(true);
-        return this;
-    }
-
-    /**
-     * Controls whether to allow redelivery while stopping/shutting down a route that uses error handling.
-     *
-     * @param  allowRedeliveryWhileStopping <tt>true</tt> to allow redelivery, <tt>false</tt> to reject redeliveries
-     * @return                              the builder
-     */
-    public DefaultErrorHandlerBuilder allowRedeliveryWhileStopping(boolean allowRedeliveryWhileStopping) {
-        getRedeliveryPolicy().setAllowRedeliveryWhileStopping(allowRedeliveryWhileStopping);
-        return this;
-    }
-
-    /**
-     * Sets the thread pool to be used for redelivery.
-     *
-     * @param  executorService the scheduled thread pool to use
-     * @return                 the builder.
-     */
-    public DefaultErrorHandlerBuilder executorService(ScheduledExecutorService executorService) {
-        setExecutorService(executorService);
-        return this;
-    }
-
-    /**
-     * Sets a reference to a thread pool to be used for redelivery.
-     *
-     * @param  ref reference to a scheduled thread pool
-     * @return     the builder.
-     */
-    public DefaultErrorHandlerBuilder executorServiceRef(String ref) {
-        setExecutorServiceRef(ref);
-        return this;
-    }
-
-    /**
-     * Sets the logger used for caught exceptions
-     *
-     * @param  logger the logger
-     * @return        the builder
-     */
-    public DefaultErrorHandlerBuilder logger(CamelLogger logger) {
-        setLogger(logger);
-        return this;
-    }
-
-    /**
-     * Sets the logging level of exceptions caught
-     *
-     * @param  level the logging level
-     * @return       the builder
-     */
-    public DefaultErrorHandlerBuilder loggingLevel(LoggingLevel level) {
-        getLogger().setLevel(level);
-        return this;
-    }
-
-    /**
-     * Sets the log used for caught exceptions
-     *
-     * @param  log the logger
-     * @return     the builder
-     */
-    public DefaultErrorHandlerBuilder log(org.slf4j.Logger log) {
-        getLogger().setLog(log);
-        return this;
-    }
-
-    /**
-     * Sets the log used for caught exceptions
-     *
-     * @param  log the log name
-     * @return     the builder
-     */
-    public DefaultErrorHandlerBuilder log(String log) {
-        return log(LoggerFactory.getLogger(log));
-    }
-
-    /**
-     * Sets the log used for caught exceptions
-     *
-     * @param  log the log class
-     * @return     the builder
-     */
-    public DefaultErrorHandlerBuilder log(Class<?> log) {
-        return log(LoggerFactory.getLogger(log));
-    }
-
-    /**
-     * Sets a processor that should be processed <b>before</b> a redelivery attempt.
-     * <p/>
-     * Can be used to change the {@link org.apache.camel.Exchange} <b>before</b> its being redelivered.
-     *
-     * @param  processor the processor
-     * @return           the builder
-     */
-    public DefaultErrorHandlerBuilder onRedelivery(Processor processor) {
-        setOnRedelivery(processor);
-        return this;
-    }
-
-    /**
-     * Sets a reference for the processor to use <b>before</b> a redelivery attempt.
-     *
-     * @param  onRedeliveryRef the processor's reference
-     * @return                 the builder
-     * @see                    #onRedelivery(Processor)
-     */
-    public DefaultErrorHandlerBuilder onRedeliveryRef(String onRedeliveryRef) {
-        setOnRedeliveryRef(onRedeliveryRef);
-        return this;
-    }
-
-    /**
-     * Sets the retry while expression.
-     * <p/>
-     * Will continue retrying until expression evaluates to <tt>false</tt>.
-     *
-     * @param  retryWhile expression that determines when to stop retrying
-     * @return            the builder
-     */
-    public DefaultErrorHandlerBuilder retryWhile(Expression retryWhile) {
-        setRetryWhile(ExpressionToPredicateAdapter.toPredicate(retryWhile));
-        return this;
-    }
-
-    public DefaultErrorHandlerBuilder retryWhileRef(String retryWhileRef) {
-        setRetryWhileRef(retryWhileRef);
-        return this;
-    }
-
-    /**
-     * Will use the original input {@link org.apache.camel.Message} (original body and headers) when an
-     * {@link org.apache.camel.Exchange} is moved to the dead letter queue.
-     * <p/>
-     * <b>Notice:</b> this only applies when all redeliveries attempt have failed and the
-     * {@link org.apache.camel.Exchange} is doomed for failure. <br/>
-     * Instead of using the current inprogress {@link org.apache.camel.Exchange} IN message we use the original IN
-     * message instead. This allows you to store the original input in the dead letter queue instead of the inprogress
-     * snapshot of the IN message. For instance if you route transform the IN body during routing and then failed. With
-     * the original exchange store in the dead letter queue it might be easier to manually re submit the
-     * {@link org.apache.camel.Exchange} again as the IN message is the same as when Camel received it. So you should be
-     * able to send the {@link org.apache.camel.Exchange} to the same input.
-     * <p/>
-     * The difference between useOriginalMessage and useOriginalBody is that the former includes both the original body
-     * and headers, where as the latter only includes the original body. You can use the latter to enrich the message
-     * with custom headers and include the original message body. The former wont let you do this, as its using the
-     * original message body and headers as they are. You cannot enable both useOriginalMessage and useOriginalBody.
-     * <p/>
-     * <b>Important:</b> The original input means the input message that are bounded by the current
-     * {@link org.apache.camel.spi.UnitOfWork}. An unit of work typically spans one route, or multiple routes if they
-     * are connected using internal endpoints such as direct or seda. When messages is passed via external endpoints
-     * such as JMS or HTTP then the consumer will create a new unit of work, with the message it received as input as
-     * the original input. Also some EIP patterns such as splitter, multicast, will create a new unit of work boundary
-     * for the messages in their sub-route (eg the split message); however these EIPs have an option named
-     * <tt>shareUnitOfWork</tt> which allows to combine with the parent unit of work in regard to error handling and
-     * therefore use the parent original message.
-     * <p/>
-     * By default this feature is off.
-     *
-     * @return the builder
-     * @see    #useOriginalBody()
-     */
-    public DefaultErrorHandlerBuilder useOriginalMessage() {
-        setUseOriginalMessage(true);
-        return this;
-    }
-
-    /**
-     * Will use the original input {@link org.apache.camel.Message} body (original body only) when an
-     * {@link org.apache.camel.Exchange} is moved to the dead letter queue.
-     * <p/>
-     * <b>Notice:</b> this only applies when all redeliveries attempt have failed and the
-     * {@link org.apache.camel.Exchange} is doomed for failure. <br/>
-     * Instead of using the current inprogress {@link org.apache.camel.Exchange} IN message we use the original IN
-     * message instead. This allows you to store the original input in the dead letter queue instead of the inprogress
-     * snapshot of the IN message. For instance if you route transform the IN body during routing and then failed. With
-     * the original exchange store in the dead letter queue it might be easier to manually re submit the
-     * {@link org.apache.camel.Exchange} again as the IN message is the same as when Camel received it. So you should be
-     * able to send the {@link org.apache.camel.Exchange} to the same input.
-     * <p/>
-     * The difference between useOriginalMessage and useOriginalBody is that the former includes both the original body
-     * and headers, where as the latter only includes the original body. You can use the latter to enrich the message
-     * with custom headers and include the original message body. The former wont let you do this, as its using the
-     * original message body and headers as they are. You cannot enable both useOriginalMessage and useOriginalBody.
-     * <p/>
-     * <b>Important:</b> The original input means the input message that are bounded by the current
-     * {@link org.apache.camel.spi.UnitOfWork}. An unit of work typically spans one route, or multiple routes if they
-     * are connected using internal endpoints such as direct or seda. When messages is passed via external endpoints
-     * such as JMS or HTTP then the consumer will create a new unit of work, with the message it received as input as
-     * the original input. Also some EIP patterns such as splitter, multicast, will create a new unit of work boundary
-     * for the messages in their sub-route (eg the split message); however these EIPs have an option named
-     * <tt>shareUnitOfWork</tt> which allows to combine with the parent unit of work in regard to error handling and
-     * therefore use the parent original message.
-     * <p/>
-     * By default this feature is off.
-     *
-     * @return the builder
-     * @see    #useOriginalMessage()
-     */
-    public DefaultErrorHandlerBuilder useOriginalBody() {
-        setUseOriginalBody(true);
-        return this;
-    }
-
-    /**
-     * Whether the dead letter channel should handle (and ignore) any new exception that may been thrown during sending
-     * the message to the dead letter endpoint.
-     * <p/>
-     * The default value is <tt>true</tt> which means any such kind of exception is handled and ignored. Set this to
-     * <tt>false</tt> to let the exception be propagated back on the {@link org.apache.camel.Exchange}. This can be used
-     * in situations where you use transactions, and want to use Camel's dead letter channel to deal with exceptions
-     * during routing, but if the dead letter channel itself fails because of a new exception being thrown, then by
-     * setting this to <tt>false</tt> the new exceptions is propagated back and set on the
-     * {@link org.apache.camel.Exchange}, which allows the transaction to detect the exception, and rollback.
-     *
-     * @param  handleNewException <tt>true</tt> to handle (and ignore), <tt>false</tt> to catch and propagated the
-     *                            exception on the {@link org.apache.camel.Exchange}
-     * @return                    the builder
-     */
-    public DefaultErrorHandlerBuilder deadLetterHandleNewException(boolean handleNewException) {
-        setDeadLetterHandleNewException(handleNewException);
-        return this;
-    }
-
-    /**
-     * Sets a custom {@link org.apache.camel.Processor} to prepare the {@link org.apache.camel.Exchange} before handled
-     * by the failure processor / dead letter channel. This allows for example to enrich the message before sending to a
-     * dead letter queue.
-     *
-     * @param  processor the processor
-     * @return           the builder
-     */
-    public DefaultErrorHandlerBuilder onPrepareFailure(Processor processor) {
-        setOnPrepareFailure(processor);
-        return this;
-    }
-
-    /**
-     * Sets a reference for the processor to use before handled by the failure processor.
-     *
-     * @param  onPrepareFailureRef the processor's reference
-     * @return                     the builder
-     * @see                        #onPrepareFailure(Processor)
-     */
-    public DefaultErrorHandlerBuilder onPrepareFailureRef(String onPrepareFailureRef) {
-        setOnPrepareFailureRef(onPrepareFailureRef);
-        return this;
-    }
-
-    /**
-     * Sets a custom {@link org.apache.camel.Processor} to process the {@link org.apache.camel.Exchange} just after an
-     * exception was thrown. This allows to execute the processor at the same time the exception was thrown.
-     * <p/>
-     * Important: Any exception thrown from this processor will be ignored.
-     *
-     * @param  processor the processor
-     * @return           the builder
-     */
-    public DefaultErrorHandlerBuilder onExceptionOccurred(Processor processor) {
-        setOnExceptionOccurred(processor);
-        return this;
-    }
-
-    /**
-     * Sets a reference for the processor to use just after an exception was thrown.
-     *
-     * @param  onExceptionOccurredRef the processor's reference
-     * @return                        the builder
-     * @see                           #onExceptionOccurred(Processor)
-     */
-    public DefaultErrorHandlerBuilder onExceptionOccurredRef(String onExceptionOccurredRef) {
-        setOnExceptionOccurredRef(onExceptionOccurredRef);
-        return this;
-    }
-
-    // Properties
-    // -------------------------------------------------------------------------
-
-    @Override
-    public boolean hasRedeliveryPolicy() {
-        return configuration.getRedeliveryPolicy() != null;
-    }
-
-    @Override
-    public RedeliveryPolicy getDefaultRedeliveryPolicy() {
-        return RedeliveryPolicy.DEFAULT_POLICY;
-    }
-
-    public RedeliveryPolicy getRedeliveryPolicy() {
-        if (configuration.getRedeliveryPolicy() == null) {
-            configuration.setRedeliveryPolicy(createRedeliveryPolicy());
-        }
-        return configuration.getRedeliveryPolicy();
-    }
-
-    /**
-     * Sets the redelivery policy
-     */
-    public void setRedeliveryPolicy(RedeliveryPolicy redeliveryPolicy) {
-        configuration.setRedeliveryPolicy(redeliveryPolicy);
-    }
-
-    @Override
-    public boolean hasLogger() {
-        return configuration.hasLogger();
-    }
-
-    public CamelLogger getLogger() {
-        if (configuration.getLogger() == null) {
-            configuration.setLogger(createLogger());
-        }
-        return configuration.getLogger();
-    }
-
-    public void setLogger(CamelLogger logger) {
-        configuration.setLogger(logger);
-    }
-
-    public Processor getOnRedelivery() {
-        return configuration.getOnRedelivery();
-    }
-
-    public void setOnRedelivery(Processor onRedelivery) {
-        configuration.setOnRedelivery(onRedelivery);
-    }
-
-    public String getOnRedeliveryRef() {
-        return configuration.getOnRedeliveryRef();
-    }
-
-    public void setOnRedeliveryRef(String onRedeliveryRef) {
-        configuration.setOnRedeliveryRef(onRedeliveryRef);
-    }
-
-    public Predicate getRetryWhilePolicy(CamelContext context) {
-        Predicate answer = getRetryWhile();
-
-        if (getRetryWhileRef() != null) {
-            // its a bean expression
-            Language bean = context.resolveLanguage("bean");
-            answer = bean.createPredicate(getRetryWhileRef());
-        }
-
-        return answer;
-    }
-
-    public Predicate getRetryWhile() {
-        return configuration.getRetryWhile();
-    }
-
-    public void setRetryWhile(Predicate retryWhile) {
-        configuration.setRetryWhile(retryWhile);
-    }
-
-    public String getRetryWhileRef() {
-        return configuration.getRetryWhileRef();
-    }
-
-    public void setRetryWhileRef(String retryWhileRef) {
-        configuration.setRetryWhileRef(retryWhileRef);
-    }
-
-    public String getDeadLetterUri() {
-        return configuration.getDeadLetterUri();
-    }
-
-    public void setDeadLetterUri(String deadLetterUri) {
-        configuration.setDeadLetterUri(deadLetterUri);
-    }
-
-    public boolean isDeadLetterHandleNewException() {
-        return configuration.isDeadLetterHandleNewException();
-    }
-
-    public void setDeadLetterHandleNewException(boolean deadLetterHandleNewException) {
-        configuration.setDeadLetterHandleNewException(deadLetterHandleNewException);
-    }
-
-    public boolean isUseOriginalMessage() {
-        return configuration.isUseOriginalMessage();
-    }
-
-    public void setUseOriginalMessage(boolean useOriginalMessage) {
-        configuration.setUseOriginalMessage(useOriginalMessage);
-    }
-
-    public boolean isUseOriginalBody() {
-        return configuration.isUseOriginalBody();
-    }
-
-    public void setUseOriginalBody(boolean useOriginalBody) {
-        configuration.setUseOriginalBody(useOriginalBody);
-    }
-
-    public boolean isAsyncDelayedRedelivery() {
-        return configuration.isAsyncDelayedRedelivery();
-    }
-
-    public void setAsyncDelayedRedelivery(boolean asyncDelayedRedelivery) {
-        configuration.setAsyncDelayedRedelivery(asyncDelayedRedelivery);
-    }
-
-    public ScheduledExecutorService getExecutorService() {
-        return configuration.getExecutorService();
-    }
-
-    public void setExecutorService(ScheduledExecutorService executorService) {
-        configuration.setExecutorService(executorService);
-    }
-
-    public String getExecutorServiceRef() {
-        return configuration.getExecutorServiceRef();
-    }
-
-    public void setExecutorServiceRef(String executorServiceRef) {
-        configuration.setExecutorServiceRef(executorServiceRef);
-    }
-
-    public Processor getOnPrepareFailure() {
-        return configuration.getOnPrepareFailure();
-    }
-
-    public void setOnPrepareFailure(Processor onPrepareFailure) {
-        configuration.setOnPrepareFailure(onPrepareFailure);
-    }
-
-    public String getOnPrepareFailureRef() {
-        return configuration.getOnPrepareFailureRef();
-    }
-
-    public void setOnPrepareFailureRef(String onPrepareFailureRef) {
-        configuration.setOnPrepareFailureRef(onPrepareFailureRef);
-    }
-
-    public Processor getOnExceptionOccurred() {
-        return configuration.getOnExceptionOccurred();
-    }
-
-    public void setOnExceptionOccurred(Processor onExceptionOccurred) {
-        configuration.setOnExceptionOccurred(onExceptionOccurred);
-    }
-
-    public String getOnExceptionOccurredRef() {
-        return configuration.getOnExceptionOccurredRef();
-    }
-
-    public void setOnExceptionOccurredRef(String onExceptionOccurredRef) {
-        configuration.setOnExceptionOccurredRef(onExceptionOccurredRef);
-    }
-
-    protected RedeliveryPolicy createRedeliveryPolicy() {
-        RedeliveryPolicy policy = new RedeliveryPolicy();
-        policy.disableRedelivery();
-        return policy;
-    }
-
-    protected CamelLogger createLogger() {
-        return new CamelLogger(LoggerFactory.getLogger(DefaultErrorHandler.class), LoggingLevel.ERROR);
-    }
-
-    @Override
-    public String toString() {
-        return "DefaultErrorHandlerBuilder";
-    }
-
-}
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java b/core/camel-core-model/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java
deleted file mode 100644
index f3f40304231..00000000000
--- a/core/camel-core-model/src/main/java/org/apache/camel/builder/ErrorHandlerBuilderRef.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.builder;
-
-import org.apache.camel.model.errorhandler.ErrorHandlerRefConfiguration;
-import org.apache.camel.model.errorhandler.ErrorHandlerRefProperties;
-
-/**
- * Legacy error handler for XML DSL in camel-spring-xml/camel-blueprint
- */
-@Deprecated
-public class ErrorHandlerBuilderRef extends LegacyErrorHandlerBuilderSupport implements ErrorHandlerRefProperties {
-
-    public static final String DEFAULT_ERROR_HANDLER_BUILDER = ErrorHandlerRefProperties.DEFAULT_ERROR_HANDLER_BUILDER;
-
-    private final ErrorHandlerRefConfiguration configuration = new ErrorHandlerRefConfiguration();
-
-    public ErrorHandlerBuilderRef() {
-    }
-
-    public ErrorHandlerBuilderRef(String ref) {
-        this.configuration.setRef(ref);
-    }
-
-    @Override
-    public boolean supportTransacted() {
-        return configuration.isSupportTransacted();
-    }
-
-    @Override
-    public LegacyErrorHandlerBuilder cloneBuilder() {
-        ErrorHandlerBuilderRef answer = new ErrorHandlerBuilderRef(configuration.getRef());
-        cloneBuilder(answer);
-        return answer;
-    }
-
-    protected void cloneBuilder(ErrorHandlerBuilderRef other) {
-        other.setSupportTransacted(configuration.isSupportTransacted());
-    }
-
-    public String getRef() {
-        return configuration.getRef();
-    }
-
-    @Override
-    public void setRef(String ref) {
-        configuration.setRef(ref);
-    }
-
-    @Override
-    public boolean isSupportTransacted() {
-        return configuration.isSupportTransacted();
-    }
-
-    @Override
-    public void setSupportTransacted(boolean supportTransacted) {
-        configuration.setSupportTransacted(supportTransacted);
-    }
-
-    @Override
-    public String toString() {
-        return "ErrorHandlerBuilderRef[" + configuration.getRef() + "]";
-    }
-}
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/builder/LegacyDeadLetterChannelBuilder.java b/core/camel-core-model/src/main/java/org/apache/camel/builder/LegacyDeadLetterChannelBuilder.java
index 10d70ef104e..c0075cad4f8 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/builder/LegacyDeadLetterChannelBuilder.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/builder/LegacyDeadLetterChannelBuilder.java
@@ -29,7 +29,7 @@ import org.slf4j.LoggerFactory;
  * Legacy error handler for XML DSL in camel-spring-xml/camel-blueprint
  */
 @Deprecated
-public class LegacyDeadLetterChannelBuilder extends DefaultErrorHandlerBuilder implements DeadLetterChannelProperties {
+public class LegacyDeadLetterChannelBuilder extends LegacyDefaultErrorHandlerBuilder implements DeadLetterChannelProperties {
 
     public LegacyDeadLetterChannelBuilder() {
         // no-arg constructor used by Spring DSL
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/builder/NoErrorHandlerBuilder.java b/core/camel-core-model/src/main/java/org/apache/camel/builder/NoErrorHandlerBuilder.java
deleted file mode 100644
index 34f22cdf1f1..00000000000
--- a/core/camel-core-model/src/main/java/org/apache/camel/builder/NoErrorHandlerBuilder.java
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.builder;
-
-import org.apache.camel.model.errorhandler.NoErrorHandlerProperties;
-
-/**
- * Legacy error handler for XML DSL in camel-spring-xml/camel-blueprint
- */
-@Deprecated
-public class NoErrorHandlerBuilder extends LegacyErrorHandlerBuilderSupport implements NoErrorHandlerProperties {
-
-    @Override
-    public boolean supportTransacted() {
-        return false;
-    }
-
-    @Override
-    public LegacyErrorHandlerBuilder cloneBuilder() {
-        return new NoErrorHandlerBuilder();
-    }
-}