Spring DSL を使用して次のルートを定義しています。
<camelContext id="myapp-camel-ctx" errorHandlerRef="deadLetterErrorHandler"
xmlns="http://camel.apache.org/schema/spring">
<route id="myapp-camel-route">
<from uri="timer://runOnce?repeatCount=1&delay=10" />
<to uri="bean:fizzBean?method=doFizz" />
<!-- What I call the "Smooks processor" -->
<to uri="smooks://my-smooks-config.xml" />
<to uri="bean:buzzBean?method=doBuzz" />
</route>
</camelContext>
<bean id="deadLetterErrorHandler" class="org.apache.camel.builder.DeadLetterChannelBuilder">
<property name="deadLetterUri" value="bean:errorCatcher" />
</bean>
<bean id="errorCatcher" class="com.me.myorg.myapp.ErrorCatcher">
<property name="foo" value="BAR" />
</bean>
の出力 (送信メッセージ) によってはfizzBean
、Smooks プロセッサが例外をスローし、アプリケーション全体がハングすることがあります。これを行うと、アプリのログに例外がスローされていることがわかります (実際には MySQL の例外です) が、それをラップ/キャッチして処理を続行する方法がわかりません。上記の設定があれば、スローされた MySQL 例外が処理され、ルートが処理を続行すると考えました。代わりに、これらの Smooks/MySQL 例外がスローされたときにメソッドが実行されたErrorCatcher
という証拠がアプリ ログに表示されません。ErrorCatcher#handle
ここで何か間違って設定しましたか? そのプロセッサ内から例外がスローされてアプリ全体がハングするのを防ぐために、(Smooks プロセッサの URI 構成などを介して) 他にできることはありますか? 前もって感謝します!