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"