Search code examples
error-handlingexceptionapache-cameldead-letter

Camel Dead Letter Channel for all exceptions


Im creating a dead letter channel errorhandler like below

errorHandler(deadLetterChannel("direct:myDLC").useOriginalMessage().maximumRedeliveries(1));

from("direct:myDLC")
.bean(MyErrorProcessor.class);

The Bean MyErrorProcessor should be able to handle all types of checked and unchecked exceptions like below..

public void process(Exchange exchange) throws Exception {
    Exception e=(Exception)exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class);
    e.printStackTrace();
    if(e instanceof MyUncheckedException){
        logger.error("MyUncheckedException: "+((MyException) e).getErrorCode()+" : "+((MyException) e).getErrorDesc());
    }else if(e instanceof MyException){
        logger.error("MyException: "+((MyException) e).getErrorCode()+" : "+((MyException) e).getErrorDesc());
    }
}

But after exception is handled the original message should be redirected to route's endpoint.. how to continue route once exception handled like this??


Solution

  • Using continued() will work, it will ignore the error and continue to process, so then you would probably want to handle the specific Exception

    see http://camel.apache.org/exception-clause.html

    onException(MyException.class)
        .continued(true)
    ;
    

    If you would use .useOriginalMessage() on this exception handling, the original message would be the message that is continued.