Author: hadrian
Date: Thu Aug 21 14:52:56 2008
New Revision: 687873

URL: http://svn.apache.org/viewvc?rev=687873&view=rev
Log:
CAMEL-842.

Added:
    
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FaultRetryRouteTest.java
Modified:
    
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/HandleFaultProcessor.java
    
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FaultRouteTest.java

Modified: 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/HandleFaultProcessor.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/HandleFaultProcessor.java?rev=687873&r1=687872&r2=687873&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/HandleFaultProcessor.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/HandleFaultProcessor.java
 Thu Aug 21 14:52:56 2008
@@ -29,12 +29,12 @@
         if (faultMessage != null) {
             final Object faultBody = faultMessage.getBody();
             if (faultBody != null) {
+                faultMessage.setBody(null); // Reset it since we are handling 
it.
                 if (faultBody instanceof Throwable) {
                     exchange.setException((Throwable)faultBody);
                 } else {
                     exchange.setException(new CamelException("Message contains 
fault of type "
-                                                             + 
faultBody.getClass().getName() + ":\n"
-                                                             + faultBody));
+                        + faultBody.getClass().getName() + ":\n" + faultBody));
                 }
             }
         }

Added: 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FaultRetryRouteTest.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FaultRetryRouteTest.java?rev=687873&view=auto
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FaultRetryRouteTest.java
 (added)
+++ 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FaultRetryRouteTest.java
 Thu Aug 21 14:52:56 2008
@@ -0,0 +1,71 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.processor;
+
+import org.apache.camel.CamelException;
+import org.apache.camel.ContextTestSupport;
+import org.apache.camel.Exchange;
+import org.apache.camel.Message;
+import org.apache.camel.Processor;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+
+public class FaultRetryRouteTest extends ContextTestSupport {
+    protected MockEndpoint a;
+    protected MockEndpoint b;
+    protected MockEndpoint error;
+    protected final Processor successOnRetryProcessor = new Processor() {
+       int count = 0;
+        public void process(Exchange exchange) throws CamelException {
+            if (count++ == 0) {
+                Message message = exchange.getFault();
+                message.setBody(new CamelException("Failed the first time"));
+            }
+        }
+    };
+
+    public void testSuccessfulRetry() throws Exception {
+        a.expectedBodiesReceived("in");
+        b.expectedBodiesReceived("in");
+        error.expectedMessageCount(0);
+        
+        template.sendBody("direct:start", "in");
+        
+        MockEndpoint.assertIsSatisfied(a, b, error);
+    }
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        a = resolveMandatoryEndpoint("mock:a", MockEndpoint.class);
+        b = resolveMandatoryEndpoint("mock:b", MockEndpoint.class);
+        error = resolveMandatoryEndpoint("mock:error", MockEndpoint.class);
+    }
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
+            @Override
+            public void configure() {
+                from("direct:start").errorHandler(
+                    deadLetterChannel("mock:error")
+                        .maximumRedeliveries(4)
+                        .loggingLevel(LoggingLevel.DEBUG))
+                    
.to("mock:a").handleFault().process(successOnRetryProcessor).to("mock:b");
+            }
+        };
+    }
+}
\ No newline at end of file

Modified: 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FaultRouteTest.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FaultRouteTest.java?rev=687873&r1=687872&r2=687873&view=diff
==============================================================================
--- 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FaultRouteTest.java
 (original)
+++ 
activemq/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/FaultRouteTest.java
 Thu Aug 21 14:52:56 2008
@@ -115,9 +115,17 @@
             assertEquals("Fault message", "It makes no sense of business 
logic",
                          
((IllegalStateException)(fault.getBody())).getMessage());
         } else { // test for the throwFault with String
-            assertTrue("It should be the CamelException", fault.getBody() 
instanceof CamelException);
-            assertEquals("Fault message", "ExceptionMessage", 
((CamelException)(fault.getBody()))
-                .getMessage());
+               if (errors == 0) {
+                   // fault *not* handled
+                   assertTrue("It should be the CamelException", 
fault.getBody() instanceof CamelException);
+                   assertEquals("Fault message", "ExceptionMessage", 
((CamelException)(fault.getBody())).getMessage());
+               } else {
+                   // fault handled, exception should contain the fault
+                   assertNull("Fault body should be null", fault.getBody());
+                   CamelException faultex = 
(CamelException)exchange.getException();
+                   assertNotNull("Exception body should contain the fault", 
faultex);
+                   assertEquals("Fault message", "ExceptionMessage", 
faultex.getMessage());
+               }
         }
     }
 


Reply via email to