You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2022/04/07 09:41:13 UTC
[camel] 04/05: CAMEL-16834: error handler in model DSL. WIP
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch errorhandler-in-dsl
in repository https://gitbox.apache.org/repos/asf/camel.git
commit ce71c94ed402d92e24fb43d3198ded8e7afd0bda
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Thu Apr 7 11:36:24 2022 +0200
CAMEL-16834: error handler in model DSL. WIP
---
.../camel/jta/JtaTransactionErrorHandler.java | 6 ++--
.../jta/JtaTransactionErrorHandlerReifier.java | 22 ++++++------
.../org/apache/camel/jta/JtaTransactionPolicy.java | 20 +++++------
.../camel/spring/spi/SpringTransactionPolicy.java | 2 +-
.../spring/spi/TransactionErrorHandlerReifier.java | 26 +++++++-------
.../services/org/apache/camel/model.properties | 3 +-
.../org/apache/camel/model/errorHandler.json | 2 +-
.../org/apache/camel/model/errorhandler/jaxb.index | 3 +-
...andler.json => jtaTransactionErrorHandler.json} | 8 ++---
...ler.json => springTransactionErrorHandler.json} | 8 ++---
.../apache/camel/model/ErrorHandlerDefinition.java | 6 ++--
.../JtaTransactionErrorHandlerDefinition.java | 41 ++++++++++++++++++++++
.../SpringTransactionErrorHandlerDefinition.java | 41 ++++++++++++++++++++++
.../TransactionErrorHandlerDefinition.java | 16 +--------
.../java/org/apache/camel/xml/in/ModelParser.java | 23 ++++++++----
15 files changed, 153 insertions(+), 74 deletions(-)
diff --git a/components/camel-jta/src/main/java/org/apache/camel/jta/JtaTransactionErrorHandler.java b/components/camel-jta/src/main/java/org/apache/camel/jta/JtaTransactionErrorHandler.java
index 0d5259a87ae..68c8d66f4ee 100644
--- a/components/camel-jta/src/main/java/org/apache/camel/jta/JtaTransactionErrorHandler.java
+++ b/components/camel-jta/src/main/java/org/apache/camel/jta/JtaTransactionErrorHandler.java
@@ -24,7 +24,7 @@ import org.apache.camel.Exchange;
import org.apache.camel.LoggingLevel;
import org.apache.camel.Predicate;
import org.apache.camel.Processor;
-import org.apache.camel.model.errorhandler.TransactionErrorHandlerDefinition;
+import org.apache.camel.model.errorhandler.JtaTransactionErrorHandlerDefinition;
import org.apache.camel.processor.errorhandler.RedeliveryErrorHandler;
import org.apache.camel.processor.errorhandler.RedeliveryPolicy;
import org.apache.camel.reifier.errorhandler.ErrorHandlerReifier;
@@ -42,9 +42,9 @@ public class JtaTransactionErrorHandler extends RedeliveryErrorHandler {
static {
// register camel-jta as transaction error handler
- ErrorHandlerReifier.registerReifier(TransactionErrorHandlerDefinition.class,
+ ErrorHandlerReifier.registerReifier(JtaTransactionErrorHandlerDefinition.class,
(route, errorHandlerFactory) -> new JtaTransactionErrorHandlerReifier(
- route, (TransactionErrorHandlerDefinition) errorHandlerFactory));
+ route, (JtaTransactionErrorHandlerDefinition) errorHandlerFactory));
}
private static final Logger LOG = LoggerFactory.getLogger(JtaTransactionErrorHandler.class);
diff --git a/components/camel-jta/src/main/java/org/apache/camel/jta/JtaTransactionErrorHandlerReifier.java b/components/camel-jta/src/main/java/org/apache/camel/jta/JtaTransactionErrorHandlerReifier.java
index a49f867cfd3..7dfa4f2e0d5 100644
--- a/components/camel-jta/src/main/java/org/apache/camel/jta/JtaTransactionErrorHandlerReifier.java
+++ b/components/camel-jta/src/main/java/org/apache/camel/jta/JtaTransactionErrorHandlerReifier.java
@@ -25,6 +25,7 @@ import org.apache.camel.Predicate;
import org.apache.camel.Processor;
import org.apache.camel.Route;
import org.apache.camel.model.RedeliveryPolicyDefinition;
+import org.apache.camel.model.errorhandler.JtaTransactionErrorHandlerDefinition;
import org.apache.camel.model.errorhandler.TransactionErrorHandlerDefinition;
import org.apache.camel.processor.errorhandler.RedeliveryPolicy;
import org.apache.camel.reifier.errorhandler.ErrorHandlerReifier;
@@ -32,18 +33,17 @@ import org.apache.camel.spi.CamelLogger;
import org.apache.camel.spi.ExecutorServiceManager;
import org.apache.camel.spi.Language;
import org.apache.camel.spi.ThreadPoolProfile;
-import org.apache.camel.spi.TransactedPolicy;
import org.apache.camel.util.ObjectHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class JtaTransactionErrorHandlerReifier extends ErrorHandlerReifier<TransactionErrorHandlerDefinition> {
+public class JtaTransactionErrorHandlerReifier extends ErrorHandlerReifier<JtaTransactionErrorHandlerDefinition> {
private static final String PROPAGATION_REQUIRED = "PROPAGATION_REQUIRED";
private static final Logger LOG = LoggerFactory.getLogger(JtaTransactionErrorHandlerReifier.class);
- public JtaTransactionErrorHandlerReifier(Route route, TransactionErrorHandlerDefinition definition) {
+ public JtaTransactionErrorHandlerReifier(Route route, JtaTransactionErrorHandlerDefinition definition) {
super(route, definition);
}
@@ -73,7 +73,7 @@ public class JtaTransactionErrorHandlerReifier extends ErrorHandlerReifier<Trans
}
private JtaTransactionPolicy resolveTransactionPolicy(
- TransactionErrorHandlerDefinition definition, CamelContext camelContext) {
+ JtaTransactionErrorHandlerDefinition definition, CamelContext camelContext) {
JtaTransactionPolicy answer = (JtaTransactionPolicy) definition.getTransactedPolicy();
if (answer == null && definition.getTransactedPolicyRef() != null) {
@@ -84,18 +84,18 @@ public class JtaTransactionErrorHandlerReifier extends ErrorHandlerReifier<Trans
if (answer == null) {
LOG.debug("No transaction policy configured on error handler. Will try find it in the registry.");
- Map<String, TransactedPolicy> mapPolicy = findByTypeWithName(TransactedPolicy.class);
+ Map<String, JtaTransactionPolicy> mapPolicy = findByTypeWithName(JtaTransactionPolicy.class);
if (mapPolicy != null && mapPolicy.size() == 1) {
- TransactedPolicy policy = mapPolicy.values().iterator().next();
- if (policy instanceof JtaTransactionPolicy) {
- answer = (JtaTransactionPolicy) policy;
+ JtaTransactionPolicy policy = mapPolicy.values().iterator().next();
+ if (policy != null) {
+ answer = policy;
}
}
if (answer == null) {
- TransactedPolicy policy = lookupByNameAndType(PROPAGATION_REQUIRED, TransactedPolicy.class);
- if (policy instanceof JtaTransactionPolicy) {
- answer = (JtaTransactionPolicy) policy;
+ JtaTransactionPolicy policy = lookupByNameAndType(PROPAGATION_REQUIRED, JtaTransactionPolicy.class);
+ if (policy != null) {
+ answer = policy;
}
}
diff --git a/components/camel-jta/src/main/java/org/apache/camel/jta/JtaTransactionPolicy.java b/components/camel-jta/src/main/java/org/apache/camel/jta/JtaTransactionPolicy.java
index c7dc9994e3d..e8672e11531 100644
--- a/components/camel-jta/src/main/java/org/apache/camel/jta/JtaTransactionPolicy.java
+++ b/components/camel-jta/src/main/java/org/apache/camel/jta/JtaTransactionPolicy.java
@@ -26,14 +26,14 @@ import org.apache.camel.model.ProcessorDefinition;
import org.apache.camel.model.RouteDefinition;
import org.apache.camel.model.errorhandler.ErrorHandlerHelper;
import org.apache.camel.model.errorhandler.ErrorHandlerRefDefinition;
-import org.apache.camel.model.errorhandler.TransactionErrorHandlerDefinition;
+import org.apache.camel.model.errorhandler.JtaTransactionErrorHandlerDefinition;
import org.apache.camel.spi.TransactedPolicy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
- * Sets a proper error handler. This class is based on org.apache.camel.spring.spi.SpringTransactionPolicy.
- * <p>
+ * JTA transaction policy when using JTA based transactions.
+ *
* This class requires the resource TransactionManager to be available through JNDI url
* "java:/TransactionManager"
*/
@@ -86,20 +86,20 @@ public abstract class JtaTransactionPolicy implements TransactedPolicy {
}
}
- TransactionErrorHandlerDefinition txBuilder;
+ JtaTransactionErrorHandlerDefinition txBuilder;
if (builder != null && builder.supportTransacted()) {
- if (!(builder instanceof TransactionErrorHandlerDefinition)) {
+ if (!(builder instanceof JtaTransactionErrorHandlerDefinition)) {
throw new RuntimeCamelException(
"The given transactional error handler builder '" + builder
- + "' is not of type '" + TransactionErrorHandlerDefinition.class.getName()
+ + "' is not of type '" + JtaTransactionErrorHandlerDefinition.class.getName()
+ "' which is required in this environment!");
}
- LOG.debug("The ErrorHandlerBuilder configured is a JtaTransactionErrorHandlerBuilder: {}", builder);
- txBuilder = (TransactionErrorHandlerDefinition) builder.cloneBuilder();
+ LOG.debug("The ErrorHandlerBuilder configured is a JtaTransactionErrorHandlerDefinition: {}", builder);
+ txBuilder = (JtaTransactionErrorHandlerDefinition) builder.cloneBuilder();
} else {
LOG.debug(
- "No or no transactional ErrorHandlerBuilder configured, will use default JtaTransactionErrorHandlerBuilder settings");
- txBuilder = new TransactionErrorHandlerDefinition();
+ "No or no transactional ErrorHandlerBuilder configured, will use default JtaTransactionErrorHandlerDefinition settings");
+ txBuilder = new JtaTransactionErrorHandlerDefinition();
}
txBuilder.setTransactedPolicy(this);
diff --git a/components/camel-spring/src/main/java/org/apache/camel/spring/spi/SpringTransactionPolicy.java b/components/camel-spring/src/main/java/org/apache/camel/spring/spi/SpringTransactionPolicy.java
index 4c880cf3ec1..2270d1ee097 100644
--- a/components/camel-spring/src/main/java/org/apache/camel/spring/spi/SpringTransactionPolicy.java
+++ b/components/camel-spring/src/main/java/org/apache/camel/spring/spi/SpringTransactionPolicy.java
@@ -33,7 +33,7 @@ import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.support.TransactionTemplate;
/**
- * Wraps the processor in a Spring transaction
+ * Spring transaction policy when using spring based transactions.
*/
public class SpringTransactionPolicy implements TransactedPolicy {
private static final Logger LOG = LoggerFactory.getLogger(SpringTransactionPolicy.class);
diff --git a/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandlerReifier.java b/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandlerReifier.java
index dbe2006a38f..8ce2367774f 100644
--- a/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandlerReifier.java
+++ b/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandlerReifier.java
@@ -25,6 +25,7 @@ import org.apache.camel.Predicate;
import org.apache.camel.Processor;
import org.apache.camel.Route;
import org.apache.camel.model.RedeliveryPolicyDefinition;
+import org.apache.camel.model.errorhandler.SpringTransactionErrorHandlerDefinition;
import org.apache.camel.model.errorhandler.TransactionErrorHandlerDefinition;
import org.apache.camel.processor.errorhandler.RedeliveryPolicy;
import org.apache.camel.reifier.errorhandler.ErrorHandlerReifier;
@@ -32,7 +33,6 @@ import org.apache.camel.spi.CamelLogger;
import org.apache.camel.spi.ExecutorServiceManager;
import org.apache.camel.spi.Language;
import org.apache.camel.spi.ThreadPoolProfile;
-import org.apache.camel.spi.TransactedPolicy;
import org.apache.camel.util.ObjectHelper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -41,11 +41,11 @@ import org.springframework.transaction.support.TransactionTemplate;
import static org.apache.camel.model.TransactedDefinition.PROPAGATION_REQUIRED;
-public class TransactionErrorHandlerReifier extends ErrorHandlerReifier<TransactionErrorHandlerDefinition> {
+public class TransactionErrorHandlerReifier extends ErrorHandlerReifier<SpringTransactionErrorHandlerDefinition> {
private static final Logger LOG = LoggerFactory.getLogger(TransactionErrorHandlerReifier.class);
- public TransactionErrorHandlerReifier(Route route, TransactionErrorHandlerDefinition definition) {
+ public TransactionErrorHandlerReifier(Route route, SpringTransactionErrorHandlerDefinition definition) {
super(route, definition);
}
@@ -79,30 +79,28 @@ public class TransactionErrorHandlerReifier extends ErrorHandlerReifier<Transact
TransactionTemplate answer = null;
- TransactedPolicy policy = (TransactedPolicy) definition.getTransactedPolicy();
+ SpringTransactionPolicy policy = (SpringTransactionPolicy) definition.getTransactedPolicy();
if (policy == null && definition.getTransactedPolicyRef() != null) {
- policy = mandatoryLookup(definition.getTransactedPolicyRef(), TransactedPolicy.class);
+ policy = mandatoryLookup(definition.getTransactedPolicyRef(), SpringTransactionPolicy.class);
}
if (policy != null) {
- if (policy instanceof SpringTransactionPolicy) {
- answer = ((SpringTransactionPolicy) policy).getTransactionTemplate();
- }
+ answer = ((SpringTransactionPolicy) policy).getTransactionTemplate();
}
if (answer == null) {
- Map<String, TransactedPolicy> mapPolicy = findByTypeWithName(TransactedPolicy.class);
+ Map<String, SpringTransactionPolicy> mapPolicy = findByTypeWithName(SpringTransactionPolicy.class);
if (mapPolicy != null && mapPolicy.size() == 1) {
policy = mapPolicy.values().iterator().next();
- if (policy instanceof SpringTransactionPolicy) {
- answer = ((SpringTransactionPolicy) policy).getTransactionTemplate();
+ if (policy != null) {
+ answer = policy.getTransactionTemplate();
}
}
}
if (answer == null) {
- policy = lookupByNameAndType(PROPAGATION_REQUIRED, TransactedPolicy.class);
- if (policy instanceof SpringTransactionPolicy) {
- answer = ((SpringTransactionPolicy) policy).getTransactionTemplate();
+ policy = lookupByNameAndType(PROPAGATION_REQUIRED, SpringTransactionPolicy.class);
+ if (policy != null) {
+ answer = policy.getTransactionTemplate();
}
}
diff --git a/core/camel-core-model/src/generated/resources/META-INF/services/org/apache/camel/model.properties b/core/camel-core-model/src/generated/resources/META-INF/services/org/apache/camel/model.properties
index caa9169a32e..191cce43a92 100644
--- a/core/camel-core-model/src/generated/resources/META-INF/services/org/apache/camel/model.properties
+++ b/core/camel-core-model/src/generated/resources/META-INF/services/org/apache/camel/model.properties
@@ -81,6 +81,7 @@ joor
json
jsonApi
jsonpath
+jtaTransactionErrorHandler
kamelet
kubernetesServiceDiscovery
language
@@ -172,6 +173,7 @@ soap
sort
spel
split
+springTransactionErrorHandler
staticServiceDiscovery
step
sticky
@@ -196,7 +198,6 @@ toD
tokenize
topic
transacted
-transactionErrorHandler
transform
transformers
typeFilter
diff --git a/core/camel-core-model/src/generated/resources/org/apache/camel/model/errorHandler.json b/core/camel-core-model/src/generated/resources/org/apache/camel/model/errorHandler.json
index 6ed2014de84..9b2e751b23a 100644
--- a/core/camel-core-model/src/generated/resources/org/apache/camel/model/errorHandler.json
+++ b/core/camel-core-model/src/generated/resources/org/apache/camel/model/errorHandler.json
@@ -12,7 +12,7 @@
"output": false
},
"properties": {
- "errorHandlerType": { "kind": "element", "displayName": "Error Handler Type", "required": true, "type": "object", "javaType": "org.apache.camel.ErrorHandlerFactory", "oneOf": [ "deadLetterChannel", "defaultErrorHandler", "noErrorHandler", "transactionErrorHandler" ], "deprecated": false, "autowired": false, "secret": false },
+ "errorHandlerType": { "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 },
"id": { "kind": "attribute", "displayName": "Id", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The id of this node" }
}
}
diff --git a/core/camel-core-model/src/generated/resources/org/apache/camel/model/errorhandler/jaxb.index b/core/camel-core-model/src/generated/resources/org/apache/camel/model/errorhandler/jaxb.index
index 0fb3a1aa359..1daaba1595c 100644
--- a/core/camel-core-model/src/generated/resources/org/apache/camel/model/errorhandler/jaxb.index
+++ b/core/camel-core-model/src/generated/resources/org/apache/camel/model/errorhandler/jaxb.index
@@ -2,5 +2,6 @@
DeadLetterChannelDefinition
DefaultErrorHandlerDefinition
ErrorHandlerRefDefinition
+JtaTransactionErrorHandlerDefinition
NoErrorHandlerDefinition
-TransactionErrorHandlerDefinition
+SpringTransactionErrorHandlerDefinition
diff --git a/core/camel-core-model/src/generated/resources/org/apache/camel/model/errorhandler/transactionErrorHandler.json b/core/camel-core-model/src/generated/resources/org/apache/camel/model/errorhandler/jtaTransactionErrorHandler.json
similarity index 97%
copy from core/camel-core-model/src/generated/resources/org/apache/camel/model/errorhandler/transactionErrorHandler.json
copy to core/camel-core-model/src/generated/resources/org/apache/camel/model/errorhandler/jtaTransactionErrorHandler.json
index b8469bebef1..e80961aebb2 100644
--- a/core/camel-core-model/src/generated/resources/org/apache/camel/model/errorhandler/transactionErrorHandler.json
+++ b/core/camel-core-model/src/generated/resources/org/apache/camel/model/errorhandler/jtaTransactionErrorHandler.json
@@ -1,12 +1,12 @@
{
"model": {
"kind": "model",
- "name": "transactionErrorHandler",
- "title": "Transaction Error Handler",
- "description": "Transactional error handler (requires either camel-spring or camel-jta using traditional JTA transactions).",
+ "name": "jtaTransactionErrorHandler",
+ "title": "Jta Transaction Error Handler",
+ "description": "JTA based transactional error handler (requires camel-jta).",
"deprecated": false,
"label": "configuration,error",
- "javaType": "org.apache.camel.model.errorhandler.TransactionErrorHandlerDefinition",
+ "javaType": "org.apache.camel.model.errorhandler.JtaTransactionErrorHandlerDefinition",
"abstract": false,
"input": false,
"output": false
diff --git a/core/camel-core-model/src/generated/resources/org/apache/camel/model/errorhandler/transactionErrorHandler.json b/core/camel-core-model/src/generated/resources/org/apache/camel/model/errorhandler/springTransactionErrorHandler.json
similarity index 97%
rename from core/camel-core-model/src/generated/resources/org/apache/camel/model/errorhandler/transactionErrorHandler.json
rename to core/camel-core-model/src/generated/resources/org/apache/camel/model/errorhandler/springTransactionErrorHandler.json
index b8469bebef1..13e9822a850 100644
--- a/core/camel-core-model/src/generated/resources/org/apache/camel/model/errorhandler/transactionErrorHandler.json
+++ b/core/camel-core-model/src/generated/resources/org/apache/camel/model/errorhandler/springTransactionErrorHandler.json
@@ -1,12 +1,12 @@
{
"model": {
"kind": "model",
- "name": "transactionErrorHandler",
- "title": "Transaction Error Handler",
- "description": "Transactional error handler (requires either camel-spring or camel-jta using traditional JTA transactions).",
+ "name": "springTransactionErrorHandler",
+ "title": "Spring Transaction Error Handler",
+ "description": "Spring based transactional error handler (requires camel-spring).",
"deprecated": false,
"label": "configuration,error",
- "javaType": "org.apache.camel.model.errorhandler.TransactionErrorHandlerDefinition",
+ "javaType": "org.apache.camel.model.errorhandler.SpringTransactionErrorHandlerDefinition",
"abstract": false,
"input": false,
"output": false
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 3ae391ca309..73601356103 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
@@ -25,8 +25,9 @@ import javax.xml.bind.annotation.XmlRootElement;
import org.apache.camel.ErrorHandlerFactory;
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.TransactionErrorHandlerDefinition;
+import org.apache.camel.model.errorhandler.SpringTransactionErrorHandlerDefinition;
import org.apache.camel.spi.Metadata;
/**
@@ -41,7 +42,8 @@ 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 = "transactionErrorHandler", type = TransactionErrorHandlerDefinition.class) })
+ @XmlElement(name = "jtaTransactionErrorHandler", type = JtaTransactionErrorHandlerDefinition.class),
+ @XmlElement(name = "springTransactionErrorHandler", type = SpringTransactionErrorHandlerDefinition.class) })
private ErrorHandlerFactory errorHandlerType;
public ErrorHandlerFactory getErrorHandlerType() {
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/errorhandler/JtaTransactionErrorHandlerDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/errorhandler/JtaTransactionErrorHandlerDefinition.java
new file mode 100644
index 00000000000..3fe3fe2c4fd
--- /dev/null
+++ b/core/camel-core-model/src/main/java/org/apache/camel/model/errorhandler/JtaTransactionErrorHandlerDefinition.java
@@ -0,0 +1,41 @@
+/*
+ * 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.model.errorhandler;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.apache.camel.ErrorHandlerFactory;
+import org.apache.camel.spi.Metadata;
+
+/**
+ * JTA based transactional error handler (requires camel-jta).
+ */
+@Metadata(label = "configuration,error")
+@XmlRootElement(name = "jtaTransactionErrorHandler")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class JtaTransactionErrorHandlerDefinition extends TransactionErrorHandlerDefinition {
+
+ @Override
+ public ErrorHandlerFactory cloneBuilder() {
+ TransactionErrorHandlerDefinition answer = new JtaTransactionErrorHandlerDefinition();
+ cloneBuilder(answer);
+ return answer;
+ }
+
+}
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/errorhandler/SpringTransactionErrorHandlerDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/errorhandler/SpringTransactionErrorHandlerDefinition.java
new file mode 100644
index 00000000000..c1531542881
--- /dev/null
+++ b/core/camel-core-model/src/main/java/org/apache/camel/model/errorhandler/SpringTransactionErrorHandlerDefinition.java
@@ -0,0 +1,41 @@
+/*
+ * 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.model.errorhandler;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlRootElement;
+
+import org.apache.camel.ErrorHandlerFactory;
+import org.apache.camel.spi.Metadata;
+
+/**
+ * Spring based transactional error handler (requires camel-spring).
+ */
+@Metadata(label = "configuration,error")
+@XmlRootElement(name = "springTransactionErrorHandler")
+@XmlAccessorType(XmlAccessType.FIELD)
+public class SpringTransactionErrorHandlerDefinition extends TransactionErrorHandlerDefinition {
+
+ @Override
+ public ErrorHandlerFactory cloneBuilder() {
+ TransactionErrorHandlerDefinition answer = new SpringTransactionErrorHandlerDefinition();
+ cloneBuilder(answer);
+ return answer;
+ }
+
+}
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/errorhandler/TransactionErrorHandlerDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/errorhandler/TransactionErrorHandlerDefinition.java
index b8e769172b6..d3d59e111b5 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/model/errorhandler/TransactionErrorHandlerDefinition.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/model/errorhandler/TransactionErrorHandlerDefinition.java
@@ -16,23 +16,16 @@
*/
package org.apache.camel.model.errorhandler;
-import javax.xml.bind.annotation.XmlAccessType;
-import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
-import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
-import org.apache.camel.ErrorHandlerFactory;
import org.apache.camel.LoggingLevel;
import org.apache.camel.spi.Metadata;
/**
* Transactional error handler (requires either camel-spring or camel-jta using traditional JTA transactions).
*/
-@Metadata(label = "configuration,error")
-@XmlRootElement(name = "transactionErrorHandler")
-@XmlAccessorType(XmlAccessType.FIELD)
-public class TransactionErrorHandlerDefinition extends DefaultErrorHandlerDefinition {
+public abstract class TransactionErrorHandlerDefinition extends DefaultErrorHandlerDefinition {
@XmlTransient
private Object transactedPolicy;
@@ -49,13 +42,6 @@ public class TransactionErrorHandlerDefinition extends DefaultErrorHandlerDefini
return true;
}
- @Override
- public ErrorHandlerFactory cloneBuilder() {
- TransactionErrorHandlerDefinition answer = new TransactionErrorHandlerDefinition();
- cloneBuilder(answer);
- return answer;
- }
-
protected void cloneBuilder(TransactionErrorHandlerDefinition other) {
other.setTransactedPolicyRef(getTransactedPolicyRef());
other.setRollbackLoggingLevel(getRollbackLoggingLevel());
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 65321c4d460..88fc8bff1f3 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
@@ -386,7 +386,8 @@ public class ModelParser extends BaseParser {
case "deadLetterChannel": def.setErrorHandlerType(doParseDeadLetterChannelDefinition()); break;
case "defaultErrorHandler": def.setErrorHandlerType(doParseDefaultErrorHandlerDefinition()); break;
case "noErrorHandler": def.setErrorHandlerType(doParseNoErrorHandlerDefinition()); break;
- case "transactionErrorHandler": def.setErrorHandlerType(doParseTransactionErrorHandlerDefinition()); break;
+ case "jtaTransactionErrorHandler": def.setErrorHandlerType(doParseJtaTransactionErrorHandlerDefinition()); break;
+ case "springTransactionErrorHandler": def.setErrorHandlerType(doParseSpringTransactionErrorHandlerDefinition()); break;
default: return false;
}
return true;
@@ -2583,19 +2584,27 @@ public class ModelParser extends BaseParser {
return identifiedTypeAttributeHandler().accept(def, key, val);
}, noElementHandler(), noValueHandler());
}
- protected NoErrorHandlerDefinition doParseNoErrorHandlerDefinition() throws IOException, XmlPullParserException {
- return doParse(new NoErrorHandlerDefinition(),
- identifiedTypeAttributeHandler(), noElementHandler(), noValueHandler());
+ protected JtaTransactionErrorHandlerDefinition doParseJtaTransactionErrorHandlerDefinition() throws IOException, XmlPullParserException {
+ return doParse(new JtaTransactionErrorHandlerDefinition(),
+ transactionErrorHandlerDefinitionAttributeHandler(), defaultErrorHandlerDefinitionElementHandler(), noValueHandler());
}
- protected TransactionErrorHandlerDefinition doParseTransactionErrorHandlerDefinition() throws IOException, XmlPullParserException {
- return doParse(new TransactionErrorHandlerDefinition(), (def, key, val) -> {
+ protected <T extends TransactionErrorHandlerDefinition> AttributeHandler<T> transactionErrorHandlerDefinitionAttributeHandler() {
+ return (def, key, val) -> {
switch (key) {
case "rollbackLoggingLevel": def.setRollbackLoggingLevel(val); break;
case "transactedPolicyRef": def.setTransactedPolicyRef(val); break;
default: return defaultErrorHandlerDefinitionAttributeHandler().accept(def, key, val);
}
return true;
- }, defaultErrorHandlerDefinitionElementHandler(), noValueHandler());
+ };
+ }
+ protected NoErrorHandlerDefinition doParseNoErrorHandlerDefinition() throws IOException, XmlPullParserException {
+ return doParse(new NoErrorHandlerDefinition(),
+ identifiedTypeAttributeHandler(), noElementHandler(), noValueHandler());
+ }
+ protected SpringTransactionErrorHandlerDefinition doParseSpringTransactionErrorHandlerDefinition() throws IOException, XmlPullParserException {
+ return doParse(new SpringTransactionErrorHandlerDefinition(),
+ transactionErrorHandlerDefinitionAttributeHandler(), defaultErrorHandlerDefinitionElementHandler(), noValueHandler());
}
protected CSimpleExpression doParseCSimpleExpression() throws IOException, XmlPullParserException {
return doParse(new CSimpleExpression(), (def, key, val) -> {