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

(camel) branch yaml-eh created (now 94b34f921eb)

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

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


      at 94b34f921eb CAMEL-20667: Add ref error handler to model. camel-yaml-dsl: Avoid two kinds of error handler in the schema model.

This branch includes the following new commits:

     new 94b34f921eb CAMEL-20667: Add ref error handler to model. camel-yaml-dsl: Avoid two kinds of error handler in the schema model.

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



(camel) 01/01: CAMEL-20667: Add ref error handler to model. camel-yaml-dsl: Avoid two kinds of error handler in the schema model.

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

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

commit 94b34f921eb38d1d2e598ded999ae5b99ba7022c
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Apr 17 13:25:50 2024 +0200

    CAMEL-20667: Add ref error handler to model. camel-yaml-dsl: Avoid two kinds of error handler in the schema model.
---
 .../apache/camel/catalog/models/errorHandler.json  |  2 +-
 .../org/apache/camel/model/errorHandler.json       |  2 +-
 .../apache/camel/model/ErrorHandlerDefinition.java |  2 +
 .../java/org/apache/camel/xml/in/ModelParser.java  |  1 +
 .../java/org/apache/camel/xml/out/ModelWriter.java |  1 +
 .../org/apache/camel/yaml/out/ModelWriter.java     |  1 +
 .../dsl/yaml/deserializers/ModelDeserializers.java |  6 ++
 .../dsl/yaml/deserializers/CustomResolver.java     |  7 +-
 .../ErrorHandlerBuilderDeserializer.java           | 96 ----------------------
 .../deserializers/ErrorHandlerDeserializer.java    | 79 +++++++++++++++++-
 .../deserializers/RouteDefinitionDeserializer.java |  6 +-
 .../generated/resources/schema/camelYamlDsl.json   | 92 +++------------------
 12 files changed, 107 insertions(+), 188 deletions(-)

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 704a871df5e..7e09113bd16 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
@@ -13,7 +13,7 @@
   },
   "properties": {
     "id": { "index": 0, "kind": "attribute", "displayName": "Id", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The id of this node" },
-    "errorHandlerType": { "index": 1, "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, "description": "The specific error handler in use." }
+    "errorHandlerType": { "index": 1, "kind": "element", "displayName": "Error Handler Type", "required": true, "type": "object", "javaType": "org.apache.camel.ErrorHandlerFactory", "oneOf": [ "deadLetterChannel", "defaultErrorHandler", "jtaTransactionErrorHandler", "noErrorHandler", "refErrorHandler", "springTransactionErrorHandler" ], "deprecated": false, "autowired": false, "secret": false, "description": "The specific error handler in use." }
   },
   "exchangeProperties": {
     "CamelExceptionCaught": { "index": 0, "kind": "exchangeProperty", "displayName": "Exception Caught", "label": "producer", "required": false, "javaType": "java.lang.Exception", "deprecated": false, "autowired": false, "secret": false, "description": "Stores the caught exception due to a processing error of the current Exchange" },
diff --git a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/errorHandler.json b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/errorHandler.json
index 704a871df5e..7e09113bd16 100644
--- a/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/errorHandler.json
+++ b/core/camel-core-model/src/generated/resources/META-INF/org/apache/camel/model/errorHandler.json
@@ -13,7 +13,7 @@
   },
   "properties": {
     "id": { "index": 0, "kind": "attribute", "displayName": "Id", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The id of this node" },
-    "errorHandlerType": { "index": 1, "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, "description": "The specific error handler in use." }
+    "errorHandlerType": { "index": 1, "kind": "element", "displayName": "Error Handler Type", "required": true, "type": "object", "javaType": "org.apache.camel.ErrorHandlerFactory", "oneOf": [ "deadLetterChannel", "defaultErrorHandler", "jtaTransactionErrorHandler", "noErrorHandler", "refErrorHandler", "springTransactionErrorHandler" ], "deprecated": false, "autowired": false, "secret": false, "description": "The specific error handler in use." }
   },
   "exchangeProperties": {
     "CamelExceptionCaught": { "index": 0, "kind": "exchangeProperty", "displayName": "Exception Caught", "label": "producer", "required": false, "javaType": "java.lang.Exception", "deprecated": false, "autowired": false, "secret": false, "description": "Stores the caught exception due to a processing error of the current Exchange" },
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/ErrorHandlerDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/ErrorHandlerDefinition.java
index 648f9ee633f..27837f368f6 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/model/ErrorHandlerDefinition.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/model/ErrorHandlerDefinition.java
@@ -27,6 +27,7 @@ import org.apache.camel.model.errorhandler.DeadLetterChannelDefinition;
 import org.apache.camel.model.errorhandler.DefaultErrorHandlerDefinition;
 import org.apache.camel.model.errorhandler.JtaTransactionErrorHandlerDefinition;
 import org.apache.camel.model.errorhandler.NoErrorHandlerDefinition;
+import org.apache.camel.model.errorhandler.RefErrorHandlerDefinition;
 import org.apache.camel.model.errorhandler.SpringTransactionErrorHandlerDefinition;
 import org.apache.camel.spi.Metadata;
 
@@ -42,6 +43,7 @@ public class ErrorHandlerDefinition extends IdentifiedType {
             @XmlElement(name = "deadLetterChannel", type = DeadLetterChannelDefinition.class),
             @XmlElement(name = "defaultErrorHandler", type = DefaultErrorHandlerDefinition.class),
             @XmlElement(name = "noErrorHandler", type = NoErrorHandlerDefinition.class),
+            @XmlElement(name = "refErrorHandler", type = RefErrorHandlerDefinition.class),
             @XmlElement(name = "jtaTransactionErrorHandler", type = JtaTransactionErrorHandlerDefinition.class),
             @XmlElement(name = "springTransactionErrorHandler", type = SpringTransactionErrorHandlerDefinition.class) })
     private ErrorHandlerFactory errorHandlerType;
diff --git a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
index 213dd12f0d5..816d798742f 100644
--- a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
+++ b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/in/ModelParser.java
@@ -333,6 +333,7 @@ public class ModelParser extends BaseParser {
                 case "deadLetterChannel": def.setErrorHandlerType(doParseDeadLetterChannelDefinition()); yield true;
                 case "defaultErrorHandler": def.setErrorHandlerType(doParseDefaultErrorHandlerDefinition()); yield true;
                 case "noErrorHandler": def.setErrorHandlerType(doParseNoErrorHandlerDefinition()); yield true;
+                case "refErrorHandler": def.setErrorHandlerType(doParseRefErrorHandlerDefinition()); yield true;
                 case "jtaTransactionErrorHandler": def.setErrorHandlerType(doParseJtaTransactionErrorHandlerDefinition()); yield true;
                 case "springTransactionErrorHandler": def.setErrorHandlerType(doParseSpringTransactionErrorHandlerDefinition()); yield true;
                 default: yield false;
diff --git a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
index ba45fa5a7bd..aedb31d39ec 100644
--- a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
+++ b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java
@@ -938,6 +938,7 @@ public class ModelWriter extends BaseWriter {
                 case "DeadLetterChannelDefinition" -> doWriteDeadLetterChannelDefinition("deadLetterChannel", (DeadLetterChannelDefinition) v);
                 case "DefaultErrorHandlerDefinition" -> doWriteDefaultErrorHandlerDefinition("defaultErrorHandler", (DefaultErrorHandlerDefinition) v);
                 case "NoErrorHandlerDefinition" -> doWriteNoErrorHandlerDefinition("noErrorHandler", (NoErrorHandlerDefinition) v);
+                case "RefErrorHandlerDefinition" -> doWriteRefErrorHandlerDefinition("refErrorHandler", (RefErrorHandlerDefinition) v);
                 case "JtaTransactionErrorHandlerDefinition" -> doWriteJtaTransactionErrorHandlerDefinition("jtaTransactionErrorHandler", (JtaTransactionErrorHandlerDefinition) v);
                 case "SpringTransactionErrorHandlerDefinition" -> doWriteSpringTransactionErrorHandlerDefinition("springTransactionErrorHandler", (SpringTransactionErrorHandlerDefinition) v);
             }
diff --git a/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java b/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java
index c4bef743578..f8df38bf445 100644
--- a/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java
+++ b/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java
@@ -938,6 +938,7 @@ public class ModelWriter extends BaseWriter {
                 case "DeadLetterChannelDefinition" -> doWriteDeadLetterChannelDefinition("deadLetterChannel", (DeadLetterChannelDefinition) v);
                 case "DefaultErrorHandlerDefinition" -> doWriteDefaultErrorHandlerDefinition("defaultErrorHandler", (DefaultErrorHandlerDefinition) v);
                 case "NoErrorHandlerDefinition" -> doWriteNoErrorHandlerDefinition("noErrorHandler", (NoErrorHandlerDefinition) v);
+                case "RefErrorHandlerDefinition" -> doWriteRefErrorHandlerDefinition("refErrorHandler", (RefErrorHandlerDefinition) v);
                 case "JtaTransactionErrorHandlerDefinition" -> doWriteJtaTransactionErrorHandlerDefinition("jtaTransactionErrorHandler", (JtaTransactionErrorHandlerDefinition) v);
                 case "SpringTransactionErrorHandlerDefinition" -> doWriteSpringTransactionErrorHandlerDefinition("springTransactionErrorHandler", (SpringTransactionErrorHandlerDefinition) v);
             }
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
index cd99bc0fb62..c08206a3966 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java
@@ -5288,6 +5288,7 @@ public final class ModelDeserializers extends YamlDeserializerSupport {
                     @YamlProperty(name = "id", type = "string", description = "The id of this node", displayName = "Id"),
                     @YamlProperty(name = "jtaTransactionErrorHandler", type = "object:org.apache.camel.model.errorhandler.JtaTransactionErrorHandlerDefinition", oneOf = "errorHandlerType"),
                     @YamlProperty(name = "noErrorHandler", type = "object:org.apache.camel.model.errorhandler.NoErrorHandlerDefinition", oneOf = "errorHandlerType"),
+                    @YamlProperty(name = "refErrorHandler", type = "object:org.apache.camel.model.errorhandler.RefErrorHandlerDefinition", oneOf = "errorHandlerType"),
                     @YamlProperty(name = "springTransactionErrorHandler", type = "object:org.apache.camel.model.errorhandler.SpringTransactionErrorHandlerDefinition", oneOf = "errorHandlerType")
             }
     )
@@ -5326,6 +5327,11 @@ public final class ModelDeserializers extends YamlDeserializerSupport {
                     target.setErrorHandlerType(val);
                     break;
                 }
+                case "refErrorHandler": {
+                    org.apache.camel.model.errorhandler.RefErrorHandlerDefinition val = asType(node, org.apache.camel.model.errorhandler.RefErrorHandlerDefinition.class);
+                    target.setErrorHandlerType(val);
+                    break;
+                }
                 case "jtaTransactionErrorHandler": {
                     org.apache.camel.model.errorhandler.JtaTransactionErrorHandlerDefinition val = asType(node, org.apache.camel.model.errorhandler.JtaTransactionErrorHandlerDefinition.class);
                     target.setErrorHandlerType(val);
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/CustomResolver.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/CustomResolver.java
index ab9415ece5d..6cd4b1199f5 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/CustomResolver.java
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/CustomResolver.java
@@ -86,10 +86,11 @@ public class CustomResolver implements YamlDeserializerResolver {
             //
             case "beans":
                 return beansDeserializer;
-            case "errorHandler":
+            case "org.apache.camel.model.ErrorHandlerDefinition":
                 return new ErrorHandlerDeserializer();
-            case "org.apache.camel.ErrorHandlerFactory":
-                return new ErrorHandlerBuilderDeserializer();
+            case "errorHandler":
+                // must be a global error handler
+                return new ErrorHandlerDeserializer(true);
             case "org.apache.camel.model.ProcessorDefinition":
                 return new ProcessorDefinitionDeserializer();
             case "kamelet":
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/ErrorHandlerBuilderDeserializer.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/ErrorHandlerBuilderDeserializer.java
deleted file mode 100644
index daf18aa1d3a..00000000000
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/ErrorHandlerBuilderDeserializer.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.camel.dsl.yaml.deserializers;
-
-import org.apache.camel.ErrorHandlerFactory;
-import org.apache.camel.dsl.yaml.common.YamlDeserializationContext;
-import org.apache.camel.dsl.yaml.common.YamlDeserializerResolver;
-import org.apache.camel.dsl.yaml.common.exception.UnsupportedFieldException;
-import org.apache.camel.dsl.yaml.common.exception.YamlDeserializationException;
-import org.apache.camel.model.errorhandler.DeadLetterChannelDefinition;
-import org.apache.camel.model.errorhandler.DefaultErrorHandlerDefinition;
-import org.apache.camel.model.errorhandler.JtaTransactionErrorHandlerDefinition;
-import org.apache.camel.model.errorhandler.NoErrorHandlerDefinition;
-import org.apache.camel.model.errorhandler.RefErrorHandlerDefinition;
-import org.apache.camel.spi.annotations.YamlIn;
-import org.apache.camel.spi.annotations.YamlProperty;
-import org.apache.camel.spi.annotations.YamlType;
-import org.snakeyaml.engine.v2.api.ConstructNode;
-import org.snakeyaml.engine.v2.nodes.MappingNode;
-import org.snakeyaml.engine.v2.nodes.Node;
-import org.snakeyaml.engine.v2.nodes.NodeTuple;
-
-import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.*;
-
-@YamlIn
-@YamlType(
-          types = ErrorHandlerFactory.class,
-          order = YamlDeserializerResolver.ORDER_DEFAULT,
-          properties = {
-                  @YamlProperty(name = "deadLetterChannel",
-                                type = "object:org.apache.camel.model.errorhandler.DeadLetterChannelDefinition",
-                                oneOf = "errorHandler"),
-                  @YamlProperty(name = "defaultErrorHandler",
-                                type = "object:org.apache.camel.model.errorhandler.DefaultErrorHandlerDefinition",
-                                oneOf = "errorHandler"),
-                  @YamlProperty(name = "jtaTransactionErrorHandler",
-                                type = "object:org.apache.camel.model.errorhandler.JtaTransactionErrorHandlerDefinition",
-                                oneOf = "errorHandler"),
-                  @YamlProperty(name = "noErrorHandler",
-                                type = "object:org.apache.camel.model.errorhandler.NoErrorHandlerDefinition",
-                                oneOf = "errorHandler"),
-                  @YamlProperty(name = "refErrorHandler",
-                                type = "object:org.apache.camel.model.errorhandler.RefErrorHandlerDefinition",
-                                oneOf = "errorHandler"),
-                  @YamlProperty(name = "springTransactionErrorHandler",
-                                type = "object:org.apache.camel.model.errorhandler.SpringTransactionErrorHandlerDefinition",
-                                oneOf = "errorHandler"),
-          })
-public class ErrorHandlerBuilderDeserializer implements ConstructNode {
-
-    @Override
-    public Object construct(Node node) {
-        final MappingNode bn = asMappingNode(node);
-        final YamlDeserializationContext dc = getDeserializationContext(node);
-
-        for (NodeTuple tuple : bn.getValue()) {
-            String key = asText(tuple.getKeyNode());
-            Node val = tuple.getValueNode();
-
-            setDeserializationContext(val, dc);
-
-            key = org.apache.camel.util.StringHelper.dashToCamelCase(key);
-            switch (key) {
-                case "deadLetterChannel":
-                    return asType(val, DeadLetterChannelDefinition.class);
-                case "defaultErrorHandler":
-                    return asType(val, DefaultErrorHandlerDefinition.class);
-                case "jtaTransactionErrorHandler":
-                case "springTransactionErrorHandler":
-                    return asType(val, JtaTransactionErrorHandlerDefinition.class);
-                case "noErrorHandler":
-                    return asType(val, NoErrorHandlerDefinition.class);
-                case "refErrorHandler":
-                    return asType(val, RefErrorHandlerDefinition.class);
-                default:
-                    throw new UnsupportedFieldException(val, key);
-            }
-        }
-
-        throw new YamlDeserializationException(node, "Unable to determine the error handler type for the node");
-    }
-}
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/ErrorHandlerDeserializer.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/ErrorHandlerDeserializer.java
index d9a89cd5f5f..71bd5c75d7c 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/ErrorHandlerDeserializer.java
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/ErrorHandlerDeserializer.java
@@ -18,13 +18,30 @@ package org.apache.camel.dsl.yaml.deserializers;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ErrorHandlerFactory;
+import org.apache.camel.dsl.yaml.common.YamlDeserializationContext;
 import org.apache.camel.dsl.yaml.common.YamlDeserializerResolver;
+import org.apache.camel.dsl.yaml.common.exception.UnsupportedFieldException;
+import org.apache.camel.dsl.yaml.common.exception.YamlDeserializationException;
+import org.apache.camel.model.ErrorHandlerDefinition;
+import org.apache.camel.model.errorhandler.DeadLetterChannelDefinition;
+import org.apache.camel.model.errorhandler.DefaultErrorHandlerDefinition;
+import org.apache.camel.model.errorhandler.JtaTransactionErrorHandlerDefinition;
+import org.apache.camel.model.errorhandler.NoErrorHandlerDefinition;
+import org.apache.camel.model.errorhandler.RefErrorHandlerDefinition;
 import org.apache.camel.spi.CamelContextCustomizer;
 import org.apache.camel.spi.annotations.YamlIn;
 import org.apache.camel.spi.annotations.YamlProperty;
 import org.apache.camel.spi.annotations.YamlType;
 import org.snakeyaml.engine.v2.api.ConstructNode;
+import org.snakeyaml.engine.v2.nodes.MappingNode;
 import org.snakeyaml.engine.v2.nodes.Node;
+import org.snakeyaml.engine.v2.nodes.NodeTuple;
+
+import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.asMappingNode;
+import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.asText;
+import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.asType;
+import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.getDeserializationContext;
+import static org.apache.camel.dsl.yaml.common.YamlDeserializerSupport.setDeserializationContext;
 
 @YamlIn
 @YamlType(
@@ -53,19 +70,73 @@ import org.snakeyaml.engine.v2.nodes.Node;
           })
 public class ErrorHandlerDeserializer implements ConstructNode {
 
-    private final ErrorHandlerBuilderDeserializer delegate = new ErrorHandlerBuilderDeserializer();
+    private final boolean global;
+
+    public ErrorHandlerDeserializer() {
+        this(false);
+    }
 
-    private static CamelContextCustomizer customizer(ErrorHandlerFactory builder) {
+    public ErrorHandlerDeserializer(boolean global) {
+        this.global = global;
+    }
+
+    private static CamelContextCustomizer customizer(ErrorHandlerDefinition builder) {
         return new CamelContextCustomizer() {
             @Override
             public void configure(CamelContext camelContext) {
-                camelContext.getCamelContextExtension().setErrorHandlerFactory(builder);
+                camelContext.getCamelContextExtension().setErrorHandlerFactory(builder.getErrorHandlerType());
             }
         };
     }
 
     @Override
     public Object construct(Node node) {
-        return customizer((ErrorHandlerFactory) delegate.construct(node));
+        final MappingNode bn = asMappingNode(node);
+        final YamlDeserializationContext dc = getDeserializationContext(node);
+
+        ErrorHandlerFactory factory = null;
+        for (NodeTuple tuple : bn.getValue()) {
+            String key = asText(tuple.getKeyNode());
+            Node val = tuple.getValueNode();
+
+            setDeserializationContext(val, dc);
+
+            key = org.apache.camel.util.StringHelper.dashToCamelCase(key);
+            switch (key) {
+                case "deadLetterChannel":
+                    factory = asType(val, DeadLetterChannelDefinition.class);
+                    break;
+                case "defaultErrorHandler":
+                    factory = asType(val, DefaultErrorHandlerDefinition.class);
+                    break;
+                case "jtaTransactionErrorHandler":
+                case "springTransactionErrorHandler":
+                    factory = asType(val, JtaTransactionErrorHandlerDefinition.class);
+                    break;
+                case "noErrorHandler":
+                    factory = asType(val, NoErrorHandlerDefinition.class);
+                    break;
+                case "refErrorHandler":
+                    factory = asType(val, RefErrorHandlerDefinition.class);
+                    break;
+                default:
+                    throw new UnsupportedFieldException(val, key);
+            }
+        }
+
+        if (factory == null) {
+            throw new YamlDeserializationException(node, "Unable to determine the error handler type for the node");
+        }
+
+        // wrap in model
+        ErrorHandlerDefinition answer = new ErrorHandlerDefinition();
+        answer.setErrorHandlerType(factory);
+
+        if (global) {
+            // global scoped should register factory on camel context via customizer
+            return customizer(answer);
+        }
+        return answer;
     }
+
 }
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteDefinitionDeserializer.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteDefinitionDeserializer.java
index e87622c7732..ae07ca97ff3 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteDefinitionDeserializer.java
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/main/java/org/apache/camel/dsl/yaml/deserializers/RouteDefinitionDeserializer.java
@@ -16,11 +16,11 @@
  */
 package org.apache.camel.dsl.yaml.deserializers;
 
-import org.apache.camel.ErrorHandlerFactory;
 import org.apache.camel.dsl.yaml.common.YamlDeserializationContext;
 import org.apache.camel.dsl.yaml.common.YamlDeserializerBase;
 import org.apache.camel.dsl.yaml.common.YamlDeserializerResolver;
 import org.apache.camel.dsl.yaml.common.exception.UnsupportedFieldException;
+import org.apache.camel.model.ErrorHandlerDefinition;
 import org.apache.camel.model.FromDefinition;
 import org.apache.camel.model.InputTypeDefinition;
 import org.apache.camel.model.OutputTypeDefinition;
@@ -54,7 +54,7 @@ import org.snakeyaml.engine.v2.nodes.NodeTuple;
                   @YamlProperty(name = "logMask", type = "boolean"),
                   @YamlProperty(name = "trace", type = "boolean"),
                   @YamlProperty(name = "errorHandlerRef", type = "string"),
-                  @YamlProperty(name = "errorHandler", type = "object:org.apache.camel.ErrorHandlerFactory"),
+                  @YamlProperty(name = "errorHandler", type = "object:org.apache.camel.model.ErrorHandlerDefinition"),
                   @YamlProperty(name = "shutdownRoute", type = "enum:Default,Defer",
                                 defaultValue = "Default",
                                 description = "To control how to shut down the route."),
@@ -144,7 +144,7 @@ public class RouteDefinitionDeserializer extends YamlDeserializerBase<RouteDefin
                     target.setErrorHandlerRef(asText(val));
                     break;
                 case "errorHandler":
-                    target.setErrorHandlerFactory(asType(val, ErrorHandlerFactory.class));
+                    target.setErrorHandler(asType(val, ErrorHandlerDefinition.class));
                     break;
                 case "inputType":
                     target.setInputType(asType(val, InputTypeDefinition.class));
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
index 158aa6eac22..062c7fb0a97 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
@@ -207,85 +207,6 @@
           }
         }
       },
-      "org.apache.camel.ErrorHandlerFactory" : {
-        "type" : "object",
-        "additionalProperties" : false,
-        "anyOf" : [ {
-          "oneOf" : [ {
-            "type" : "object",
-            "required" : [ "deadLetterChannel" ],
-            "properties" : {
-              "deadLetterChannel" : {
-                "$ref" : "#/items/definitions/org.apache.camel.model.errorhandler.DeadLetterChannelDefinition"
-              }
-            }
-          }, {
-            "not" : {
-              "anyOf" : [ {
-                "required" : [ "deadLetterChannel" ]
-              }, {
-                "required" : [ "defaultErrorHandler" ]
-              }, {
-                "required" : [ "jtaTransactionErrorHandler" ]
-              }, {
-                "required" : [ "noErrorHandler" ]
-              }, {
-                "required" : [ "refErrorHandler" ]
-              }, {
-                "required" : [ "springTransactionErrorHandler" ]
-              } ]
-            }
-          }, {
-            "type" : "object",
-            "required" : [ "defaultErrorHandler" ],
-            "properties" : {
-              "defaultErrorHandler" : {
-                "$ref" : "#/items/definitions/org.apache.camel.model.errorhandler.DefaultErrorHandlerDefinition"
-              }
-            }
-          }, {
-            "type" : "object",
-            "required" : [ "jtaTransactionErrorHandler" ],
-            "properties" : {
-              "jtaTransactionErrorHandler" : {
-                "$ref" : "#/items/definitions/org.apache.camel.model.errorhandler.JtaTransactionErrorHandlerDefinition"
-              }
-            }
-          }, {
-            "type" : "object",
-            "required" : [ "noErrorHandler" ],
-            "properties" : {
-              "noErrorHandler" : {
-                "$ref" : "#/items/definitions/org.apache.camel.model.errorhandler.NoErrorHandlerDefinition"
-              }
-            }
-          }, {
-            "type" : "object",
-            "required" : [ "refErrorHandler" ],
-            "properties" : {
-              "refErrorHandler" : {
-                "$ref" : "#/items/definitions/org.apache.camel.model.errorhandler.RefErrorHandlerDefinition"
-              }
-            }
-          }, {
-            "type" : "object",
-            "required" : [ "springTransactionErrorHandler" ],
-            "properties" : {
-              "springTransactionErrorHandler" : {
-                "$ref" : "#/items/definitions/org.apache.camel.model.errorhandler.SpringTransactionErrorHandlerDefinition"
-              }
-            }
-          } ]
-        } ],
-        "properties" : {
-          "deadLetterChannel" : { },
-          "defaultErrorHandler" : { },
-          "jtaTransactionErrorHandler" : { },
-          "noErrorHandler" : { },
-          "refErrorHandler" : { },
-          "springTransactionErrorHandler" : { }
-        }
-      },
       "org.apache.camel.dsl.yaml.deserializers.BeansDeserializer" : {
         "type" : "array",
         "additionalProperties" : false,
@@ -1482,6 +1403,8 @@
                 "required" : [ "jtaTransactionErrorHandler" ]
               }, {
                 "required" : [ "noErrorHandler" ]
+              }, {
+                "required" : [ "refErrorHandler" ]
               }, {
                 "required" : [ "springTransactionErrorHandler" ]
               } ]
@@ -1510,6 +1433,14 @@
                 "$ref" : "#/items/definitions/org.apache.camel.model.errorhandler.NoErrorHandlerDefinition"
               }
             }
+          }, {
+            "type" : "object",
+            "required" : [ "refErrorHandler" ],
+            "properties" : {
+              "refErrorHandler" : {
+                "$ref" : "#/items/definitions/org.apache.camel.model.errorhandler.RefErrorHandlerDefinition"
+              }
+            }
           }, {
             "type" : "object",
             "required" : [ "springTransactionErrorHandler" ],
@@ -1530,6 +1461,7 @@
           "defaultErrorHandler" : { },
           "jtaTransactionErrorHandler" : { },
           "noErrorHandler" : { },
+          "refErrorHandler" : { },
           "springTransactionErrorHandler" : { }
         }
       },
@@ -5190,7 +5122,7 @@
             "type" : "string"
           },
           "errorHandler" : {
-            "$ref" : "#/items/definitions/org.apache.camel.ErrorHandlerFactory"
+            "$ref" : "#/items/definitions/org.apache.camel.model.ErrorHandlerDefinition"
           },
           "errorHandlerRef" : {
             "type" : "string"