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 fc3020a28e331fc086f49c74745960976e8be82d
Author: Claus Ibsen <[email protected]>
AuthorDate: Tue Apr 5 16:22:25 2022 +0200

    CAMEL-16834: error handler in model DSL. WIP
---
 .../org/apache/camel/model/redeliveryPolicy.json   | 24 ++++++++---------
 .../camel/model/RedeliveryPolicyDefinition.java    | 24 ++++++++---------
 .../errorhandler/DeadLetterChannelDefinition.java  | 18 +++++++++++++
 .../DefaultErrorHandlerDefinition.java             |  3 +++
 .../reifier/errorhandler/ErrorHandlerReifier.java  | 31 +++++++++++++---------
 5 files changed, 64 insertions(+), 36 deletions(-)

diff --git 
a/core/camel-core-model/src/generated/resources/org/apache/camel/model/redeliveryPolicy.json
 
b/core/camel-core-model/src/generated/resources/org/apache/camel/model/redeliveryPolicy.json
index b4b43682a8a..d0475843b8f 100644
--- 
a/core/camel-core-model/src/generated/resources/org/apache/camel/model/redeliveryPolicy.json
+++ 
b/core/camel-core-model/src/generated/resources/org/apache/camel/model/redeliveryPolicy.json
@@ -13,28 +13,28 @@
   },
   "properties": {
     "maximumRedeliveries": { "kind": "attribute", "displayName": "Maximum 
Redeliveries", "required": false, "type": "integer", "javaType": 
"java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, 
"description": "Sets the maximum redeliveries x = redeliver at most x times 0 = 
no redeliveries -1 = redeliver forever" },
-    "redeliveryDelay": { "kind": "attribute", "displayName": "Redelivery 
Delay", "required": false, "type": "duration", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "description": "Sets 
the initial redelivery delay" },
+    "redeliveryDelay": { "kind": "attribute", "displayName": "Redelivery 
Delay", "required": false, "type": "duration", "javaType": "java.lang.String", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
"1000", "description": "Sets the initial redelivery delay" },
     "asyncDelayedRedelivery": { "kind": "attribute", "displayName": "Async 
Delayed Redelivery", "label": "advanced", "required": false, "type": "boolean", 
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Allow asynchronous 
delayed redelivery. The route, in particular the consumer's component, must 
support the Asynchronous Routing Engine (e.g. seda)." },
-    "backOffMultiplier": { "kind": "attribute", "displayName": "Back Off 
Multiplier", "required": false, "type": "number", "javaType": 
"java.lang.Double", "deprecated": false, "autowired": false, "secret": false, 
"description": "Sets the back off multiplier" },
+    "backOffMultiplier": { "kind": "attribute", "displayName": "Back Off 
Multiplier", "required": false, "type": "number", "javaType": 
"java.lang.Double", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "2.0", "description": "Sets the back off multiplier" },
     "useExponentialBackOff": { "kind": "attribute", "displayName": "Use 
Exponential Back Off", "label": "advanced", "required": false, "type": 
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "Turn on 
exponential backk off" },
-    "collisionAvoidanceFactor": { "kind": "attribute", "displayName": 
"Collision Avoidance Factor", "label": "advanced", "required": false, "type": 
"number", "javaType": "java.lang.Double", "deprecated": false, "autowired": 
false, "secret": false, "description": "Sets the collision avoidance factor" },
+    "collisionAvoidanceFactor": { "kind": "attribute", "displayName": 
"Collision Avoidance Factor", "label": "advanced", "required": false, "type": 
"number", "javaType": "java.lang.Double", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "0.15", "description": "Sets the 
collision avoidance factor" },
     "useCollisionAvoidance": { "kind": "attribute", "displayName": "Use 
Collision Avoidance", "label": "advanced", "required": false, "type": 
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "Turn on 
collision avoidance." },
-    "maximumRedeliveryDelay": { "kind": "attribute", "displayName": "Maximum 
Redelivery Delay", "required": false, "type": "duration", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Sets the maximum delay between redelivery" },
-    "retriesExhaustedLogLevel": { "kind": "attribute", "displayName": "Retries 
Exhausted Log Level", "label": "advanced", "required": false, "type": "object", 
"javaType": "org.apache.camel.LoggingLevel", "deprecated": false, "autowired": 
false, "secret": false, "description": "Sets the logging level to use when 
retries have been exhausted" },
-    "retryAttemptedLogLevel": { "kind": "attribute", "displayName": "Retry 
Attempted Log Level", "required": false, "type": "object", "javaType": 
"org.apache.camel.LoggingLevel", "deprecated": false, "autowired": false, 
"secret": false, "description": "Sets the logging level to use for logging 
retry attempts" },
-    "retryAttemptedLogInterval": { "kind": "attribute", "displayName": "Retry 
Attempted Log Interval", "label": "advanced", "required": false, "type": 
"integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": 
false, "secret": false, "description": "Sets the interval to use for logging 
retry attempts" },
-    "logRetryAttempted": { "kind": "attribute", "displayName": "Log Retry 
Attempted", "label": "advanced", "required": false, "type": "boolean", 
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Sets whether retry 
attempts should be logged or not. Can be used to include or reduce verbose." },
-    "logStackTrace": { "kind": "attribute", "displayName": "Log Stack Trace", 
"label": "advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Sets whether stack traces should be 
logged. Can be used to include or reduce verbose." },
+    "maximumRedeliveryDelay": { "kind": "attribute", "displayName": "Maximum 
Redelivery Delay", "required": false, "type": "duration", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": "60000", "description": "Sets the maximum delay between 
redelivery" },
+    "retriesExhaustedLogLevel": { "kind": "attribute", "displayName": "Retries 
Exhausted Log Level", "label": "advanced", "required": false, "type": "object", 
"javaType": "org.apache.camel.LoggingLevel", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "ERROR", "description": "Sets the 
logging level to use when retries have been exhausted" },
+    "retryAttemptedLogLevel": { "kind": "attribute", "displayName": "Retry 
Attempted Log Level", "required": false, "type": "object", "javaType": 
"org.apache.camel.LoggingLevel", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": "DEBUG", "description": "Sets the logging 
level to use for logging retry attempts" },
+    "retryAttemptedLogInterval": { "kind": "attribute", "displayName": "Retry 
Attempted Log Interval", "label": "advanced", "required": false, "type": 
"integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": "1", "description": "Sets the interval 
to use for logging retry attempts" },
+    "logRetryAttempted": { "kind": "attribute", "displayName": "Log Retry 
Attempted", "label": "advanced", "required": false, "type": "boolean", 
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Sets whether retry 
attempts should be logged or not. Can be used to include or reduce verbose." },
+    "logStackTrace": { "kind": "attribute", "displayName": "Log Stack Trace", 
"label": "advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": true, "description": "Sets whether stack traces should be 
logged. Can be used to include or reduce verbose." },
     "logRetryStackTrace": { "kind": "attribute", "displayName": "Log Retry 
Stack Trace", "label": "advanced", "required": false, "type": "boolean", 
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Sets whether stack 
traces should be logged when an retry attempt failed. Can be used to include or 
reduce verbose." },
     "logHandled": { "kind": "attribute", "displayName": "Log Handled", 
"label": "advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Sets whether handled exceptions should 
be logged or not. Can be used to include or reduce verbose." },
-    "logNewException": { "kind": "attribute", "displayName": "Log New 
Exception", "label": "advanced", "required": false, "type": "boolean", 
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Sets whether new 
exceptions should be logged or not. Can be used to include or reduce verbose. A 
new exception is an exception that was thrown while handling a previous 
exception." },
+    "logNewException": { "kind": "attribute", "displayName": "Log New 
Exception", "label": "advanced", "required": false, "type": "boolean", 
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": true, "description": "Sets whether new 
exceptions should be logged or not. Can be used to include or reduce verbose. A 
new exception is an exception that was thrown while handling a previous 
exception." },
     "logContinued": { "kind": "attribute", "displayName": "Log Continued", 
"required": false, "type": "boolean", "javaType": "java.lang.Boolean", 
"deprecated": false, "autowired": false, "secret": false, "defaultValue": 
false, "description": "Sets whether continued exceptions should be logged or 
not. Can be used to include or reduce verbose." },
-    "logExhausted": { "kind": "attribute", "displayName": "Log Exhausted", 
"label": "advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": false, "description": "Sets whether exhausted exceptions should 
be logged or not. Can be used to include or reduce verbose." },
+    "logExhausted": { "kind": "attribute", "displayName": "Log Exhausted", 
"label": "advanced", "required": false, "type": "boolean", "javaType": 
"java.lang.Boolean", "deprecated": false, "autowired": false, "secret": false, 
"defaultValue": true, "description": "Sets whether exhausted exceptions should 
be logged or not. Can be used to include or reduce verbose." },
     "logExhaustedMessageHistory": { "kind": "attribute", "displayName": "Log 
Exhausted Message History", "label": "advanced", "required": false, "type": 
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "Sets whether 
exhausted exceptions should be logged including message history or not 
(supports property placeholders). Can be used to include or reduce verbose." },
     "logExhaustedMessageBody": { "kind": "attribute", "displayName": "Log 
Exhausted Message Body", "label": "advanced", "required": false, "type": 
"boolean", "javaType": "java.lang.Boolean", "deprecated": false, "autowired": 
false, "secret": false, "defaultValue": false, "description": "Sets whether 
exhausted message body should be logged including message history or not 
(supports property placeholders). Can be used to include or reduce verbose. 
Requires logExhaustedMessageHistory to be  [...]
     "disableRedelivery": { "kind": "attribute", "displayName": "Disable 
Redelivery", "label": "advanced", "required": false, "type": "boolean", 
"javaType": "java.lang.Boolean", "deprecated": false, "autowired": false, 
"secret": false, "defaultValue": false, "description": "Disables redelivery 
(same as setting maximum redeliveries to 0)" },
     "delayPattern": { "kind": "attribute", "displayName": "Delay Pattern", 
"label": "advanced", "required": false, "type": "string", "javaType": 
"java.lang.String", "deprecated": false, "autowired": false, "secret": false, 
"description": "Sets the delay pattern with delay intervals." },
-    "allowRedeliveryWhileStopping": { "kind": "attribute", "displayName": 
"Allow Redelivery While Stopping", "label": "advanced", "required": false, 
"type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": false, "description": 
"Controls whether to allow redelivery while stopping\/shutting down a route 
that uses error handling." },
+    "allowRedeliveryWhileStopping": { "kind": "attribute", "displayName": 
"Allow Redelivery While Stopping", "label": "advanced", "required": false, 
"type": "boolean", "javaType": "java.lang.Boolean", "deprecated": false, 
"autowired": false, "secret": false, "defaultValue": true, "description": 
"Controls whether to allow redelivery while stopping\/shutting down a route 
that uses error handling." },
     "exchangeFormatterRef": { "kind": "attribute", "displayName": "Exchange 
Formatter Ref", "label": "advanced", "required": false, "type": "string", 
"javaType": "java.lang.String", "deprecated": false, "autowired": false, 
"secret": false, "description": "Sets the reference of the instance of 
org.apache.camel.spi.ExchangeFormatter to generate the log message from 
exchange." }
   }
 }
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 afdace5c24b..dfbc09903ad 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
@@ -36,40 +36,40 @@ public class RedeliveryPolicyDefinition implements 
Cloneable {
     @Metadata(javaType = "java.lang.Integer")
     private String maximumRedeliveries;
     @XmlAttribute
-    @Metadata(javaType = "java.time.Duration")
+    @Metadata(javaType = "java.time.Duration", defaultValue = "1000")
     private String redeliveryDelay;
     @XmlAttribute
     @Metadata(label = "advanced", javaType = "java.lang.Boolean")
     private String asyncDelayedRedelivery;
     @XmlAttribute
-    @Metadata(javaType = "java.lang.Double")
+    @Metadata(javaType = "java.lang.Double", defaultValue = "2.0")
     private String backOffMultiplier;
     @XmlAttribute
     @Metadata(label = "advanced", javaType = "java.lang.Boolean")
     private String useExponentialBackOff;
     @XmlAttribute
-    @Metadata(label = "advanced", javaType = "java.lang.Double")
+    @Metadata(label = "advanced", javaType = "java.lang.Double", defaultValue 
= "0.15")
     private String collisionAvoidanceFactor;
     @XmlAttribute
     @Metadata(label = "advanced", javaType = "java.lang.Boolean")
     private String useCollisionAvoidance;
     @XmlAttribute
-    @Metadata(javaType = "java.time.Duration")
+    @Metadata(javaType = "java.time.Duration", defaultValue = "60000")
     private String maximumRedeliveryDelay;
     @XmlAttribute
-    @Metadata(label = "advanced", javaType = "org.apache.camel.LoggingLevel")
+    @Metadata(label = "advanced", javaType = "org.apache.camel.LoggingLevel", 
defaultValue = "ERROR")
     private String retriesExhaustedLogLevel;
     @XmlAttribute
-    @Metadata(javaType = "org.apache.camel.LoggingLevel")
+    @Metadata(javaType = "org.apache.camel.LoggingLevel", defaultValue = 
"DEBUG")
     private String retryAttemptedLogLevel;
     @XmlAttribute
-    @Metadata(label = "advanced", javaType = "java.lang.Integer")
+    @Metadata(label = "advanced", javaType = "java.lang.Integer", defaultValue 
= "1")
     private String retryAttemptedLogInterval;
     @XmlAttribute
-    @Metadata(label = "advanced", javaType = "java.lang.Boolean")
+    @Metadata(label = "advanced", javaType = "java.lang.Boolean", defaultValue 
= "true")
     private String logRetryAttempted;
     @XmlAttribute
-    @Metadata(label = "advanced", javaType = "java.lang.Boolean")
+    @Metadata(label = "advanced", javaType = "java.lang.Boolean", defaultValue 
= "true")
     private String logStackTrace;
     @XmlAttribute
     @Metadata(label = "advanced", javaType = "java.lang.Boolean")
@@ -78,13 +78,13 @@ public class RedeliveryPolicyDefinition implements 
Cloneable {
     @Metadata(label = "advanced", javaType = "java.lang.Boolean")
     private String logHandled;
     @XmlAttribute
-    @Metadata(label = "advanced", javaType = "java.lang.Boolean")
+    @Metadata(label = "advanced", javaType = "java.lang.Boolean", defaultValue 
= "true")
     private String logNewException;
     @XmlAttribute
     @Metadata(javaType = "java.lang.Boolean")
     private String logContinued;
     @XmlAttribute
-    @Metadata(label = "advanced", javaType = "java.lang.Boolean")
+    @Metadata(label = "advanced", javaType = "java.lang.Boolean", defaultValue 
= "true")
     private String logExhausted;
     @XmlAttribute
     @Metadata(label = "advanced", javaType = "java.lang.Boolean")
@@ -99,7 +99,7 @@ public class RedeliveryPolicyDefinition implements Cloneable {
     @Metadata(label = "advanced")
     private String delayPattern;
     @XmlAttribute
-    @Metadata(label = "advanced", javaType = "java.lang.Boolean")
+    @Metadata(label = "advanced", javaType = "java.lang.Boolean", defaultValue 
= "true")
     private String allowRedeliveryWhileStopping;
     @XmlAttribute
     @Metadata(label = "advanced")
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 75a01a5804e..b9cd738814f 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
@@ -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.Endpoint;
 import org.apache.camel.builder.ErrorHandlerBuilder;
 import org.apache.camel.spi.Metadata;
 
@@ -40,6 +41,23 @@ public class DeadLetterChannelDefinition extends 
DefaultErrorHandlerDefinition {
     @Metadata(defaultValue = "true")
     private String deadLetterHandleNewException;
 
+    public DeadLetterChannelDefinition() {
+        // DLC do not log exhausted by default
+        getRedeliveryPolicy().setLogExhausted("false");
+    }
+
+    public DeadLetterChannelDefinition(Endpoint deadLetter) {
+        setDeadLetterUri(deadLetter.getEndpointUri());
+        // DLC do not log exhausted by default
+        getRedeliveryPolicy().setLogExhausted("false");
+    }
+
+    public DeadLetterChannelDefinition(String uri) {
+        setDeadLetterUri(uri);
+        // DLC do not log exhausted by default
+        getRedeliveryPolicy().setLogExhausted("false");
+    }
+
     public String getDeadLetterUri() {
         return deadLetterUri;
     }
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 a2f3d918ed8..60501a5d008 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
@@ -395,6 +395,9 @@ public class DefaultErrorHandlerDefinition extends 
BaseErrorHandlerDefinition im
     }
 
     public RedeliveryPolicyDefinition getRedeliveryPolicy() {
+        if (redeliveryPolicy == null) {
+            redeliveryPolicy = new RedeliveryPolicyDefinition();
+        }
         return redeliveryPolicy;
     }
 
diff --git 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/errorhandler/ErrorHandlerReifier.java
 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/errorhandler/ErrorHandlerReifier.java
index 4b163bdd563..400d45a6d48 100644
--- 
a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/errorhandler/ErrorHandlerReifier.java
+++ 
b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/errorhandler/ErrorHandlerReifier.java
@@ -261,35 +261,42 @@ public abstract class ErrorHandlerReifier<T extends 
ErrorHandlerFactory> extends
         }
         Map<RedeliveryOption, String> policy = new HashMap<>();
         setOption(policy, RedeliveryOption.maximumRedeliveries, 
definition.getMaximumRedeliveries());
-        setOption(policy, RedeliveryOption.redeliveryDelay, 
definition.getRedeliveryDelay());
+        setOption(policy, RedeliveryOption.redeliveryDelay, 
definition.getRedeliveryDelay(), "1000");
         setOption(policy, RedeliveryOption.asyncDelayedRedelivery, 
definition.getAsyncDelayedRedelivery());
-        setOption(policy, RedeliveryOption.backOffMultiplier, 
definition.getBackOffMultiplier());
+        setOption(policy, RedeliveryOption.backOffMultiplier, 
definition.getBackOffMultiplier(), "2");
         setOption(policy, RedeliveryOption.useExponentialBackOff, 
definition.getUseExponentialBackOff());
-        setOption(policy, RedeliveryOption.collisionAvoidanceFactor, 
definition.getCollisionAvoidanceFactor());
+        setOption(policy, RedeliveryOption.collisionAvoidanceFactor, 
definition.getCollisionAvoidanceFactor(), "0.15");
         setOption(policy, RedeliveryOption.useCollisionAvoidance, 
definition.getUseCollisionAvoidance());
-        setOption(policy, RedeliveryOption.maximumRedeliveryDelay, 
definition.getMaximumRedeliveryDelay());
-        setOption(policy, RedeliveryOption.retriesExhaustedLogLevel, 
definition.getRetriesExhaustedLogLevel());
-        setOption(policy, RedeliveryOption.retryAttemptedLogLevel, 
definition.getRetryAttemptedLogLevel());
-        setOption(policy, RedeliveryOption.retryAttemptedLogInterval, 
definition.getRetryAttemptedLogInterval());
-        setOption(policy, RedeliveryOption.logRetryAttempted, 
definition.getLogRetryAttempted());
-        setOption(policy, RedeliveryOption.logStackTrace, 
definition.getLogStackTrace());
+        setOption(policy, RedeliveryOption.maximumRedeliveryDelay, 
definition.getMaximumRedeliveryDelay(), "60000");
+        setOption(policy, RedeliveryOption.retriesExhaustedLogLevel, 
definition.getRetriesExhaustedLogLevel(), "ERROR");
+        setOption(policy, RedeliveryOption.retryAttemptedLogLevel, 
definition.getRetryAttemptedLogLevel(), "DEBUG");
+        setOption(policy, RedeliveryOption.retryAttemptedLogInterval, 
definition.getRetryAttemptedLogInterval(), "1");
+        setOption(policy, RedeliveryOption.logRetryAttempted, 
definition.getLogRetryAttempted(), "true");
+        setOption(policy, RedeliveryOption.logStackTrace, 
definition.getLogStackTrace(), "true");
         setOption(policy, RedeliveryOption.logRetryStackTrace, 
definition.getLogRetryStackTrace());
         setOption(policy, RedeliveryOption.logHandled, 
definition.getLogHandled());
-        setOption(policy, RedeliveryOption.logNewException, 
definition.getLogNewException());
+        setOption(policy, RedeliveryOption.logNewException, 
definition.getLogNewException(), "true");
         setOption(policy, RedeliveryOption.logContinued, 
definition.getLogContinued());
-        setOption(policy, RedeliveryOption.logExhausted, 
definition.getLogExhausted());
+        setOption(policy, RedeliveryOption.logExhausted, 
definition.getLogExhausted(), "true");
         setOption(policy, RedeliveryOption.logExhaustedMessageHistory, 
definition.getLogExhaustedMessageHistory());
         setOption(policy, RedeliveryOption.logExhaustedMessageBody, 
definition.getLogExhaustedMessageBody());
         setOption(policy, RedeliveryOption.disableRedelivery, 
definition.getDisableRedelivery());
         setOption(policy, RedeliveryOption.delayPattern, 
definition.getDelayPattern());
-        setOption(policy, RedeliveryOption.allowRedeliveryWhileStopping, 
definition.getAllowRedeliveryWhileStopping());
+        setOption(policy, RedeliveryOption.allowRedeliveryWhileStopping, 
definition.getAllowRedeliveryWhileStopping(), "true");
         setOption(policy, RedeliveryOption.exchangeFormatterRef, 
definition.getExchangeFormatterRef());
         return policy;
     }
 
     private static void setOption(Map<RedeliveryOption, String> policy, 
RedeliveryOption option, Object value) {
+        setOption(policy, option, value, null);
+    }
+
+    private static void setOption(
+            Map<RedeliveryOption, String> policy, RedeliveryOption option, 
Object value, Object defaultValue) {
         if (value != null) {
             policy.put(option, value.toString());
+        } else if (defaultValue != null) {
+            policy.put(option, defaultValue.toString());
         }
     }
 

Reply via email to