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 <[email protected]>
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"

Reply via email to