Author: davsclaus
Date: Sun Feb 22 14:28:12 2009
New Revision: 746709

URL: http://svn.apache.org/viewvc?rev=746709&view=rev
Log:
CAMEL-1368: onRedelivery now support per exception clause, instead of only 
global. Using CamelCase for some header keys.

Added:
    
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelOnExceptionOnRedeliveryTest.java
      - copied, changed from r746489, 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelOnRedeliveryTest.java
    
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringDeadLetterChannelOnExceptionOnRedeliveryTest.java
      - copied, changed from r746448, 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/RedeliveryPolicyReTest.java
    
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/onexception/DeadLetterChannelOnExceptionOnRedeliveryTest.xml
      - copied, changed from r746448, 
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/onexception/RedeliveryPolicyRefTest.xml
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/model/ExceptionType.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java
    
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Pipeline.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/issues/BelasThreadErrorHandlerIssue794Test.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/issues/ThreadErrorHandlerTest.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/model/GenerateXmFromCamelContextlTest.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelExceptionCausePropagatedTest.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelOnRedeliveryTest.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelRedeliveryDelayPatternTest.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelRedeliveryTest.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelTest.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RedeliveryPolicyPerExceptionTest.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/InterceptAlterMessageBeforeRedeliveryTest.java
    
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionRetryUntilTest.java
    
camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsRedeliveryWithInitialRedeliveryDelayTest.java
    
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionInterceptor.java
    
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/DeadLetterChannelRedeliveryConfigTest.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java?rev=746709&r1=746708&r2=746709&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java 
(original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/Exchange.java Sun Feb 
22 14:28:12 2009
@@ -30,11 +30,22 @@
  */
 public interface Exchange {
 
-    String CHARSET_NAME = "org.apache.camel.Exchange.CharsetName";
+    String AGGREGATED_COUNT = "CamelAggregatedCount";
 
-    String AGGREGATED_COUNT = "org.apache.camel.Exchange.AggregatedCount";
+    String CHARSET_NAME = "CamelCharsetName";
+
+    String EXCEPTION_CAUGHT = "CamelExceptionCaught";
+
+    String EXCEPTION_HANDLED = "CamelExceptionHandled";
+
+    String FAILURE_HANDLED = "CamelFailureHandled";
+
+    String REDELIVERED = "CamelRedelivered";
+
+    String REDELIVERY_COUNTER = "CamelRedeliveryCounter";
+
+    String TRANSACTED = "CamelTransacted";
 
-    String EXCEPTION_HANDLED_PROPERTY = "CamelExceptionHandled";
 
     /**
      * Returns the {...@link ExchangePattern} (MEP) of this exchange.

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java?rev=746709&r1=746708&r2=746709&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
 Sun Feb 22 14:28:12 2009
@@ -152,7 +152,7 @@
             public Object evaluate(Exchange exchange) {
                 Throwable exception = exchange.getException();
                 if (exception == null) {
-                    exception = 
exchange.getProperty(DeadLetterChannel.EXCEPTION_CAUSE_PROPERTY, 
Throwable.class);
+                    exception = 
exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Throwable.class);
                 }
                 return exception;
             }
@@ -175,7 +175,7 @@
             public Object evaluate(Exchange exchange) {
                 Throwable exception = exchange.getException();
                 if (exception == null) {
-                    exception = 
exchange.getProperty(DeadLetterChannel.EXCEPTION_CAUSE_PROPERTY, 
Throwable.class);
+                    exception = 
exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Throwable.class);
                 }
                 return exception != null ? exception.getMessage() : null;
             }
@@ -451,6 +451,7 @@
     /**
      * Returns an expression which converts the given expression to the given 
type
      */
+    @SuppressWarnings("unchecked")
     public static Expression convertToExpression(final Expression expression, 
final Class type) {
         return new ExpressionAdapter() {
             public Object evaluate(Exchange exchange) {

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java?rev=746709&r1=746708&r2=746709&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java 
(original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/impl/DefaultExchange.java 
Sun Feb 22 14:28:12 2009
@@ -313,8 +313,8 @@
     }
 
     public boolean isTransacted() {
-        ExchangeProperty<?> property = ExchangeProperty.get("transacted");
-        return property != null && property.get(this) == Boolean.TRUE;
+        Boolean transacted = getProperty(TRANSACTED, Boolean.class);
+        return transacted != null && transacted;
     }
 
     public UnitOfWork getUnitOfWork() {

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/ExceptionType.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/model/ExceptionType.java?rev=746709&r1=746708&r2=746709&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/ExceptionType.java 
(original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/model/ExceptionType.java 
Sun Feb 22 14:28:12 2009
@@ -26,6 +26,7 @@
 import javax.xml.bind.annotation.XmlElementRef;
 import javax.xml.bind.annotation.XmlRootElement;
 import javax.xml.bind.annotation.XmlTransient;
+import javax.xml.bind.annotation.XmlAttribute;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Expression;
@@ -61,6 +62,8 @@
     private RedeliveryPolicyType redeliveryPolicy;
     @XmlElement(name = "handled", required = false)
     private ExpressionSubElementType handled;
+    @XmlAttribute(name = "onRedeliveryRef", required = false)
+    private String onRedeliveryRef;
     @XmlElementRef
     private List<ProcessorType> outputs = new ArrayList<ProcessorType>();
     @XmlTransient
@@ -71,6 +74,8 @@
     private Predicate handledPolicy;
     @XmlTransient
     private Predicate retryUntilPolicy;
+    @XmlTransient
+    private Processor onRedelivery;
 
     public ExceptionType() {
     }
@@ -115,6 +120,11 @@
         errorHandler = routeContext.createProcessor(this);
         ErrorHandlerBuilder builder = 
routeContext.getRoute().getErrorHandlerBuilder();
         builder.addErrorHandlers(this);
+
+        // lookup onRedelivery if ref is provided
+        if (ObjectHelper.isNotEmpty(onRedeliveryRef)) {
+            onRedelivery = routeContext.lookup(onRedeliveryRef, 
Processor.class);
+        }
     }
 
     @Override
@@ -331,6 +341,16 @@
         return this;
     }
 
+    /**
+     * Sets a processor that should be processed <b>before</b> a redelivey 
attempt.
+     * <p/>
+     * Can be used to change the {...@link org.apache.camel.Exchange} 
<b>before</b> its being redelivered.
+     */
+    public ExceptionType onRedelivery(Processor processor) {
+        setOnRedelivery(processor);
+        return this;
+    }
+
     // Properties
     //-------------------------------------------------------------------------
     public List<ProcessorType> getOutputs() {
@@ -412,6 +432,23 @@
         this.retryUntilPolicy = retryUntilPolicy;
     }
 
+    public Processor getOnRedelivery() {
+        return onRedelivery;
+    }
+
+    public void setOnRedelivery(Processor onRedelivery) {
+        this.onRedelivery = onRedelivery;
+    }
+
+    public String getOnRedeliveryRef() {
+        return onRedeliveryRef;
+    }
+
+    public void setOnRedeliveryRef(String onRedeliveryRef) {
+        this.onRedeliveryRef = onRedeliveryRef;
+    }
+
+
     // Implementation methods
     //-------------------------------------------------------------------------
     protected RedeliveryPolicyType getOrCreateRedeliveryPolicy() {

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java?rev=746709&r1=746708&r2=746709&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java
 (original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/DeadLetterChannel.java
 Sun Feb 22 14:28:12 2009
@@ -45,14 +45,8 @@
  * @version $Revision$
  */
 public class DeadLetterChannel extends ErrorHandlerSupport implements 
AsyncProcessor {
-    public static final String REDELIVERY_COUNTER = 
"org.apache.camel.RedeliveryCounter";
-    public static final String REDELIVERED = "org.apache.camel.Redelivered";
-    public static final String EXCEPTION_CAUSE_PROPERTY = 
"CamelCauseException";
-    public static final String CAUGHT_EXCEPTION_HEADER = 
"org.apache.camel.CamelCaughtException";    
-    
     private static final transient Log LOG = 
LogFactory.getLog(DeadLetterChannel.class);
-    private static final String FAILURE_HANDLED_PROPERTY = 
DeadLetterChannel.class.getName() + ".FAILURE_HANDLED";
-    
+
     private static Timer timer = new Timer();
     private Processor output;
     private Processor deadLetter;
@@ -71,6 +65,7 @@
         // default behavior which can be overloaded on a per exception basis
         RedeliveryPolicy currentRedeliveryPolicy = redeliveryPolicy;
         Processor failureProcessor = deadLetter;
+        Processor onRedeliveryProcessor = redeliveryProcessor;
     }
     
     private class RedeliverTimerTask extends TimerTask {
@@ -267,8 +262,9 @@
     
     private void handleException(Exchange exchange, RedeliveryData data) {
         Throwable e = exchange.getException();
-        // set the original caused exception
-        exchange.setProperty(EXCEPTION_CAUSE_PROPERTY, e);
+
+        // store the original caused exception in a property, so we can 
restore it later
+        exchange.setProperty(Exchange.EXCEPTION_CAUGHT, e);
 
         // find the error handler to use (if any)
         ExceptionType exceptionPolicy = getExceptionPolicy(exchange, e);
@@ -276,10 +272,17 @@
             data.currentRedeliveryPolicy = 
exceptionPolicy.createRedeliveryPolicy(exchange.getContext(), 
data.currentRedeliveryPolicy);
             data.handledPredicate = exceptionPolicy.getHandledPolicy();
             data.retryUntilPredicate = exceptionPolicy.getRetryUntilPolicy();
+
+            // route specific failure handler?
             Processor processor = exceptionPolicy.getErrorHandler();
             if (processor != null) {
                 data.failureProcessor = processor;
             }
+            // route specific on redelivey?
+            processor = exceptionPolicy.getOnRedelivery();
+            if (processor != null) {
+                data.onRedeliveryProcessor = processor;
+            }
         }
 
         String msg = "Failed delivery for exchangeId: " + 
exchange.getExchangeId()
@@ -295,15 +298,15 @@
      */
     private void deliverToRedeliveryProcessor(final Exchange exchange, final 
AsyncCallback callback,
                                             final RedeliveryData data) {
-        if (redeliveryProcessor == null) {
+        if (data.onRedeliveryProcessor == null) {
             return;
         }
 
         if (LOG.isTraceEnabled()) {
-            LOG.trace("RedeliveryProcessor " + redeliveryProcessor + " is 
processing Exchange: " + exchange + " before its redelivered");
+            LOG.trace("RedeliveryProcessor " + data.onRedeliveryProcessor + " 
is processing Exchange: " + exchange + " before its redelivered");
         }
 
-        AsyncProcessor afp = 
AsyncProcessorTypeConverter.convert(redeliveryProcessor);
+        AsyncProcessor afp = 
AsyncProcessorTypeConverter.convert(data.onRedeliveryProcessor);
         afp.process(exchange, new AsyncCallback() {
             public void done(boolean sync) {
                 LOG.trace("Redelivery processor done");
@@ -324,6 +327,7 @@
         AsyncProcessor afp = 
AsyncProcessorTypeConverter.convert(data.failureProcessor);
         boolean sync = afp.process(exchange, new AsyncCallback() {
             public void done(boolean sync) {
+                LOG.trace("Fault processor done");
                 restoreExceptionOnExchange(exchange, data.handledPredicate);
                 callback.done(data.sync);
             }
@@ -340,13 +344,13 @@
     // 
-------------------------------------------------------------------------
 
     public static boolean isFailureHandled(Exchange exchange) {
-        return exchange.getProperty(FAILURE_HANDLED_PROPERTY) != null
-            || exchange.getIn().getHeader(CAUGHT_EXCEPTION_HEADER) != null;
+        Boolean handled = exchange.getProperty(Exchange.FAILURE_HANDLED, 
Boolean.class);
+        return handled != null && handled;
     }
 
     public static void setFailureHandled(Exchange exchange) {
-        exchange.setProperty(FAILURE_HANDLED_PROPERTY, 
exchange.getException());
-        exchange.getIn().setHeader(CAUGHT_EXCEPTION_HEADER, 
exchange.getException());
+        exchange.setProperty(Exchange.FAILURE_HANDLED, Boolean.TRUE);
+        // clear exception since its failure handled
         exchange.setException(null);
     }
 
@@ -398,12 +402,12 @@
                 LOG.debug("This exchange is not handled so its marked as 
failed: " + exchange);
             }
             // exception not handled, put exception back in the exchange
-            
exchange.setException(exchange.getProperty(FAILURE_HANDLED_PROPERTY, 
Throwable.class));
+            
exchange.setException(exchange.getProperty(Exchange.EXCEPTION_CAUGHT, 
Throwable.class));
         } else {
             if (LOG.isDebugEnabled()) {
                 LOG.debug("This exchange is handled so its marked as not 
failed: " + exchange);
             }
-            exchange.setProperty(Exchange.EXCEPTION_HANDLED_PROPERTY, 
Boolean.TRUE);
+            exchange.setProperty(Exchange.EXCEPTION_HANDLED, Boolean.TRUE);
         }
     }
 
@@ -431,13 +435,13 @@
      */
     protected int incrementRedeliveryCounter(Exchange exchange, Throwable e) {
         Message in = exchange.getIn();
-        Integer counter = in.getHeader(REDELIVERY_COUNTER, Integer.class);
+        Integer counter = in.getHeader(Exchange.REDELIVERY_COUNTER, 
Integer.class);
         int next = 1;
         if (counter != null) {
             next = counter + 1;
         }
-        in.setHeader(REDELIVERY_COUNTER, next);
-        in.setHeader(REDELIVERED, Boolean.TRUE);
+        in.setHeader(Exchange.REDELIVERY_COUNTER, next);
+        in.setHeader(Exchange.REDELIVERED, Boolean.TRUE);
         return next;
     }
 
@@ -446,16 +450,16 @@
      */
     private void decrementRedeliveryCounter(Exchange exchange) {
         Message in = exchange.getIn();
-        Integer counter = in.getHeader(REDELIVERY_COUNTER, Integer.class);
+        Integer counter = in.getHeader(Exchange.REDELIVERY_COUNTER, 
Integer.class);
         if (counter != null) {
             int prev = counter - 1;
-            in.setHeader(REDELIVERY_COUNTER, prev);
+            in.setHeader(Exchange.REDELIVERY_COUNTER, prev);
             // set boolean flag according to counter
-            in.setHeader(REDELIVERED, prev > 0 ? Boolean.TRUE : Boolean.FALSE);
+            in.setHeader(Exchange.REDELIVERED, prev > 0 ? Boolean.TRUE : 
Boolean.FALSE);
         } else {
             // not redelivered
-            in.setHeader(REDELIVERY_COUNTER, 0);
-            in.setHeader(REDELIVERED, Boolean.FALSE);
+            in.setHeader(Exchange.REDELIVERY_COUNTER, 0);
+            in.setHeader(Exchange.REDELIVERED, Boolean.FALSE);
         }
     }
 

Modified: 
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Pipeline.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Pipeline.java?rev=746709&r1=746708&r2=746709&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Pipeline.java 
(original)
+++ 
camel/trunk/camel-core/src/main/java/org/apache/camel/processor/Pipeline.java 
Sun Feb 22 14:28:12 2009
@@ -64,7 +64,7 @@
         while (true) {
             boolean exceptionHandled = hasExceptionBeenHandled(nextExchange);
             if (nextExchange.isFailed() || exceptionHandled) {
-                // The Exchange.EXCEPTION_HANDLED_PROPERTY property is only 
set if satisfactory handling was done 
+                // The Exchange.EXCEPTION_HANDLED property is only set if 
satisfactory handling was done
                 //  by the error handler.  It's still an exception, the 
exchange still failed.
                 if (LOG.isDebugEnabled()) {
                     LOG.debug("Message exchange has failed so breaking out of 
pipeline: " + nextExchange
@@ -126,7 +126,7 @@
 
                     boolean exceptionHandled = 
hasExceptionBeenHandled(nextExchange);
                     if (nextExchange.isFailed() || exceptionHandled) {
-                        // The Exchange.EXCEPTION_HANDLED_PROPERTY property is 
only set if satisfactory handling was done
+                        // The Exchange.EXCEPTION_HANDLED property is only set 
if satisfactory handling was done
                         //  by the error handler.  It's still an exception, 
the exchange still failed.
                         if (LOG.isDebugEnabled()) {
                             LOG.debug("Message exchange has failed so breaking 
out of pipeline: " + nextExchange
@@ -152,7 +152,7 @@
 
 
     private static boolean hasExceptionBeenHandled(Exchange nextExchange) {
-        return 
Boolean.TRUE.equals(nextExchange.getProperty(Exchange.EXCEPTION_HANDLED_PROPERTY));
+        return 
Boolean.TRUE.equals(nextExchange.getProperty(Exchange.EXCEPTION_HANDLED));
     }
 
     /**

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/issues/BelasThreadErrorHandlerIssue794Test.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/issues/BelasThreadErrorHandlerIssue794Test.java?rev=746709&r1=746708&r2=746709&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/issues/BelasThreadErrorHandlerIssue794Test.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/issues/BelasThreadErrorHandlerIssue794Test.java
 Sun Feb 22 14:28:12 2009
@@ -35,8 +35,8 @@
         // We expect the exchange here after 1 delivery and 2 re-deliveries
         MockEndpoint mock = getMockEndpoint("mock:noThread");
         mock.expectedMessageCount(1);
-        
mock.message(0).header("org.apache.camel.Redelivered").isEqualTo(Boolean.TRUE);
-        
mock.message(0).header("org.apache.camel.RedeliveryCounter").isEqualTo(2);
+        mock.message(0).header("CamelRedelivered").isEqualTo(Boolean.TRUE);
+        mock.message(0).header("CamelRedeliveryCounter").isEqualTo(2);
 
         try {
             template.sendBody("direct:inNoThread", "Hello World");
@@ -56,8 +56,8 @@
         // We expect the exchange here after 1 delivery and 2 re-deliveries
         MockEndpoint mock = getMockEndpoint("mock:beforeThread");
         mock.expectedMessageCount(1);
-        
mock.message(0).header("org.apache.camel.Redelivered").isEqualTo(Boolean.TRUE);
-        
mock.message(0).header("org.apache.camel.RedeliveryCounter").isEqualTo(2);
+        mock.message(0).header("CamelRedelivered").isEqualTo(Boolean.TRUE);
+        mock.message(0).header("CamelRedeliveryCounter").isEqualTo(2);
 
         try {
             template.sendBody("direct:inBeforeThread", "Hello World");

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/issues/ThreadErrorHandlerTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/issues/ThreadErrorHandlerTest.java?rev=746709&r1=746708&r2=746709&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/issues/ThreadErrorHandlerTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/issues/ThreadErrorHandlerTest.java
 Sun Feb 22 14:28:12 2009
@@ -30,8 +30,8 @@
     public void testThreadErrorHandler() throws Exception {
         MockEndpoint mock = getMockEndpoint("mock:result");
         mock.expectedMessageCount(1);
-        
mock.message(0).header("org.apache.camel.Redelivered").isEqualTo(Boolean.TRUE);
-        
mock.message(0).header("org.apache.camel.RedeliveryCounter").isEqualTo(2);
+        mock.message(0).header("CamelRedelivered").isEqualTo(Boolean.TRUE);
+        mock.message(0).header("CamelRedeliveryCounter").isEqualTo(2);
 
         try {
             template.sendBody("direct:in", "Hello World");

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/model/GenerateXmFromCamelContextlTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/model/GenerateXmFromCamelContextlTest.java?rev=746709&r1=746708&r2=746709&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/model/GenerateXmFromCamelContextlTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/model/GenerateXmFromCamelContextlTest.java
 Sun Feb 22 14:28:12 2009
@@ -34,7 +34,7 @@
         assertEquals("Size of list " + list, 1, list.size());
         RouteType routeType = list.get(0);
 
-        System.out.println("Found route: " + routeType);
+        log.info("Found route: " + routeType);
 
         // now lets marshall it!
         dump(routeType);

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelExceptionCausePropagatedTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelExceptionCausePropagatedTest.java?rev=746709&r1=746708&r2=746709&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelExceptionCausePropagatedTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelExceptionCausePropagatedTest.java
 Sun Feb 22 14:28:12 2009
@@ -17,6 +17,7 @@
 package org.apache.camel.processor;
 
 import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
 import org.apache.camel.builder.ProcessorBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
@@ -31,7 +32,7 @@
         MockEndpoint successEndpoint = getMockEndpoint("mock:success");
 
         failedEndpoint.expectedBodiesReceived(body);
-        
failedEndpoint.message(0).header(DeadLetterChannel.CAUGHT_EXCEPTION_HEADER)
+        failedEndpoint.message(0).header(Exchange.EXCEPTION_CAUGHT)
             .isEqualTo(RUNTIME_EXCEPTION);
         failedEndpoint.expectedMessageCount(1);
 

Copied: 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelOnExceptionOnRedeliveryTest.java
 (from r746489, 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelOnRedeliveryTest.java)
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelOnExceptionOnRedeliveryTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelOnExceptionOnRedeliveryTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelOnRedeliveryTest.java&r1=746489&r2=746709&rev=746709&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelOnRedeliveryTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelOnExceptionOnRedeliveryTest.java
 Sun Feb 22 14:28:12 2009
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.processor;
 
+import java.io.IOException;
+
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
@@ -23,13 +25,14 @@
 import org.apache.camel.component.mock.MockEndpoint;
 
 /**
- * Unit test for testing possibility to modify exchange before redelivering
+ * Unit test for testing possibility to modify exchange before redelivering 
specific
+ * per on exception
  */
-public class DeadLetterChannelOnRedeliveryTest extends ContextTestSupport {
+public class DeadLetterChannelOnExceptionOnRedeliveryTest extends 
ContextTestSupport {
 
     static int counter;
 
-    public void testOnExceptionAlterMessageBeforeRedelivery() throws Exception 
{
+    public void testGlobalOnRedelivery() throws Exception {
         MockEndpoint mock = getMockEndpoint("mock:result");
         mock.expectedBodiesReceived("Hello World123");
 
@@ -38,12 +41,12 @@
         assertMockEndpointsSatisfied();
     }
 
-    public void xxxtestOnExceptionAlterMessageWithHeadersBeforeRedelivery() 
throws Exception {
+    public void testRouteSpecificOnRedelivery() throws Exception {
         MockEndpoint mock = getMockEndpoint("mock:result");
-        mock.expectedBodiesReceived("Hello World123");
-        mock.expectedHeaderReceived("foo", "123");
+        mock.expectedBodiesReceived("Hello World");
+        mock.message(0).header("Timeout").isEqualTo(5000);
 
-        template.sendBodyAndHeader("direct:start", "Hello World", "foo", 
"123");
+        template.sendBody("direct:io", "Hello World");
 
         assertMockEndpointsSatisfied();
     }
@@ -60,6 +63,12 @@
             @Override
             public void configure() throws Exception {
                 // START SNIPPET: e1
+                // when we redeliver caused by an IOException we want to do 
some special
+                // code before the redeliver attempt
+                onException(IOException.class).onRedelivery(new 
MyIORedeliverPrcessor());
+                // END SNIPPET: e1
+
+                // START SNIPPET: e2
                 // we configure our Dead Letter Channel to invoke
                 // MyRedeliveryProcessor before a redelivery is
                 // attempted. This allows us to alter the message before
@@ -67,26 +76,20 @@
                         .onRedelivery(new MyRedeliverPrcessor())
                         // setting delay to zero is just to make unit teting 
faster
                         .delay(0L));
-                // END SNIPPET: e1
+                // END SNIPPET: e2
 
 
-                from("direct:start").process(new Processor() {
-                    public void process(Exchange exchange) throws Exception {
-                        // force some error so Camel will do redelivery
-                        if (++counter <= 3) {
-                            throw new IllegalArgumentException("Forced by unit 
test");
-                        }
-                    }
-                }).to("mock:result");
+                from("direct:start").process(new 
ThrowExceptionProcessor()).to("mock:result");
 
+                from("direct:io").process(new 
ThrowIOExceptionProcessor()).to("mock:result");
             }
         };
     }
 
-    // START SNIPPET: e2
+    // START SNIPPET: e3
     // This is our processor that is executed before every redelivery attempt
     // here we can do what we want in the java code, such as altering the 
message
-    public class MyRedeliverPrcessor implements Processor {
+    public static class MyRedeliverPrcessor implements Processor {
 
         public void process(Exchange exchange) throws Exception {
             // the message is being redelivered so we can alter it
@@ -94,12 +97,48 @@
             // we just append the redelivery counter to the body
             // you can of course do all kind of stuff instead
             String body = exchange.getIn().getBody(String.class);
-            int count = 
exchange.getIn().getHeader("org.apache.camel.RedeliveryCounter", Integer.class);
+            int count = exchange.getIn().getHeader("CamelRedeliveryCounter", 
Integer.class);
 
             exchange.getIn().setBody(body + count);
         }
     }
-    // END SNIPPET: e2
+    // END SNIPPET: e3
+
+    // START SNIPPET: e4
+    // This is our processor that is executed before IOException redeliver 
attempt
+    // here we can do what we want in the java code, such as altering the 
message
+
+    public static class MyIORedeliverPrcessor implements Processor {
+
+        public void process(Exchange exchange) throws Exception {
+            // just for show and tell, here we set a special header to instruct
+            // the receive a given timeout value
+            exchange.getIn().setHeader("Timeout", 5000);
+        }
+    }
+    // END SNIPPET: e4
+
+    public static class ThrowExceptionProcessor implements Processor {
+
+        public void process(Exchange exchange) throws Exception {
+            // force some error so Camel will do redelivery
+            if (++counter <= 3) {
+                throw new IllegalArgumentException("Forced by unit test");
+            }
+
+        }
+    }
+
+    public static class ThrowIOExceptionProcessor implements Processor {
+
+        public void process(Exchange exchange) throws Exception {
+            // force some error so Camel will do redelivery
+            if (++counter <= 3) {
+                throw new IOException("Cannot connect");
+            }
+
+        }
+    }
 
 
 }
\ No newline at end of file

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelOnRedeliveryTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelOnRedeliveryTest.java?rev=746709&r1=746708&r2=746709&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelOnRedeliveryTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelOnRedeliveryTest.java
 Sun Feb 22 14:28:12 2009
@@ -94,7 +94,7 @@
             // we just append the redelivery counter to the body
             // you can of course do all kind of stuff instead
             String body = exchange.getIn().getBody(String.class);
-            int count = 
exchange.getIn().getHeader("org.apache.camel.RedeliveryCounter", Integer.class);
+            int count = exchange.getIn().getHeader("CamelRedeliveryCounter", 
Integer.class);
 
             exchange.getIn().setBody(body + count);
         }

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelRedeliveryDelayPatternTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelRedeliveryDelayPatternTest.java?rev=746709&r1=746708&r2=746709&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelRedeliveryDelayPatternTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelRedeliveryDelayPatternTest.java
 Sun Feb 22 14:28:12 2009
@@ -36,8 +36,8 @@
         // We expect the exchange here after 1 delivery and 2 re-deliveries
         MockEndpoint mock = getMockEndpoint("mock:error");
         mock.expectedMessageCount(1);
-        
mock.message(0).header("org.apache.camel.Redelivered").isEqualTo(Boolean.TRUE);
-        
mock.message(0).header("org.apache.camel.RedeliveryCounter").isEqualTo(3);
+        mock.message(0).header("CamelRedelivered").isEqualTo(Boolean.TRUE);
+        mock.message(0).header("CamelRedeliveryCounter").isEqualTo(3);
 
         long start = System.currentTimeMillis();
         try {

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelRedeliveryTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelRedeliveryTest.java?rev=746709&r1=746708&r2=746709&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelRedeliveryTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelRedeliveryTest.java
 Sun Feb 22 14:28:12 2009
@@ -36,8 +36,8 @@
         // We expect the exchange here after 1 delivery and 2 re-deliveries
         MockEndpoint mock = getMockEndpoint("mock:error");
         mock.expectedMessageCount(1);
-        
mock.message(0).header("org.apache.camel.Redelivered").isEqualTo(Boolean.TRUE);
-        
mock.message(0).header("org.apache.camel.RedeliveryCounter").isEqualTo(2);
+        mock.message(0).header("CamelRedelivered").isEqualTo(Boolean.TRUE);
+        mock.message(0).header("CamelRedeliveryCounter").isEqualTo(2);
 
         try {
             template.sendBody("direct:start", "Hello World");
@@ -56,8 +56,8 @@
         // We expect the exchange here after 1 delivery
         MockEndpoint mock = getMockEndpoint("mock:no");
         mock.expectedMessageCount(1);
-        
mock.message(0).header("org.apache.camel.Redelivered").isEqualTo(Boolean.FALSE);
-        
mock.message(0).header("org.apache.camel.RedeliveryCounter").isEqualTo(0);
+        mock.message(0).header("CamelRedelivered").isEqualTo(Boolean.FALSE);
+        mock.message(0).header("CamelRedeliveryCounter").isEqualTo(0);
 
         try {
             template.sendBody("direct:no", "Hello World");
@@ -76,8 +76,8 @@
         // We expect the exchange here after 1 delivery and 1 re delivery
         MockEndpoint mock = getMockEndpoint("mock:one");
         mock.expectedMessageCount(1);
-        
mock.message(0).header("org.apache.camel.Redelivered").isEqualTo(Boolean.TRUE);
-        
mock.message(0).header("org.apache.camel.RedeliveryCounter").isEqualTo(1);
+        mock.message(0).header("CamelRedelivered").isEqualTo(Boolean.TRUE);
+        mock.message(0).header("CamelRedeliveryCounter").isEqualTo(1);
 
         try {
             template.sendBody("direct:one", "Hello World");

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelTest.java?rev=746709&r1=746708&r2=746709&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/DeadLetterChannelTest.java
 Sun Feb 22 14:28:12 2009
@@ -38,8 +38,8 @@
 
     public void testFirstFewAttemptsFail() throws Exception {
         successEndpoint.expectedBodiesReceived(body);
-        
successEndpoint.message(0).header(DeadLetterChannel.REDELIVERED).isEqualTo(true);
-        
successEndpoint.message(0).header(DeadLetterChannel.REDELIVERY_COUNTER).isEqualTo(1);
+        
successEndpoint.message(0).header(Exchange.REDELIVERED).isEqualTo(true);
+        
successEndpoint.message(0).header(Exchange.REDELIVERY_COUNTER).isEqualTo(1);
 
         deadEndpoint.expectedMessageCount(0);
 
@@ -52,15 +52,15 @@
         failUntilAttempt = 5;
 
         deadEndpoint.expectedBodiesReceived(body);
-        
deadEndpoint.message(0).header(DeadLetterChannel.REDELIVERED).isEqualTo(true);
-        
deadEndpoint.message(0).header(DeadLetterChannel.REDELIVERY_COUNTER).isEqualTo(2);
+        deadEndpoint.message(0).header(Exchange.REDELIVERED).isEqualTo(true);
+        
deadEndpoint.message(0).header(Exchange.REDELIVERY_COUNTER).isEqualTo(2);
         successEndpoint.expectedMessageCount(0);
 
         sendBody("direct:start", body);
 
         assertMockEndpointsSatisfied();
 
-        Throwable t = 
deadEndpoint.getExchanges().get(0).getProperty(DeadLetterChannel.EXCEPTION_CAUSE_PROPERTY,
 Throwable.class);
+        Throwable t = 
deadEndpoint.getExchanges().get(0).getProperty(Exchange.EXCEPTION_CAUGHT, 
Throwable.class);
         assertNotNull("Should have been a cause property", t);
         assertTrue(t instanceof RuntimeException);
         assertEquals("Failed to process due to attempt: 3 being less than: 5", 
t.getMessage());
@@ -80,8 +80,7 @@
     protected RouteBuilder createRouteBuilder() {
         final Processor processor = new AsyncProcessor() {
             public void process(Exchange exchange) {
-                Integer counter = 
exchange.getIn().getHeader(DeadLetterChannel.REDELIVERY_COUNTER,
-                                                             Integer.class);
+                Integer counter = 
exchange.getIn().getHeader(Exchange.REDELIVERY_COUNTER, Integer.class);
                 int attempt = (counter == null) ? 1 : counter + 1;
                 if (attempt < failUntilAttempt) {
                     throw new RuntimeException("Failed to process due to 
attempt: " + attempt
@@ -90,8 +89,7 @@
             }
             // START SNIPPET: AsyncProcessor
             public boolean process(Exchange exchange, AsyncCallback callback) 
{                
-                Integer counter = 
exchange.getIn().getHeader(DeadLetterChannel.REDELIVERY_COUNTER,
-                                                             Integer.class);
+                Integer counter = 
exchange.getIn().getHeader(Exchange.REDELIVERY_COUNTER, Integer.class);
                 int attempt = (counter == null) ? 1 : counter + 1;
                 if (attempt > 1) {
                     assertEquals("Now we should use TimerThread to call the 
process", Thread.currentThread().getName(), "Timer-0");

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RedeliveryPolicyPerExceptionTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RedeliveryPolicyPerExceptionTest.java?rev=746709&r1=746708&r2=746709&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RedeliveryPolicyPerExceptionTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/RedeliveryPolicyPerExceptionTest.java
 Sun Feb 22 14:28:12 2009
@@ -45,8 +45,8 @@
         Message in = exchange.getIn();
         log.info("Found message with headers: " + in.getHeaders());
 
-        assertMessageHeader(in, DeadLetterChannel.REDELIVERY_COUNTER, 2);
-        assertMessageHeader(in, DeadLetterChannel.REDELIVERED, true);
+        assertMessageHeader(in, Exchange.REDELIVERY_COUNTER, 2);
+        assertMessageHeader(in, Exchange.REDELIVERED, true);
     }
 
     public void testUsingCustomExceptionHandlerWithNoRedeliveries() throws 
Exception {
@@ -62,8 +62,8 @@
         Message in = exchange.getIn();
         log.info("Found message with headers: " + in.getHeaders());
 
-        assertMessageHeader(in, DeadLetterChannel.REDELIVERY_COUNTER, 0);
-        assertMessageHeader(in, DeadLetterChannel.REDELIVERED, false);
+        assertMessageHeader(in, Exchange.REDELIVERY_COUNTER, 0);
+        assertMessageHeader(in, Exchange.REDELIVERED, false);
     }
 
     @Override

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/InterceptAlterMessageBeforeRedeliveryTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/InterceptAlterMessageBeforeRedeliveryTest.java?rev=746709&r1=746708&r2=746709&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/InterceptAlterMessageBeforeRedeliveryTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/InterceptAlterMessageBeforeRedeliveryTest.java
 Sun Feb 22 14:28:12 2009
@@ -66,7 +66,7 @@
                 // START SNIPPET: e1
                 // we configure an interceptor that is triggered when the 
redelivery flag
                 // has been set TRUE on an exchange
-                
intercept().when(header("org.apache.camel.Redelivered").isEqualTo(Boolean.TRUE)).
+                
intercept().when(header("CamelRedelivered").isEqualTo(Boolean.TRUE)).
                         process(new Processor() {
                             public void process(Exchange exchange) throws 
Exception {
                                 // the message is being redelivered so we can 
alter it
@@ -74,7 +74,7 @@
                                 // we just append the redelivery counter to 
the body
                                 // you can of course do all kind of stuff 
instead
                                 String body = 
exchange.getIn().getBody(String.class);
-                                int count = 
exchange.getIn().getHeader("org.apache.camel.RedeliveryCounter", Integer.class);
+                                int count = 
exchange.getIn().getHeader("CamelRedeliveryCounter", Integer.class);
 
                                 exchange.getIn().setBody(body + count);
                             }

Modified: 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionRetryUntilTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionRetryUntilTest.java?rev=746709&r1=746708&r2=746709&view=diff
==============================================================================
--- 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionRetryUntilTest.java
 (original)
+++ 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionRetryUntilTest.java
 Sun Feb 22 14:28:12 2009
@@ -72,7 +72,7 @@
     public class MyRetryBean {
 
         // using bean binding we can bind the information from the exchange to 
the types we have in our method signature
-        public boolean retryUntil(@Header(name = 
DeadLetterChannel.REDELIVERY_COUNTER) Integer counter, @Body String body, 
@ExchangeException Exception causedBy) {
+        public boolean retryUntil(@Header(name = Exchange.REDELIVERY_COUNTER) 
Integer counter, @Body String body, @ExchangeException Exception causedBy) {
             // NOTE: counter is the redelivery attempt, will start from 1
             invoked++;
 

Modified: 
camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsRedeliveryWithInitialRedeliveryDelayTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsRedeliveryWithInitialRedeliveryDelayTest.java?rev=746709&r1=746708&r2=746709&view=diff
==============================================================================
--- 
camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsRedeliveryWithInitialRedeliveryDelayTest.java
 (original)
+++ 
camel/trunk/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsRedeliveryWithInitialRedeliveryDelayTest.java
 Sun Feb 22 14:28:12 2009
@@ -17,6 +17,7 @@
 package org.apache.camel.component.jms.issues;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.Exchange;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.context.ContextConfiguration;
@@ -36,8 +37,8 @@
         MockEndpoint result = context.getEndpoint("mock:result", 
MockEndpoint.class);
 
         dead.expectedBodiesReceived("Hello World");
-        dead.message(0).header("org.apache.camel.Redelivered").isEqualTo(true);
-        
dead.message(0).header("org.apache.camel.RedeliveryCounter").isEqualTo(4);
+        dead.message(0).header(Exchange.REDELIVERED).isEqualTo(true);
+        dead.message(0).header(Exchange.REDELIVERY_COUNTER).isEqualTo(4);
         result.expectedMessageCount(0);
 
         context.createProducerTemplate().sendBody("activemq:in", "Hello 
World");

Modified: 
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionInterceptor.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionInterceptor.java?rev=746709&r1=746708&r2=746709&view=diff
==============================================================================
--- 
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionInterceptor.java
 (original)
+++ 
camel/trunk/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionInterceptor.java
 Sun Feb 22 14:28:12 2009
@@ -17,7 +17,6 @@
 package org.apache.camel.spring.spi;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.ExchangeProperty;
 import org.apache.camel.Processor;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.processor.DelayPolicy;
@@ -41,8 +40,6 @@
  * @version $Revision$
  */
 public class TransactionInterceptor extends DelegateProcessor {
-    public static final ExchangeProperty<Boolean> TRANSACTED =
-        new ExchangeProperty<Boolean>("transacted", 
"org.apache.camel.transacted", Boolean.class);
     private static final transient Log LOG = 
LogFactory.getLog(TransactionInterceptor.class);
     private final TransactionTemplate transactionTemplate;
     private RedeliveryPolicy redeliveryPolicy;
@@ -85,8 +82,7 @@
                         activeTx = status.isNewTransaction() && 
!status.isCompleted();
                         if (!activeTx) {
                             if 
(DefaultTransactionStatus.class.isAssignableFrom(status.getClass())) {
-                                DefaultTransactionStatus defStatus =
-                                        
DefaultTransactionStatus.class.cast(status);
+                                DefaultTransactionStatus defStatus = 
DefaultTransactionStatus.class.cast(status);
                                 activeTx = defStatus.hasTransaction() && 
!status.isCompleted();
                             }
                         }
@@ -98,7 +94,7 @@
                     // okay mark the exchange as transacted, then the 
DeadLetterChannel or others know
                     // its a transacted exchange
                     if (activeTx) {
-                        TRANSACTED.set(exchange, Boolean.TRUE);
+                        exchange.setProperty(Exchange.TRANSACTED, 
Boolean.TRUE);
                     }
 
                     // process the exchange

Modified: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/DeadLetterChannelRedeliveryConfigTest.java
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/DeadLetterChannelRedeliveryConfigTest.java?rev=746709&r1=746708&r2=746709&view=diff
==============================================================================
--- 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/DeadLetterChannelRedeliveryConfigTest.java
 (original)
+++ 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/config/DeadLetterChannelRedeliveryConfigTest.java
 Sun Feb 22 14:28:12 2009
@@ -17,6 +17,7 @@
 package org.apache.camel.spring.config;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.Exchange;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -40,8 +41,8 @@
         MockEndpoint result = context.getEndpoint("mock:result", 
MockEndpoint.class);
 
         dead.expectedBodiesReceived("Hello World");
-        dead.message(0).header("org.apache.camel.Redelivered").isEqualTo(true);
-        
dead.message(0).header("org.apache.camel.RedeliveryCounter").isEqualTo(3);
+        dead.message(0).header(Exchange.REDELIVERED).isEqualTo(Boolean.TRUE);
+        dead.message(0).header(Exchange.REDELIVERY_COUNTER).isEqualTo(3);
         result.expectedMessageCount(0);
 
         try {

Copied: 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringDeadLetterChannelOnExceptionOnRedeliveryTest.java
 (from r746448, 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/RedeliveryPolicyReTest.java)
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringDeadLetterChannelOnExceptionOnRedeliveryTest.java?p2=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringDeadLetterChannelOnExceptionOnRedeliveryTest.java&p1=camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/RedeliveryPolicyReTest.java&r1=746448&r2=746709&rev=746709&view=diff
==============================================================================
--- 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/RedeliveryPolicyReTest.java
 (original)
+++ 
camel/trunk/components/camel-spring/src/test/java/org/apache/camel/spring/processor/onexception/SpringDeadLetterChannelOnExceptionOnRedeliveryTest.java
 Sun Feb 22 14:28:12 2009
@@ -17,16 +17,16 @@
 package org.apache.camel.spring.processor.onexception;
 
 import org.apache.camel.CamelContext;
-
+import org.apache.camel.processor.DeadLetterChannelOnExceptionOnRedeliveryTest;
 import static 
org.apache.camel.spring.processor.SpringTestHelper.createSpringCamelContext;
 
 /**
- * Unit test for onException with the spring DSL.
+ * Unit test for per on exception specificy on redelivery.
  */
-public class RedeliveryPolicyReTest extends 
DeadLetterChannelHandledExampleTest {
+public class SpringDeadLetterChannelOnExceptionOnRedeliveryTest extends 
DeadLetterChannelOnExceptionOnRedeliveryTest {
 
     protected CamelContext createCamelContext() throws Exception {
         return createSpringCamelContext(this,
-                
"/org/apache/camel/spring/processor/onexception/RedeliveryPolicyRefTest.xml");
+                
"/org/apache/camel/spring/processor/onexception/DeadLetterChannelOnExceptionOnRedeliveryTest.xml");
     }
 }
\ No newline at end of file

Copied: 
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/onexception/DeadLetterChannelOnExceptionOnRedeliveryTest.xml
 (from r746448, 
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/onexception/RedeliveryPolicyRefTest.xml)
URL: 
http://svn.apache.org/viewvc/camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/onexception/DeadLetterChannelOnExceptionOnRedeliveryTest.xml?p2=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/onexception/DeadLetterChannelOnExceptionOnRedeliveryTest.xml&p1=camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/onexception/RedeliveryPolicyRefTest.xml&r1=746448&r2=746709&rev=746709&view=diff
==============================================================================
--- 
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/onexception/RedeliveryPolicyRefTest.xml
 (original)
+++ 
camel/trunk/components/camel-spring/src/test/resources/org/apache/camel/spring/processor/onexception/DeadLetterChannelOnExceptionOnRedeliveryTest.xml
 Sun Feb 22 14:28:12 2009
@@ -22,44 +22,49 @@
        http://camel.apache.org/schema/spring 
http://camel.apache.org/schema/spring/camel-spring.xsd
     ">
 
-    <!-- START SNIPPET: e1 -->
-    <!-- here we define our redelivery policy using standard spring style -->
-    <bean id="myRedeliveryPolicy" 
class="org.apache.camel.processor.RedeliveryPolicy">
-      <property name="maximumRedeliveries" value="1" />
+    <bean id="deadLetterErrorHandler" 
class="org.apache.camel.builder.DeadLetterChannelBuilder">
+        <property name="defaultDeadLetterEndpointUri" value="mock:error"/>
+        <property name="onRedelivery" ref="myRedeliveryProcessor"/>
+        <property name="redeliveryPolicy" ref="redeliveryPolicy"/>
     </bean>
 
+    <bean id="redeliveryPolicy" 
class="org.apache.camel.processor.RedeliveryPolicy">
+        <!-- go fast since its a unit test -->
+        <property name="delay" value="0"/>
+    </bean>
+
+
+    <bean id="myRedeliveryProcessor"
+          
class="org.apache.camel.processor.DeadLetterChannelOnExceptionOnRedeliveryTest$MyRedeliverPrcessor"/>
+
+    <bean id="myIORedeliverProcessor"
+          
class="org.apache.camel.processor.DeadLetterChannelOnExceptionOnRedeliveryTest$MyIORedeliverPrcessor"/>
+
+    <bean id="throwExceptionProcessor"
+          
class="org.apache.camel.processor.DeadLetterChannelOnExceptionOnRedeliveryTest$ThrowExceptionProcessor"/>
+
+    <bean id="throwIOExceptionProcessor"
+          
class="org.apache.camel.processor.DeadLetterChannelOnExceptionOnRedeliveryTest$ThrowIOExceptionProcessor"/>
 
-    <!-- this is our POJO bean with our business logic defined as a plain 
spring bean -->
-    <bean id="orderService" 
class="org.apache.camel.spring.processor.onexception.OrderService" />
 
     <!-- this is the camel context where we define the routes -->
-    <camelContext xmlns="http://camel.apache.org/schema/spring";>
+    <camelContext xmlns="http://camel.apache.org/schema/spring"; 
errorHandlerRef="deadLetterErrorHandler">
 
-      <onException>
-        <!-- the exception is full qualified names as plain strings -->
-        <!-- there can be more just add a 2nd, 3rd exception element 
(unbounded) -->
-        
<exception>org.apache.camel.spring.processor.onexception.OrderFailedException</exception>
-        <exception>java.lang.IllegalArgumentException</exception>
-        <!-- here we reference our redelivy policy -->
-        <redeliveryPolicy ref="myRedeliveryPolicy" />
-        <!-- mark this as handled -->
-        <handled>
-          <constant>true</constant>
-        </handled>
-        <!-- let our order service handle this exception, call the orderFailed 
method -->
-        <bean ref="orderService" method="orderFailed" />
-        <!-- and since this is a unit test we use mock for assertions -->
-        <to uri="mock:error" />
-      </onException>
-
-      <route>
-        <!-- the route -->
-        <from uri="direct:start" />
-        <!-- in the normal route then route to our order service and call 
handleOrder method -->
-        <bean ref="orderService" method="handleOrder" />
-        <!-- and since this is a unit test we use mock for assertions -->
-        <to uri="mock:result" />
-      </route>
+        <onException onRedeliveryRef="myIORedeliverProcessor">
+            <exception>java.io.IOException</exception>
+        </onException>
+
+        <route>
+            <from uri="direct:start"/>
+            <process ref="throwExceptionProcessor"/>
+            <to uri="mock:result"/>
+        </route>
+
+        <route>
+            <from uri="direct:io"/>
+            <process ref="throwIOExceptionProcessor"/>
+            <to uri="mock:result"/>
+        </route>
 
     </camelContext>
     <!-- END SNIPPET: e1 -->


Reply via email to