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 2010/10/29 11:47:24 UTC

svn commit: r1028661 - in /camel/trunk/camel-core/src: main/java/org/apache/camel/builder/ main/java/org/apache/camel/language/simple/ test/java/org/apache/camel/language/

Author: davsclaus
Date: Fri Oct 29 09:47:23 2010
New Revision: 1028661

URL: http://svn.apache.org/viewvc?rev=1028661&view=rev
Log:
CAMEL-3293: Added exception.stacktrace to Simple language.

Modified:
    camel/trunk/camel-core/src/main/java/org/apache/camel/builder/Builder.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/builder/ExpressionBuilder.java
    camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java
    camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleTest.java

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/builder/Builder.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/builder/Builder.java?rev=1028661&r1=1028660&r2=1028661&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/builder/Builder.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/builder/Builder.java Fri Oct 29 09:47:23 2010
@@ -188,6 +188,14 @@ public final class Builder {
     }
     
     /**
+     * Returns a predicate and value builder for the exception stacktrace on an exchange
+     */
+    public static ValueBuilder exceptionStackTrace() {
+        Expression expression = ExpressionBuilder.exchangeExceptionStackTraceExpression();
+        return new ValueBuilder(expression);
+    }
+
+    /**
      * Returns an expression that replaces all occurrences of the regular 
      * expression with the given replacement
      */

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=1028661&r1=1028660&r2=1028661&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 Fri Oct 29 09:47:23 2010
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.builder;
 
+import java.io.PrintWriter;
+import java.io.StringWriter;
 import java.text.SimpleDateFormat;
 import java.util.Collection;
 import java.util.Collections;
@@ -41,6 +43,7 @@ import org.apache.camel.model.language.M
 import org.apache.camel.spi.Language;
 import org.apache.camel.util.ExchangeHelper;
 import org.apache.camel.util.FileUtil;
+import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.OgnlHelper;
 
@@ -421,6 +424,37 @@ public final class ExpressionBuilder {
     }
 
     /**
+     * Returns an expression for an exception stacktrace set on the exchange
+     *
+     * @return an expression object which will return the exception stacktrace set on the exchange
+     */
+    public static Expression exchangeExceptionStackTraceExpression() {
+        return new ExpressionAdapter() {
+            public Object evaluate(Exchange exchange) {
+                Exception exception = exchange.getException();
+                if (exception == null) {
+                    exception = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class);
+                }
+                if (exception != null) {
+                    StringWriter sw = new StringWriter();
+                    PrintWriter pw = new PrintWriter(sw);
+                    exception.printStackTrace(pw);
+                    IOHelper.close(pw);
+                    IOHelper.close(sw);
+                    return sw.toString();
+                } else {
+                    return null;
+                }
+            }
+
+            @Override
+            public String toString() {
+                return "exchangeExceptionStackTrace";
+            }
+        };
+    }
+
+    /**
      * Returns an expression for the property value of exchange with the given name
      *
      * @param propertyName the name of the property the expression will return

Modified: camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java?rev=1028661&r1=1028660&r2=1028661&view=diff
==============================================================================
--- camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java (original)
+++ camel/trunk/camel-core/src/main/java/org/apache/camel/language/simple/SimpleLanguage.java Fri Oct 29 09:47:23 2010
@@ -124,6 +124,8 @@ public class SimpleLanguage extends Simp
             return ExpressionBuilder.exchangeExceptionExpression();
         } else if (ObjectHelper.equal(expression, "exception.message")) {
             return ExpressionBuilder.exchangeExceptionMessageExpression();
+        } else if (ObjectHelper.equal(expression, "exception.stacktrace")) {
+            return ExpressionBuilder.exchangeExceptionStackTraceExpression();
         } else if (ObjectHelper.equal(expression, "threadName")) {
             return ExpressionBuilder.threadNameExpression();
         }

Modified: camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleTest.java?rev=1028661&r1=1028660&r2=1028661&view=diff
==============================================================================
--- camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleTest.java (original)
+++ camel/trunk/camel-core/src/test/java/org/apache/camel/language/SimpleTest.java Fri Oct 29 09:47:23 2010
@@ -177,6 +177,24 @@ public class SimpleTest extends Language
         assertExpression("Hello ${exception.message} World", "Hello Just testing World");
     }
 
+    public void testExceptionStacktrace() throws Exception {
+        exchange.setException(new IllegalArgumentException("Just testing"));
+
+        String out = SimpleLanguage.simple("exception.stacktrace").evaluate(exchange, String.class);
+        assertNotNull(out);
+        assertTrue(out.startsWith("java.lang.IllegalArgumentException: Just testing"));
+        assertTrue(out.contains("at org.apache.camel.language."));
+    }
+
+    public void testException() throws Exception {
+        exchange.setException(new IllegalArgumentException("Just testing"));
+
+        Exception out = SimpleLanguage.simple("exception").evaluate(exchange, Exception.class);
+        assertNotNull(out);
+        assertIsInstanceOf(IllegalArgumentException.class, out);
+        assertEquals("Just testing", out.getMessage());
+    }
+
     public void testBodyAs() throws Exception {
         assertExpression("${bodyAs(String)}", "<hello id='m123'>world!</hello>");
         assertExpression("${bodyAs('String')}", "<hello id='m123'>world!</hello>");