Apache Camel: Catch the authentication failed error



我有一条路由来监控Apache Camel的电子邮件。用户名或密码被修改。我想在监控系统中向用户显示关于此更改的消息-例如身份验证失败…

目前我无法捕获路由中的错误。我不知道我做错了什么。对于下面的代码,我从来没有进入doCatch块。

如何在doCatch块中捕获认证失败错误?

错误:

在控制台

中抛出以下错误
> 2022-04-18 11:01:01 [Camel (camel-1) thread #6 - imaps://imap.web.de]
> WARN  o.a.c.component.mail.MailConsumer - Consumer
> Consumer[imaps://imap.web.de?closeFolder=false&disconnect=false&password=xxxxxx&subject=FK100+-+daily&unseen=true&username=XXXXX]
> failed polling endpoint:
> imaps://imap.web.de?closeFolder=false&disconnect=false&password=xxxxxx&subject=FK100+-+daily&unseen=true&username=XXXXX.
> Will try again at next poll. Caused by:
> [javax.mail.AuthenticationFailedException - authentication failed]
> javax.mail.AuthenticationFailedException: authentication failed   at
> com.sun.mail.imap.IMAPStore.protocolConnect(IMAPStore.java:708)   at
> javax.mail.Service.connect(Service.java:364)  at
> org.apache.camel.component.mail.MailConsumer.ensureIsConnected(MailConsumer.java:603)
>   at
> org.apache.camel.component.mail.MailConsumer.poll(MailConsumer.java:128)
>   at
> org.apache.camel.support.ScheduledPollConsumer.doRun(ScheduledPollConsumer.java:202)
>   at
> org.apache.camel.support.ScheduledPollConsumer.run(ScheduledPollConsumer.java:116)
>   at
> java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)
>   at
> java.base/java.util.concurrent.FutureTask.runAndReset(FutureTask.java:305)
>   at
> java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:305)
>   at
> java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
>   at
> java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
>   at java.base/java.lang.Thread.run(Thread.java:833)

代码:

@Component
public class EmailPollingRoute extends RouteBuilder {
static final Logger LOGGER = LoggerFactory.getLogger(EmailPollingRoute.class);
@Override
public void configure() throws Exception {
//@formatter:off
from("direct:processPollingEmail")
.routeId("routeId_EmailPollingRoute") 
.doTry()
.log("doTry")
.pollEnrich("imaps://imap.web.de"
+ "?username=XXXXX&"
+ "password=XXXXX&"
+ "unseen=true&"
+ "closeFolder=false&"
+ "disconnect=false&"
+ "subject=FK100 - daily")
.doCatch(Exception.class)
.process(new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
LOGGER.info("EmailPollingRoute - doCatch - authentication failed");
//final Throwable ex = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Throwable.class);
//exchange.getIn().setBody(ex.getMessage());
}
})

.doFinally()
.log("doFinally")
.endDoTry();
}
}

所以我可以在添加以下属性到urlbridgeErrorHandler=true

后捕获错误
.pollEnrich("imaps://imap.web.de"
+ "?username=XXXXX&"
+ "password=XXXXX&"
+ "unseen=true&"
+ "closeFolder=false&"
+ "disconnect=false&"
+"bridgeErrorHandler=true&"
+ "subject=FK100 - daily")

最新更新