2011-07-14 8 views
0

(ジャワ6、スプリング3、春-WS 2、JAXB2、Tomcatの6)@エンドポイント・アノテーションスプリング-WSエンドポイントの呼び出しをラッピング

は、私は、要求と応答XMLを記録するための要件を持っていますデータベーステーブル。私はが応答XML(または障害)が準備ができているときに、要求のXMLと更新の同じレコードを受信したレコードを作成できるようにしたいと思います。 Spring-WS 2でこれを行う方法はありますか?

XMLをアンマーシャリングする前にエンドポイントの呼び出しをラップして、要求XMLを保存してエンドポイントを呼び出し、最後に応答XMLを保存することができます。応答XMLで更新する必要のあるレコードを識別するために、要求XMLを保存した後に、DBから返された一意のIDを使用します。

すべてのご協力をいただきありがとうございます。

答えて

0

からより多くの情報を得ることができます。

インターセプタを実装します。

org.springframework.ws.server.EndpointInterceptorインターフェイスを実装する必要があります。このインターフェイスでは、要求イベントと応答イベントを処理するメソッドが提供されています。

MessageContextオブジェクトにアクセスすることで、要求メッセージと応答メッセージ(getRequestメソッドとgetResponseメソッド)を取得できます。 また、setPropertyメソッドを使用して、情報を関連付けるレスポンスでアクセス可能なリクエスト瞬間に情報を格納することもできます(たとえば、DB内で更新するレコードのID)。

インターセプタを設定します。

インターセプタは、特定の要求に対して、またはすべてのWebサービスに対してグローバルに設定できます。私はドキュメントからいくつかの設定をコピーします:

<sws:interceptors> 
<bean class="samples.MyGlobalInterceptor"/> 
<sws:payloadRoot namespaceUri="http://www.example.com"> 
<bean class="samples.MyPayloadRootInterceptor"/> 
</sws:payloadRoot> 
<sws:soapAction value="http://www.example.com/SoapAction"> 
    <bean class="samples.MySoapActionInterceptor1"/> 
    <ref bean="mySoapActionInterceptor2"/> 
</sws:soapAction> 
</sws:interceptors> 

<bean id="mySoapActionInterceptor2" class="samples.MySoapActionInterceptor2"/> 
+0

これは私が問題を解決する方法ですが、私の答えを投稿する時間がありませんでした。投稿していただきありがとうございます。 :o) – Mark

0

はい、log4j.propertiesファイルに次の行をコピーして、soap要求と応答を記録できます。

log4j.rootCategory=INFO, stdout 
log4j.logger.org.springframework.ws.client.MessageTracing.sent=TRACE 
log4j.logger.org.springframework.ws.client.MessageTracing.received=DEBUG 

log4j.logger.org.springframework.ws.server.MessageTracing=DEBUG 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%p [%c{3}] %m%n 

あなたがSpring-WS EndpointInterceptorsを使用することができます。このリンクhttp://static.springsource.org/spring-ws/sites/2.0/reference/html/common.html

+0

これは標準出力に記録されますか?もしそうなら、私はそれをインターセプターを使ってカバーしています。しかし、私はデータベースのためにそれを行う方法を知らない。 – Mark

関連する問題