0

私は春の統合に慣れていないので、用語を誤用する可能性があります。SOAP Web サービス要求をリッスンする ws:inbound-gateway があります。

<int-ws:inbound-gateway id="myInGW"
                        request-channel="headersMapPopulationChannel"
                        reply-channel="ws-response-channel"
                        marshaller="marshaller"
                        unmarshaller="marshaller"/>

着信要求を headersMapPopulationChannel に送信し、メッセージをアダプター (JAXB クラスからドメインに変換するため) に送信し、スプリッターはそれを検証、ロギング、永続化に分割します。永続化した後、私はビジネス関連のものをリクエストで実行しています。例外が発生した場合に何をすべきかを管理できるように、これらすべてに例外制御ポイントを設定したいと考えています。わざとビジネスクラスにthrow exception文を入れています。例外がスローされますが、私のチャネルは例外を取得していないようです。構成:

<int-ws:inbound-gateway id="myInGW"
                        request-channel="headersMapPopulationChannel"
                        reply-channel="ws-response-channel"
                        error-channel="ws-error-channel"
                        marshaller="marshaller"
                        unmarshaller="marshaller"/>

<int:channel id="ws-error-channel"/>

<int:service-activator input-channel="ws-error-channel"
                       expression="@exceptionHandlerService.handleThrowable(payload)"/>
<bean id="exceptionHandlerService" class="pack.integration.service.ExceptionHandlerService"/>

また、最も外側のチャネルでの例外の制御が正しいかどうかもわかりません。メッセージを転送する場所で例外をリッスンする必要がありますか?

4

2 に答える 2

1

これは、例外を処理する正しい方法です。

例外は でラップされ、 のペイロードとして にMessagingException送信されます。には、(元の例外) と(例外の原因となったメッセージ) の2 つのプロパティがあります。error-channelErrorMessageMessagingExceptioncausefailedMessage

SOAP エラーをクライアントに返す場合は、エラー チャネル フローで例外をスローする必要があります。

チャネルに が表示されない場合は、ErrorMessage別の何かが例外をキャッチしている必要があります。

デバッグ ログを有効にして、システム全体のメッセージを追跡することをお勧めします。

于 2013-04-04T12:46:04.490 に答える
0

また、セグメント ゲートウェイを使用して、すべての例外を別のメッセージ フローにリダイレクトし、そこから処理方法を決定しました。

于 2013-04-12T16:36:03.270 に答える