2

誰かが次の問題を解決する際の経験を共有してくれたら、非常に感謝します。私はJDK実装にSOAPサービスを持っています(これはMetroだと思います)。

ロギングの目的で、着信リクエストと生成されたレスポンスの両方の本文を抽出する必要があります。サーバー側で SOAPHandler を実装して取得しようとしています。ハンドラーを Spring Bean として構成します。私が見つけたすべての例は、基本的にOracleドキュメントの例を複製しています: https://docs.oracle.com/cd/E23943_01/web.1111/e13734/handlers.htm#WSADV170 :

      public boolean handleMessage(SOAPMessageContext messageContext)
  {
     Boolean outboundProperty = (Boolean)
         messageContext.get (MessageContext.MESSAGE_OUTBOUND_PROPERTY);

     if (outboundProperty.booleanValue()) {
         System.out.println("\nOutbound message:");
     } else {
         System.out.println("\nInbound message:");
     }

     System.out.println("** Response: "+messageContext.getMessage().toString());
    return true;
  }

ここでは、SOAP メッセージ コンテキストのブール プロパティの 1 つを読み取ります。これは、私が見ているように、要求または応答のいずれかに対応します。

しかし、私の実験では、デバッガーは応答に対応するブランチ (else-branch) には決して入りません。そのようなハンドラーは、リクエストとレスポンスの両方をどのようにトレースすることになっていますか?

私はまた、どのメッセージが messageContext.getMessage() として読み取られるのだろうか: 受信 (要求) または送信 (応答) ですか?

handleMessage() メソッドを実装することで、リクエストとレスポンスの両方にアクセスできるようになるのでしょうか? 単一のハンドラーがリクエストとそのレスポンスの両方をインターセプトしますか? 例を誤解しましたか?

そして... SOAPHandler - すべてのリクエスト (リクエストとレスポンスのペア) の特定のインスタンスですか? ありがとうございました

4

1 に答える 1

2

SoapHandler でこれを試してください:

Boolean isRequest = (Boolean) context.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY);
 if (isRequest) {
//handle request
 } else {
//handle response
         }

そして、これは LogicalHandler の場合:

 Boolean outboundProperty = (Boolean)
         messageContext.get (MessageContext.MESSAGE_OUTBOUND_PROPERTY);
     if (outboundProperty.booleanValue()) {
            System.out.println("\nOutbound message:");
     } else {
            System.out.println("\nInbound message:");
     }
于 2015-09-23T11:33:06.657 に答える