Author: davsclaus
Date: Thu Feb 26 16:35:36 2009
New Revision: 748201

URL: http://svn.apache.org/viewvc?rev=748201&view=rev
Log:
Added wiki example for some on exception stuff.

Added:
    
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionProcessorInspectCausedExceptionTest.java
      - copied, changed from r748160, 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionRetryUntilTest.java

Copied: 
camel/trunk/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionProcessorInspectCausedExceptionTest.java
 (from r748160, 
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/OnExceptionProcessorInspectCausedExceptionTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionProcessorInspectCausedExceptionTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/onexception/OnExceptionRetryUntilTest.java&r1=748160&r2=748201&rev=748201&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/OnExceptionProcessorInspectCausedExceptionTest.java
 Thu Feb 26 16:35:36 2009
@@ -16,43 +16,41 @@
  */
 package org.apache.camel.processor.onexception;
 
-import org.apache.camel.Body;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
-import org.apache.camel.ExchangeException;
-import org.apache.camel.Header;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.impl.JndiRegistry;
-import org.apache.camel.processor.DeadLetterChannel;
 
 /**
- * Unit test for the retry until predicate
+ * Unit test for using a processor to peek the caused exception
  */
-public class OnExceptionRetryUntilTest extends ContextTestSupport {
+public class OnExceptionProcessorInspectCausedExceptionTest extends 
ContextTestSupport {
 
-    private static int invoked;
+    public void testInspectExceptionByProcessor() throws Exception {
+        getMockEndpoint("mock:error").expectedMessageCount(0);
+        getMockEndpoint("mock:myerror").expectedMessageCount(1);
+
+        try {
+            template.sendBody("direct:start", "Hello World");
+            fail("Should throw exception");
+        } catch (Exception e) {
+            // ok
+        }
 
-    @Override
-    protected JndiRegistry createRegistry() throws Exception {
-        JndiRegistry jndi = super.createRegistry();
-        jndi.bind("myRetryHandler", new MyRetryBean());
-        return jndi;
+        assertMockEndpointsSatisfied();
     }
 
-    public void testRetryUntil() throws Exception {
-        context.addRoutes(new RouteBuilder() {
+    @Override
+    protected RouteBuilder createRouteBuilder() throws Exception {
+        return new RouteBuilder() {
             @Override
             public void configure() throws Exception {
-                
errorHandler(deadLetterChannel("mock:error").maximumRedeliveries(0));
+                
errorHandler(deadLetterChannel("mock:error").maximumRedeliveries(3));
 
                 // START SNIPPET: e1
-                // we want to use a predicate for retries so we can determine 
in our bean
-                // when retry should stop
-                onException(MyFunctionalException.class)
-                        .retryUntil(bean("myRetryHandler"))
-                        .handled(true)
-                        .transform().constant("Sorry");
+                // here we register exception cause for MyFunctionException
+                // when this exception occur we want it to be processed by our 
proceesor
+                onException(MyFunctionalException.class).process(new 
MyFunctionFailureHandler());
                 // END SNIPPET: e1
 
                 from("direct:start").process(new Processor() {
@@ -61,28 +59,24 @@
                     }
                 });
             }
-        });
-
-        Object out = template.requestBody("direct:start", "Hello World");
-        assertEquals("Sorry", out);
-        assertEquals(3, invoked);
+        };
     }
 
     // START SNIPPET: e2
-    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(Exchange.REDELIVERY_COUNTER) Integer 
counter, @Body String body, @ExchangeException Exception causedBy) {
-            // NOTE: counter is the redelivery attempt, will start from 1
-            invoked++;
+    public static class MyFunctionFailureHandler implements Processor {
 
-            assertEquals("Hello World", body);
-            assertTrue(causedBy instanceof MyFunctionalException);
+        public void process(Exchange exchange) throws Exception {
+            // the caused by exception is stored in a property on the exchange
+            Throwable caused = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, 
Throwable.class);
+            assertNotNull(caused);
+            // here you can do what you want, but Camel regard this exception 
as handled, and
+            // this processor as a failurehandler, so it wont do redeliveries. 
So this is the
+            // end of this route. But if we want to route it somewhere we can 
just get a
+            // producer template and send it.
 
-            // we can of course do what ever we want to determine the result 
but this is a unit test so we end after 3 attempts
-            return counter < 3;
+            // send it to our mock endpoint
+            
exchange.getContext().createProducerTemplate().send("mock:myerror", exchange);
         }
     }
     // END SNIPPET: e2
-
 }
\ No newline at end of file


Reply via email to