[[WhyistheexceptionnullwhenIuseonException-WhyistheexceptionnullwhenIuseonException]]
= Why is the exception null when I use onException?

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

[source,java]
----
.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_CAUGHT`, as shown below:

[source,java]
----
.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()
----
