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