2015-12-04 3 views
0

Я прочитал соответствующую документацию, но я не мог понять, почему мое исключение не зацепило.Apache Camel - Исключение не поймано

Это моя конфигурация маршрута:

<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> 

Теперь, когда JettyClient не достижимости org.apache.camel.CamelExchangeException брошено, маршрут заканчивается, и я получаю по электронной почте. Это желаемое поведение.

Но когда method1 выбрасывает исключение, он не улавливается, поэтому маршрут продолжается и Я не получаю электронное письмо.

Как я могу заставить верблюда распознать и обработать исключение во втором случае?

Решение: Убедитесь, что исключение не брошено внутри примерки поймать блок -.-

+0

Вы пытаетесь исключить этот метод1? Если вы не объясняете исключение, верблюд поймает его в DefaultErrorHandler, так что маршрут тоже заканчивается – dey

+0

Да, он выдает исключение. – sinclair

+0

Вы пытаетесь вызвать код в методе? потому что ваш 'uri' ошибочен, попробуйте это: ' ' Я не знаю, почему верблюд даже начинает с этого. – dey

ответ

0

Об этом говорится в документации: http://camel.apache.org/try-catch-finally.html

Camel обработка ошибок отключена

При использовании doTry .. doCatch .. doFinally после этого регулярная ошибка Camel Обработчик не применяется. Это означает, что anyExException или понравилось не триггер. Причина в том, что doTry .. doCatch .. doFinally находится в факте своего собственного обработчика ошибок и что он стремится имитировать и работать так, как try/catch/finally работает на Java.

Вы, вероятно, лучше, чтобы написать это:

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

В прямой: ошибка вы можете указать, что делать в случае, если что-то пойдет не так.

+0

Есть ли способ настроить это в моей выше xml-структуре? – sinclair

+0

Кстати, какое исключение выбрано в методе 1? –

+0

java.lang.Exception – sinclair

Смежные вопросы