1

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&amp;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 構成などを介して) 他にできることはありますか? 前もって感謝します!

4

2 に答える 2

0

あなたの構成は正しいようです。それが機能することを確認したい場合は、次のようにハンドルメソッドの署名を変更できます

public void handle(Exception exception, Exchange exchange) {
    System.out.println("Got Exception..."+exception.getMessage());
    System.out.println("Exchange is :"+exchange);
    }

これで、コンソールで結果を確認できます...

于 2013-04-03T06:25:39.600 に答える