Apache Camel - 没有捕获异常

时间:2015-12-04 11:35:21

标签: apache-camel

我阅读了相应的文档,但我无法弄清楚为什么我的异常没有被捕获。

这是我的路线配置:

twig:
    form_themes:
        - 'MyAppBundle:form:my_form_theme.html.twig'

现在当JettyClient无法访问时,会抛出 <route id="foo"> <from uri="vm://.../> <doTry> <to uri="jetty:http://127.0.0.1:123/foo?restletMethod=PUT"/> <to uri="ejb:java:global/..?method=method1(${body}, ${headers})"/> <to uri="ejb:java:global/..?method=method2(${body}, ${headers})"/> <doCatch> <exception>java.lang.Exception</exception> <transform> <simple> ${exception.message} </simple> </transform> <to uri="smtp://... /> </doCatch> </doTry> </route> , 路线终止,我收到一封电子邮件。这是理想的行为。

但是当org.apache.camel.CamelExchangeException抛出异常时它没有被捕获,因此路由继续并且 我没有收到电子邮件。

如何让驼峰识别并处理第二种情况中的异常?

解决方案:确保在try-catch块中没有抛出异常-.-

1 个答案:

答案 0 :(得分:0)

这在文档中说明: http://camel.apache.org/try-catch-finally.html

  

禁用Camel错误处理

     

当使用doTry .. doCatch .. doFinally然后是常规的Camel错误   处理程序不适用。这意味着任何onException或喜欢的   不要触发。原因是doTry .. doCatch .. doFinally是   事实上它自己的错误处理程序,它的目的是模仿和工作如何   try / catch /终于在Java中工作。

你最好这样写:

.doCatch(Exception.class)
        // and catch all other exceptions
        // they are handled by default (ie handled = true)
        .to("direct:error")

直接:错误您可以指定在出现问题时该怎么做。