java - Camel - 捕获全局 onException 中抛出的异常

标签 java spring exception apache-camel

我试图在全局 onException 中捕获我自己的异常。在捕获 Jaxb 异常后,我抛出了异常。但是 CustomException 不会被 onException 捕获

onException(Exception.class)
    .handled(true)
    .log("Globally Caught CustomException") 
    .end();

from("start:direct")
    .doTry()
        .unmarshal(soapMessage)
    .doCatch(JAXBException.class)
        .log("Locally Caught JAXBException")
        .throwException(new CustomException()
    .endDoTry();

最佳答案

根据https://people.apache.org/~dkulp/camel/try-catch-finally.html (请参阅Camel错误处理已禁用部分),当使用doTry .. doCatch .. doFinally时,Camel错误处理程序不适用。因此,任何 OnException 都不会被触发。

如果您想使用 OnException 捕获异常,您应该直接抛出它,而不是在 DoTry .. DoCatch 内。现在您可能会考虑创建两个 onException,一个处理 Exception.class,另一个处理 JAXBException.class

onException(Exception.class)
            .handled(true)
            .log("Globally Caught CustomException")
            .end();
onException(JAXBException.class)
            .handled(true)
            .throwException(new CustomException())
            .end();

但是第一个 onException 不会被调用,因为 Camel 不允许在已经处理错误的情况下进行进一步的错误处理。这是由 org.apache.camel.processor.FataFallbackErrorHandler 完成的,它捕获新的异常,记录警告,将其设置为 Exchange 上的异常,并停止任何进一步的路由(Camel In Action ,第二版)。

关于java - Camel - 捕获全局 onException 中抛出的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56851500/

相关文章:

java - Spring Swagger2集成ServletContext Autowiring 问题

spring - 找不到 CacheableOperation[] 缓存的名为 '' 的缓存

java - ArrayList.toArray() 抛出 NullPointerException

java - 我收到错误 User_ID_seq.nextval 未知列

java - 在java swing上从子框架管理父框架

java - 发送 JMS 消息的单元测试代码

php - 异常查询ID

java - 当我执行 Keyboard.SetShifted 时应用程序崩溃

java - 将依赖值注入(inject)枚举

asp.net - 如何重新路由异常而不将异常标记为已处理