我希望在用户凭据更改的情况下停止路由,为此我想处理
错误处理器
javax.mail.AuthenticationFailedException.class
,但这并没有起作用。from(_getImapSentURL(emailConfiguration)).routeId(routeIdSent)
.onException(javax.mail.AuthenticationFailedException.class)
.process(new EmailErrorHandler()).end()
.process(new EmailContentSentProcessor(user, filterSent));
错误处理器
public class EmailErrorHandler implements Processor {
private static final long serialVersionUID = 1L;
Logger logger = Logger.getLogger(getClass());
@Override
public void process(Exchange exchange) throws Exception {
logger.info("handled");
}
}
在控制台中我看到了这个异常,但是它没有被处理。
哪里出现了错误?
解决方案:
在终端点URL中添加参数consumer.bridgeErrorHandler=true
在路由构建器中添加异常处理程序
onException(Exception.class)
.log("Exception occurred due: ${exception.message}")
.bean(new EmailConsumerExceptionHandler(), "handleException").handled(true)
.end();
实现ExceptionHandler
如果将handle(..)
设置为true,则只能通过这种方式访问异常
Exception cause = originalExchange.getProperty(
Exchange.EXCEPTION_CAUGHT, Exception.class);
关于Apache Camel文档中提到的问题: