wsmonitorでSOAPメッセージをモニタする

トラフィックモニタを使わずにSOAPメッセージをモニタする方法 - Tomute’s Notes」で書いたように、JAX-WSを使っている場合にはシステムプロパティを設定する事で、トラフィックモニタを利用しなくてもSOAPメッセージをモニタする事が出来る。

ただ、JAX-WS以外を使っている場合にはこの方法は使えないようなので、GlassFishプロジェクトで開発されているオープンソースWebサービスモニタのwsmonitorを使ってみる。その使い方は以下。

  1. wsmonitorをダウンロード
  2. 以下のコマンドを実行してjarファイルを展開(Windowsの場合はjarファイルをダブルクリックして展開可能)
    java -jar wsmonitor-installer-XX.jar
  3. 設定ファイル(wsmonitor\etc\config.xml)を自分の環境に合わせて編集する
    デフォルトではwsmonitorはポート4040でSOAPメッセージを受信し、ポート8080に転送するように設定されている。受信ポートを変更したい場合にはlistenPort、転送先のポートを変更したい場合にはtargetPortのパラメータをそれぞれ変更する。
  4. wsmonitor\bin\wsmonitor.bat*1を実行する
    config.xmlを修正した場合には、引数にそのconfig.xmlを指定する。
    詳細なログメッセージを出力する場合には更に-verboseオプションを指定する。


なお、SOAPクライアントが送信するSOAPメッセージも、wsmonitorが待ち受けているポートの方に送信する必要が出てくるが、JAX-WSを使っている場合には以下のようなコードで送信先を変更できる。
(以下はエンドポイントをhttp://localhost:4040/endpointに変更する場合の例)

import javax.xml.ws.BindingProvider;

HelloPort port = helloService.getHelloPort();
BindingProvider bp = (BindingProvider)port;

Map<String, Object> reqContext = bp.getRequestContext();
reqContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY,
 "http://localhost:4040/endpoint");


参照:https://wsmonitor.dev.java.net/

*1:事前にJAVA_HOMEの設定が必要。またJavaをC:\Program Files配下のように空白を含むパスにインストールしている場合には、ダブルクォーテーションで囲む必要がある