You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2011/11/07 14:25:21 UTC

svn commit: r1198724 - in /camel/trunk/camel-core/src: main/java/org/apache/camel/processor/interceptor/DefaultTraceEventMessage.java test/java/org/apache/camel/processor/interceptor/DefaultTraceEventMessageCausedByExceptionTest.java

Author: davsclaus
Date: Mon Nov  7 13:25:21 2011
New Revision: 1198724

URL: http://svn.apache.org/viewvc?rev=1198724&view=rev
Log:
CAMEL-4636: Caught exception is provided in the caused by exception field on trace event message.

Added:
    camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/DefaultTraceEventMessageCausedByExceptionTest.java
      - copied, changed from r1198634, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/DefaultTraceEventMessageTest.java
Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultTraceEventMessage.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultTraceEventMessage.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultTraceEventMessage.java?rev=1198724&r1=1198723&r2=1198724&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultTraceEventMessage.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/processor/interceptor/DefaultTraceEventMessage.java Mon Nov  7 13:25:21 2011
@@ -80,12 +80,25 @@ public final class DefaultTraceEventMess
             this.outBody = MessageHelper.extractBodyAsString(out);
             this.outBodyType = MessageHelper.getBodyTypeName(out);
         }
-        this.causedByException = exchange.getException() != null ? exchange.getException().toString() : null;
+        this.causedByException = extractCausedByException(exchange);
     }
 
     // Implementation
     //---------------------------------------------------------------
 
+    private static String extractCausedByException(Exchange exchange) {
+        Throwable cause = exchange.getException();
+        if (cause == null) {
+            cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Throwable.class);
+        }
+
+        if (cause != null) {
+            return cause.toString();
+        } else {
+            return null;
+        }
+    }
+
     private static String extractShortExchangeId(Exchange exchange) {
         return exchange.getExchangeId().substring(exchange.getExchangeId().indexOf("/") + 1);
     }

Copied: camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/DefaultTraceEventMessageCausedByExceptionTest.java (from r1198634, camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/DefaultTraceEventMessageTest.java)
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/DefaultTraceEventMessageCausedByExceptionTest.java?p2=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/DefaultTraceEventMessageCausedByExceptionTest.java&p1=camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/DefaultTraceEventMessageTest.java&r1=1198634&r2=1198724&rev=1198724&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/DefaultTraceEventMessageTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/processor/interceptor/DefaultTraceEventMessageCausedByExceptionTest.java Mon Nov  7 13:25:21 2011
@@ -16,109 +16,39 @@
  */
 package org.apache.camel.processor.interceptor;
 
-import java.util.Date;
-
 import org.apache.camel.ContextTestSupport;
-import org.apache.camel.Exchange;
-import org.apache.camel.ExchangePattern;
-import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.impl.DefaultExchange;
 
 /**
  * @version 
  */
-public class DefaultTraceEventMessageTest extends ContextTestSupport {
+public class DefaultTraceEventMessageCausedByExceptionTest extends ContextTestSupport {
+
+    public void testCausedByException() throws Exception {
+        getMockEndpoint("mock:handled").expectedMessageCount(1);
 
-    public void testDefaultTraceEventMessage() throws Exception {
-        getMockEndpoint("mock:result").expectedMessageCount(1);
         MockEndpoint traced = getMockEndpoint("mock:traced");
-        traced.expectedMessageCount(2);
+        traced.expectedMessageCount(4);
 
-        template.send("direct:start", new Processor() {
-            public void process(Exchange exchange) throws Exception {
-                exchange.setPattern(ExchangePattern.InOut);
-                exchange.setProperty("foo", 123);
-                exchange.getIn().setBody("Hello World");
-                exchange.getIn().setHeader("bar", "456");
-                exchange.getOut().setBody("Bye World");
-                exchange.getOut().setHeader("cheese", 789);
-            }
-        });
+        template.sendBody("direct:start", "Hello World");
 
         assertMockEndpointsSatisfied();
 
-        DefaultTraceEventMessage em = traced.getReceivedExchanges().get(0).getIn().getBody(DefaultTraceEventMessage.class);
-        assertNotNull(em);
-        assertNotNull(em.getTimestamp());
-        assertEquals("direct://start", em.getFromEndpointUri());
-        assertEquals(null, em.getPreviousNode());
-        assertEquals("mock://foo", em.getToNode());
-        assertNotNull(em.getExchangeId());
-        assertNotNull(em.getShortExchangeId());
-        assertEquals("InOut", em.getExchangePattern());
-        assertTrue(em.getProperties().contains("foo=123"));
-        assertTrue(em.getProperties().contains("CamelToEndpoint=direct://start"));
-        assertTrue(em.getProperties().contains("CamelCreatedTimestamp"));
-        assertTrue(em.getHeaders().contains("bar=456"));
-        assertEquals("Hello World", em.getBody());
-        assertEquals("String", em.getBodyType());
-        assertEquals("Bye World", em.getOutBody());
-        assertEquals("String", em.getOutBodyType());
-        assertEquals("{cheese=789}", em.getOutHeaders());
-    }
-
-    public void testDefaultTraceEventMessageOptions() throws Exception {
-        Exchange exchange = new DefaultExchange(context);
-        DefaultTraceEventMessage em = new DefaultTraceEventMessage(new Date(), null, exchange);
-
-        em.setBody("Hello World");
-        assertEquals("Hello World", em.getBody());
-
-        em.setBodyType("String");
-        assertEquals("String", em.getBodyType());
-
-        em.setCausedByException("Damn");
-        assertEquals("Damn", em.getCausedByException());
-
-        em.setExchangeId("123");
-        assertEquals("123", em.getExchangeId());
-
-        em.setExchangePattern("InOnly");
-        assertEquals("InOnly", em.getExchangePattern());
-
-        em.setFromEndpointUri("direct://start");
-        assertEquals("direct://start", em.getFromEndpointUri());
-
-        em.setHeaders("{foo=123}");
-        assertEquals("{foo=123}", em.getHeaders());
-
-        em.setOutBody("123");
-        assertEquals("123", em.getOutBody());
-
-        em.setOutBodyType("Integer");
-        assertEquals("Integer", em.getOutBodyType());
-
-        em.setOutHeaders("{cheese=789}");
-        assertEquals("{cheese=789}", em.getOutHeaders());
-
-        em.setProperties("{foo=123}");
-        assertEquals("{foo=123}", em.getProperties());
-
-        em.setPreviousNode("A");
-        assertEquals("A", em.getPreviousNode());
-
-        em.setToNode("B");
-        assertEquals("B", em.getToNode());
-
-        em.setTimestamp(new Date());
-        assertNotNull(em.getTimestamp());
-
-        em.setShortExchangeId("123");
-        assertEquals("123", em.getShortExchangeId());
-
-        assertSame(exchange, em.getTracedExchange());
+        DefaultTraceEventMessage em1 = traced.getReceivedExchanges().get(0).getIn().getBody(DefaultTraceEventMessage.class);
+        DefaultTraceEventMessage em2 = traced.getReceivedExchanges().get(1).getIn().getBody(DefaultTraceEventMessage.class);
+        DefaultTraceEventMessage em3 = traced.getReceivedExchanges().get(2).getIn().getBody(DefaultTraceEventMessage.class);
+        DefaultTraceEventMessage em4 = traced.getReceivedExchanges().get(3).getIn().getBody(DefaultTraceEventMessage.class);
+
+        assertNotNull(em1);
+        assertNotNull(em2);
+        assertNotNull(em3);
+        assertNotNull(em4);
+
+        assertNull(em1.getCausedByException());
+        assertNull(em2.getCausedByException());
+        assertEquals("java.lang.IllegalArgumentException: Forced", em3.getCausedByException());
+        assertEquals("java.lang.IllegalArgumentException: Forced", em4.getCausedByException());
     }
 
     @Override
@@ -130,7 +60,11 @@ public class DefaultTraceEventMessageTes
                 tracer.setDestinationUri("mock:traced");
                 context.addInterceptStrategy(tracer);
 
-                from("direct:start").to("mock:foo").to("mock:result");
+                onException(Exception.class)
+                    .handled(true)
+                    .to("mock:handled");
+
+                from("direct:start").to("mock:foo").throwException(new IllegalArgumentException("Forced"));
             }
         };
     }