未触发特定于骆驼路线的 onException

Camel route specific onException not triggered

下面是代码:

    <route id="StartMyRoute">
      <from uri="direct:StartMyRoute"/>
      <to uri="direct:myRoute2"/>
      <onException>
        <exception>SpecificException</exception>
            <to uri="direct:myRoute3"/>
      </onException>
    </route>

我正在尝试使用 Java DSL 做同样的事情:

    from("direct:StartMyRoute")
                .routeId("StartMyRoute")
                .to("direct:myRoute2")
                .onException(SpecificException.class)
                .to("direct:myRoute3");

没有用,但后来我在全局范围内尝试了 onException,但它起作用了。 我有一些特定于路由的功能应该在 onException(...) 处理程序中执行,所以我不能使用全局范围。

下面是我的代码,它具有全局范围:

    onException(SpecificException.class)
                .to("direct:myRoute3");

    from("direct:StartMyRoute")
                .routeId("StartMyRoute")
                .to("direct:myRoute2");

谁能帮我理解为什么特定路由 onException(...) 没有被触发?

使此解决方案有效:

from("direct:StartMyRoute")
    .routeId("StartMyRoute")
    .onException(SpecificException.class)
    .to("direct:myRoute3")
    .end
    .to("direct:myRoute2");

通常你可以捕获所有的异常(如果条件过滤)

onException(Exception.class)
  .process(new Processor() {
    public void process(Exchange exchange) throws Exception {
        if (exchange.getProperty(Exchange.EXCEPTION_CAUGHT) instanceof SpecialException.class) {
            // TODO something...
        }
    }).handled(true);