2016-08-25 7 views
1

私はSpringインテグレーションが初めてです。スプリッタ後のスプリング統合ハンドルの例外

バッチペイロード(json配列) でリクエストがあり、スプリッタを使用してjsonobjectに分割する場合は、 と入力して検証します。

検証の一部が失敗し、エラーチャネルに例外がスローされた場合。

jsObjectの一部がエラー で失敗したことを示すクライアントへの応答をどのようにすることができますか?

errorChannelのハンドラがわからない場合、検証結果がerrorChannelに非同期になるため、役立ちます。

ゲートウェイをこのように呼び出すと、どのように内部の各jsObjectの検証ステータスでペイロード全体の検証結果を構築できますか?

Future<validationResult> r = gateway.send(...)

(ゲートウェイちょうど前方すぐにエンドポイントを以下にリクエスト)

答えて

1

あなたはAggregator EIPに見て取らなければならない:http://www.enterpriseintegrationpatterns.com/patterns/messaging/Aggregator.htmlhttp://docs.spring.io/spring-integration/reference/html/messaging-routing-chapter.html#aggregator

したがって、すべてのオブジェクトが検証のために送信され、その結果(良いか悪いか)が<aggregator>に送信され、そのゲートウェイへの返信のために単一のvalidationResultが作成されます。

+0

助けてくれてありがとう。私はいくつかのテストをしましたが、これには1つの問題があります。スプリッターの後で、メッセージはaggregatorで将来のグループ分けのためにcorrelation_idで割り当てられます。しかし、問題は、splitterの後の要素の1つが例外をスローすると、新しいメッセージが作成され、correlation_idが失われるということです。アグリゲータは、「CorrelationStrategyが失敗しています」と文句を言います。あなたはこれを解決する経験がありますか? – edi

+0

いくつかの下流コンポーネントが例外をスローすると、 'failedMessage'プロパティを持つ' MessagingException'にラップされます。これは、必要な 'sequenceNumber'、' sequenceSize'、 'correlationId'を含む元のヘッダーを抽出することができます。実際には、アグリゲーターに送信する前に、これらのヘッダーを新しく作成したメッセージにコピーします。 –

+0

はい、私もそれを行いますが、私はfailedMessageプロパティをキャッチしませんでした。私はint:service-activatorをエラーチャンネルに接続しようとしましたが、コールバックメソッドはメッセージを入力とし、ペイロードとメッセージのヘッダーを出力しますが、failedMessageプロパティはありません。 – edi

関連する問題