wsmonitorでSOAPメッセージをモニタする
「トラフィックモニタを使わずにSOAPメッセージをモニタする方法 - Tomute’s Notes」で書いたように、JAX-WSを使っている場合にはシステムプロパティを設定する事で、トラフィックモニタを利用しなくてもSOAPメッセージをモニタする事が出来る。
ただ、JAX-WS以外を使っている場合にはこの方法は使えないようなので、GlassFishプロジェクトで開発されているオープンソースのWebサービスモニタのwsmonitorを使ってみる。その使い方は以下。
- wsmonitorをダウンロード
- 以下のコマンドを実行してjarファイルを展開(Windowsの場合はjarファイルをダブルクリックして展開可能)
java -jar wsmonitor-installer-XX.jar - 設定ファイル(wsmonitor\etc\config.xml)を自分の環境に合わせて編集する
デフォルトではwsmonitorはポート4040でSOAPメッセージを受信し、ポート8080に転送するように設定されている。受信ポートを変更したい場合にはlistenPort、転送先のポートを変更したい場合にはtargetPortのパラメータをそれぞれ変更する。 - 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");