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

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


The following commit(s) were added to refs/heads/main by this push:
     new 07a96ad9da9 Xfix (#13841)
07a96ad9da9 is described below

commit 07a96ad9da9d96ca09ceff1e7aaff808357f6a89
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Wed Apr 17 14:27:11 2024 +0200

    Xfix (#13841)
    
    * CAMEL-20667: Add ref error handler to model. camel-yaml-dsl: Avoid two 
kinds of error handler in the schema model.
    
    * Fix unit test as the xml dumper may have changed recently
    
    * Regen
---
 .../apache/camel/catalog/models/errorHandler.json  |  2 +-
 .../apache/camel/catalog/schemas/camel-spring.xsd  | 33 ++++----
 .../org/apache/camel/model/errorHandler.json       |  2 +-
 .../apache/camel/model/ErrorHandlerDefinition.java |  2 +
 .../camel/util/DumpModelAsXmlNamespaceTest.java    | 14 +++-
 .../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 +++------------------
 14 files changed, 134 insertions(+), 208 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/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 b31aac91b34..cd9cd0a406f 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
@@ -5497,6 +5497,7 @@ Whether to auto startup components when enricher is 
starting up. Default value:
             <xs:element ref="tns:deadLetterChannel"/>
             <xs:element ref="tns:defaultErrorHandler"/>
             <xs:element ref="tns:noErrorHandler"/>
+            <xs:element ref="tns:refErrorHandler"/>
             <xs:element ref="tns:jtaTransactionErrorHandler"/>
             <xs:element ref="tns:springTransactionErrorHandler"/>
           </xs:choice>
@@ -5936,6 +5937,22 @@ Sets the reference of the instance of 
org.apache.camel.spi.ExchangeFormatter to
       </xs:extension>
     </xs:complexContent>
   </xs:complexType>
+  <xs:complexType name="refErrorHandlerDefinition">
+    <xs:complexContent>
+      <xs:extension base="tns:baseErrorHandlerDefinition">
+        <xs:sequence/>
+        <xs:attribute name="ref" type="xs:string" use="required">
+          <xs:annotation>
+            <xs:documentation xml:lang="en">
+<![CDATA[
+References to an existing or custom error handler.
+]]>
+            </xs:documentation>
+          </xs:annotation>
+        </xs:attribute>
+      </xs:extension>
+    </xs:complexContent>
+  </xs:complexType>
   <xs:complexType name="jtaTransactionErrorHandlerDefinition">
     <xs:complexContent>
       <xs:extension base="tns:transactionErrorHandlerDefinition">
@@ -15205,22 +15222,6 @@ Set a reference to a custom Expression to use.
       </xs:choice>
     </xs:sequence>
   </xs:complexType>
-  <xs:complexType name="refErrorHandlerDefinition">
-    <xs:complexContent>
-      <xs:extension base="tns:baseErrorHandlerDefinition">
-        <xs:sequence/>
-        <xs:attribute name="ref" type="xs:string" use="required">
-          <xs:annotation>
-            <xs:documentation xml:lang="en">
-<![CDATA[
-References to an existing or custom error handler.
-]]>
-            </xs:documentation>
-          </xs:annotation>
-        </xs:attribute>
-      </xs:extension>
-    </xs:complexContent>
-  </xs:complexType>
   <xs:complexType name="cSimpleExpression">
     <xs:simpleContent>
       <xs:extension base="tns:typedExpressionDefinition"/>
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-core/src/test/java/org/apache/camel/util/DumpModelAsXmlNamespaceTest.java
 
b/core/camel-core/src/test/java/org/apache/camel/util/DumpModelAsXmlNamespaceTest.java
index a5a72c9f259..6ff68ae0b63 100644
--- 
a/core/camel-core/src/test/java/org/apache/camel/util/DumpModelAsXmlNamespaceTest.java
+++ 
b/core/camel-core/src/test/java/org/apache/camel/util/DumpModelAsXmlNamespaceTest.java
@@ -43,13 +43,19 @@ public class DumpModelAsXmlNamespaceTest extends 
ContextTestSupport {
         NodeList nl = dom.getElementsByTagName("xpath");
         assertEquals(2, nl.getLength());
 
-        Element n1 = (Element) nl.item(0);
-        String attributeFoo = n1.getAttribute("xmlns:foo");
+        String attributeFoo = 
dom.getDocumentElement().getAttribute("xmlns:foo");
+        if (attributeFoo.isEmpty()) {
+            Element n1 = (Element) nl.item(0);
+            attributeFoo = n1.getAttribute("xmlns:foo");
+        }
         assertNotNull(attributeFoo);
         assertEquals(URL_FOO, attributeFoo);
 
-        Element n2 = (Element) nl.item(1);
-        String attributeBar = n2.getAttribute("xmlns:bar");
+        String attributeBar = 
dom.getDocumentElement().getAttribute("xmlns:bar");
+        if (attributeBar.isEmpty()) {
+            Element n1 = (Element) nl.item(0);
+            attributeBar = n1.getAttribute("xmlns:bar");
+        }
         assertNotNull(attributeBar);
         assertEquals(URL_BAR, attributeBar);
     }
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"


Reply via email to