У меня есть определение Camel Blueprint с двумя контекстами Camel, каждый из которых содержит один маршрут.
Вызывается маршрут первого контекста, который, в свою очередь, вызывает маршрут второго контекста. Теперь, если во втором маршруте выдается исключение и onException
устанавливает handled=true
, в первом блоке маршрутов doFinally
вызывается только первый процессор.
Вот мое определение Blueprint:
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:camel="http://camel.apache.org/schema/blueprint"
xsi:schemaLocation="
http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">
<bean id="myException" class="java.lang.RuntimeException">
<argument value="Booom" />
</bean>
<camelContext id="firstContext" trace="false" xmlns="http://camel.apache.org/schema/blueprint">
<route id="firstRoute">
<from uri="direct-vm:start"/>
<doTry>
<to uri="log:FIRST_TRY"/>
<to uri="direct-vm:generateException"/>
<to uri="log:SECOND_TRY"/>
<doFinally>
<to uri="log:FIRST_FINALLY"/>
<to uri="log:SECOND_FINALLY"/>
</doFinally>
</doTry>
<log message="The message contains ${body}"/>
<to uri="mock:result"/>
</route>
</camelContext>
<camelContext id="secondContext" trace="false" xmlns="http://camel.apache.org/schema/blueprint">
<onException>
<exception>java.lang.Exception</exception>
<handled>
<constant>true</constant>
</handled>
</onException>
<route id="secondRoute">
<from uri="direct-vm:generateException"/>
<throwException ref="myException"/>
</route>
</camelContext>
</blueprint>
Распечатывается только <to uri="log:FIRST_FINALLY"/>
. Я не вижу <to uri="log:SECOND_FINALLY"/>
. Я что-то упустил здесь? Любая помощь приветствуется.
Я использую Camel 2.10.6 внутри Apache Servicemix 4.5.2.
С уважением Доминик