Apache camel 驼峰-如何在异常情况下停止路由执行?

Apache camel 驼峰-如何在异常情况下停止路由执行?,apache-camel,Apache Camel,当发现异常时,是否有任何方法可以停止路由执行(显示日志消息后) <doTry> <process ref="messageProcessor"/> <doCatch> <exception>java.lang.IllegalArgumentException</exception> <log messag

当发现异常时,是否有任何方法可以停止路由执行(显示日志消息后)

        <doTry>
            <process ref="messageProcessor"/>
            <doCatch>
                <exception>java.lang.IllegalArgumentException</exception>
                <log message="some message related to the exception" />
            </doCatch>
        </doTry>

java.lang.IllegalArgumentException

请在Spring DSL中提供实现这一点的方法。我已经尝试了,但没有显示日志消息。

在doCatch中添加了一个进程,该进程的stop是骆驼上下文

        <doTry>
            <process ref="messageProcessor"/>
            <doCatch>
                <exception>java.lang.IllegalArgumentException</exception>
                <handled>
                    <constant>true</constant>
                </handled>
                <setHeader headerName="exceptionStackTrace">
                    <simple>${exception.stacktrace}</simple>
                </setHeader>
                <process ref="mandatoryParameterIsNull"/>           
            </doCatch>
        </doTry>

如果您创建一个OneException路由? 像这样:

onException(Exception.class)
        .log("YOUR LOG EXCEPTION");

from("direct:start")...

有很多方法可以做到这一点。除了公认的答案外,您可能还希望使用以下选项之一:

onException(SomeException.class)
.log("Uh oh...")
.stop()
在您的DSL中

或:

在处理器()中


请在此处查看有关此主题的官方文档:

停止当前执行的路由,但路由仍在侦听
route.onException(Throwable.class).process(ThrowableProcessor.NAME).handled(true)

你有没有在Java DSL中找到解决方案?关于这段代码的一些解释可能会有帮助。对此我很抱歉,我写得很快。如果您使用route OneException,您将为所有路由错误创建一个通用异常,因此如果您需要停止执行,我相信这是记录某些内容并停止路由的最佳方式。仅对于rememember,OneException路由是一个普通路由,因此您可以根据需要使用进程或bean。全局范围
OneException()
(在任何路由之外)使用生产者(
log(…)
)创建一个额外路由,其中的
stop()
仅停止此错误处理路由本身,而不是最初引发异常的路由。
onException(SomeException.class)
.log("Uh oh...")
.stop()
exchange.setProperty(Exchange.ROUTE_STOP, Boolean.TRUE);