Xilai Dai created CAMEL-24651:
---------------------------------

             Summary: Regression on Camel 4.x NPE on evaluation of a Simple 
expression ${exception.stacktrace}
                 Key: CAMEL-24651
                 URL: https://issues.apache.org/jira/browse/CAMEL-24651
             Project: Camel
          Issue Type: Bug
    Affects Versions: 4.22.0, 4.18.4
            Reporter: Xilai Dai


{code:java}
from("timer:Timer_1?repeatCount=1&delay=1000")
.process(new org.apache.camel.Processor() {                             
        public void process(org.apache.camel.Exchange exchange) throws 
Exception {
                        // throw new IllegalArgumentException("Simulated 
processing error");
        }
})              
.setBody().simple("${exception.stacktrace}"); {code}
{code:java}
java.lang.NullPointerException: Cannot invoke 
"java.lang.Throwable.printStackTrace(java.io.PrintWriter)" because "e" is null  
  
at 
org.apache.camel.support.ExceptionHelper.stackTraceToString(ExceptionHelper.java:41)
 
at 
org.apache.camel.support.LanguageHelper.exceptionStacktrace(LanguageHelper.java:80)
  
at 
org.apache.camel.support.builder.ExpressionBuilder$16.evaluate(ExpressionBuilder.java:641)
   
at 
org.apache.camel.support.ExpressionAdapter.evaluate(ExpressionAdapter.java:45)  
     
at 
org.apache.camel.processor.SetBodyProcessor.process(SetBodyProcessor.java:45)   
     
at 
org.apache.camel.support.processor.DelegateAsyncProcessor.process(DelegateAsyncProcessor.java:104)
 {code}
The issue is not present on Camel 3.x and the null value of 
exception.stacktrace is properly handled.

Proposed fixes:
{code:java}
// org.apache.camel.support.LanguageHelper
public static String exceptionStacktrace(Exchange exchange) {
    Exception exception = exception(exchange);
    if (exception == null) {
        return null;
    }
    return ExceptionHelper.stackTraceToString(exception);
} {code}
{code:java}
// org.apache.camel.support.ExceptionHelper
public static String stackTraceToString(Throwable e) {
    if (e == null) {
        return null;
    }
    final StringWriter writer = new StringWriter();
    final PrintWriter printWriter = new PrintWriter(writer, true);
    e.printStackTrace(printWriter);
    return writer.toString();
} {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to