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 5bd40315f550354012b98b505abf7dd1c6bdb2ec Author: Claus Ibsen <[email protected]> AuthorDate: Tue Apr 5 14:26:17 2022 +0200 CAMEL-16834: error handler in model DSL. WIP --- .../camel/model/RedeliveryPolicyDefinition.java | 13 +++++++- .../errorhandler/DeadLetterChannelDefinition.java | 20 ++--------- .../DefaultErrorHandlerDefinition.java | 39 +++++++++++++++++++++- .../TransactionErrorHandlerDefinition.java | 19 +++++++++++ 4 files changed, 71 insertions(+), 20 deletions(-) diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/RedeliveryPolicyDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/RedeliveryPolicyDefinition.java index 896739f3e5d..db5fcdebd05 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/RedeliveryPolicyDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/RedeliveryPolicyDefinition.java @@ -22,15 +22,18 @@ import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlRootElement; import org.apache.camel.LoggingLevel; +import org.apache.camel.processor.errorhandler.RedeliveryPolicy; import org.apache.camel.spi.Metadata; +import java.io.Serializable; + /** * To configure re-delivery for error handling */ @Metadata(label = "configuration") @XmlRootElement(name = "redeliveryPolicy") @XmlAccessorType(XmlAccessType.FIELD) -public class RedeliveryPolicyDefinition { +public class RedeliveryPolicyDefinition implements Cloneable { @XmlAttribute @Metadata(javaType = "java.lang.Integer") @@ -110,6 +113,14 @@ public class RedeliveryPolicyDefinition { return "RedeliveryPolicy[maximumRedeliveries: " + maximumRedeliveries + "]"; } + public RedeliveryPolicyDefinition copy() { + try { + return (RedeliveryPolicyDefinition) clone(); + } catch (CloneNotSupportedException e) { + throw new RuntimeException("Could not clone: " + e, e); + } + } + // Fluent API // ------------------------------------------------------------------------- diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/errorhandler/DeadLetterChannelDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/errorhandler/DeadLetterChannelDefinition.java index 41fc490a18f..b541bfa511f 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/errorhandler/DeadLetterChannelDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/errorhandler/DeadLetterChannelDefinition.java @@ -30,7 +30,7 @@ import org.apache.camel.spi.Metadata; @Metadata(label = "configuration,error") @XmlRootElement(name = "deadLetterChannel") @XmlAccessorType(XmlAccessType.FIELD) -public class DeadLetterChannelDefinition extends DefaultErrorHandlerDefinition implements ErrorHandlerBuilder { +public class DeadLetterChannelDefinition extends DefaultErrorHandlerDefinition { // TODO: fluent builders // TODO: label, java type, ref @@ -84,25 +84,9 @@ public class DeadLetterChannelDefinition extends DefaultErrorHandlerDefinition i } protected void cloneBuilder(DeadLetterChannelDefinition other) { - other.setLoggerBean(getLoggerBean()); - if (getRedeliveryPolicy() != null) { - // TODO: copy - // other.setRedeliveryPolicy(getRedeliveryPolicy().copy()); - } - other.setOnRedeliveryProcessor(getOnRedeliveryProcessor()); - other.setOnRedeliveryRef(getOnRedeliveryRef()); - other.setRetryWhilePredicate(getRetryWhilePredicate()); - other.setRetryWhileRef(getRetryWhileRef()); other.setDeadLetterUri(getDeadLetterUri()); - other.setOnPrepareFailureProcessor(getOnPrepareFailureProcessor()); - other.setOnPrepareFailureRef(getOnPrepareFailureRef()); - other.setOnExceptionOccurredProcessor(getOnExceptionOccurredProcessor()); - other.setOnExceptionOccurredRef(getOnExceptionOccurredRef()); other.setDeadLetterHandleNewException(getDeadLetterHandleNewException()); - other.setUseOriginalMessage(getUseOriginalMessage()); - other.setUseOriginalBody(getUseOriginalBody()); - other.setExecutorServiceBean(getExecutorServiceBean()); - other.setExecutorServiceRef(getExecutorServiceRef()); + super.cloneBuilder(other); } } diff --git a/core/camel-core-model/src/main/java/org/apache/camel/model/errorhandler/DefaultErrorHandlerDefinition.java b/core/camel-core-model/src/main/java/org/apache/camel/model/errorhandler/DefaultErrorHandlerDefinition.java index d65bf96944f..68e2ce03d5f 100644 --- a/core/camel-core-model/src/main/java/org/apache/camel/model/errorhandler/DefaultErrorHandlerDefinition.java +++ b/core/camel-core-model/src/main/java/org/apache/camel/model/errorhandler/DefaultErrorHandlerDefinition.java @@ -28,6 +28,7 @@ import javax.xml.bind.annotation.XmlTransient; import org.apache.camel.LoggingLevel; import org.apache.camel.Predicate; import org.apache.camel.Processor; +import org.apache.camel.builder.ErrorHandlerBuilder; import org.apache.camel.model.RedeliveryPolicyDefinition; import org.apache.camel.processor.errorhandler.RedeliveryPolicy; import org.apache.camel.spi.CamelLogger; @@ -39,7 +40,7 @@ import org.apache.camel.spi.Metadata; @Metadata(label = "configuration,error") @XmlRootElement(name = "defaultErrorHandler") @XmlAccessorType(XmlAccessType.FIELD) -public class DefaultErrorHandlerDefinition extends BaseErrorHandlerDefinition { +public class DefaultErrorHandlerDefinition extends BaseErrorHandlerDefinition implements ErrorHandlerBuilder { // TODO: fluent builders // TODO: label, java type, ref @@ -88,6 +89,42 @@ public class DefaultErrorHandlerDefinition extends BaseErrorHandlerDefinition { @XmlElement private RedeliveryPolicyDefinition redeliveryPolicy; + @Override + public boolean supportTransacted() { + return false; + } + + @Override + public ErrorHandlerBuilder cloneBuilder() { + DefaultErrorHandlerDefinition answer = new DefaultErrorHandlerDefinition(); + cloneBuilder(answer); + return answer; + } + + protected void cloneBuilder(DefaultErrorHandlerDefinition other) { + other.setExecutorServiceBean(getExecutorServiceBean()); + other.setExecutorServiceRef(getExecutorServiceRef()); + other.setLevel(getLevel()); + other.setLogName(getLogName()); + other.setLoggerBean(getLoggerBean()); + other.setLoggerRef(getLoggerRef()); + other.setOnExceptionOccurredProcessor(getOnExceptionOccurredProcessor()); + other.setOnExceptionOccurredRef(getOnExceptionOccurredRef()); + other.setOnPrepareFailureProcessor(getOnPrepareFailureProcessor()); + other.setOnPrepareFailureRef(getOnPrepareFailureRef()); + other.setOnRedeliveryProcessor(getOnRedeliveryProcessor()); + other.setOnRedeliveryRef(getOnRedeliveryRef()); + other.setRedeliveryPolicyRef(getRedeliveryPolicyRef()); + other.setRetryWhilePredicate(getRetryWhilePredicate()); + other.setRetryWhileRef(getRetryWhileRef()); + other.setRollbackLoggingLevel(getRollbackLoggingLevel()); + other.setUseOriginalBody(getUseOriginalBody()); + other.setUseOriginalMessage(getUseOriginalMessage()); + if (getRedeliveryPolicy() != null) { + other.setRedeliveryPolicy(getRedeliveryPolicy().copy()); + } + } + public String getLoggerRef() { return loggerRef; } 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 cb5eef529bb..3c2525660c3 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 @@ -21,6 +21,7 @@ import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlRootElement; +import org.apache.camel.builder.ErrorHandlerBuilder; import org.apache.camel.spi.Metadata; /** @@ -40,6 +41,24 @@ public class TransactionErrorHandlerDefinition extends DefaultErrorHandlerDefini @XmlAttribute private String transactionManagerRef; + @Override + public boolean supportTransacted() { + return true; + } + + @Override + public ErrorHandlerBuilder cloneBuilder() { + TransactionErrorHandlerDefinition answer = new TransactionErrorHandlerDefinition(); + cloneBuilder(answer); + return answer; + } + + protected void cloneBuilder(TransactionErrorHandlerDefinition other) { + other.setTransactionManagerRef(getTransactionManagerRef()); + other.setTransactionTemplateRef(getTransactionTemplateRef()); + super.cloneBuilder(other); + } + public String getTransactionTemplateRef() { return transactionTemplateRef; }
