Why is the exception null when I use onException?

If you use onException to handle exceptions, such as shown below:

.onException(Exception.class).handled(true)
        .process(new Processor() {
          @Override
          public void process(Exchange exchange) throws Exception {
                Exception cause = exchange.getException());
                // why cause exception is null ???
          }
        })
.end()

Then make notice that because you use handled(true), then the caused exception is no longer available from exchange.getException(), because we told Camel that we will handle the exception.

Instead you can access the caused exception from a property on the exchange with the key Exchange.EXCEPTION_CAUGT, as shown below:

.onException(Exception.class).handled(true)
        .process(new Processor() {
          @Override
          public void process(Exchange exchange) throws Exception {
                Exception cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class);
                // we now have the caused exception
          }
        })
.end()
  • No labels