указание верблюжьего маршрута c onException не вызывается - PullRequest
0 голосов
/ 16 марта 2020

ниже приведен код

<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 в глобальной области видимости, которая работал. У меня есть некоторые функции, определяющие маршрут c, которые должны выполняться на исключении, чтобы я не мог использовать глобальную область видимости. ниже мой код, который имеет глобальную область действия

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

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

Может кто-нибудь помочь мне понять, почему не запускается спецификация маршрута c onException?

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

В общем случае вы можете перехватить все исключения (фильтрация по условию)

 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);
0 голосов
/ 17 марта 2020

получил решение

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