デバッグ時に、クライアントとサーバーとの間の通信を追跡すると役に立つ場合があります。SOAPSpyは、クライアントとサーバーが交換するメッセージを検出できます。メッセージ(正確には、リクエストとレスポンス)はコールに関連付けられています。 図23に、「SOAPSpy」ダイアログ・ボックスを示します。
SOAPSpyは、HTTPプロキシ・サーバーとして機能します。クライアントからHTTPリクエストを受信し、最終的な宛先または別のHTTPプロキシ・サーバーに転送します。SOAPSpyは、SOAPおよびWSDLのメッセージのみでなく、その他のドキュメント(HTMLページやバイナリ・データなど)も追跡できます。ただし、バイナリ・データは、概略的にのみ表示されます。無効なすべてのテキスト文字が疑問符(?)に変換されます。SOAPSpyは、HTTPサーバーのクライアントとして機能することもできます。最終的な宛先に接続するのではなく、SOAPSpyで別のプロキシ・サーバーと通信を行うことができます。
このツールは、Oracle Service Registryサーバー配布のbinサブディレクトリに格納されています。SOAPSpyを起動するには、Windows PlatformsではSoapSpy.batコマンド、またはUNIXマシンでは./SoapSpy.shコマンドを入力します。
Spyingは、最初に、図24に示すように「Spy」メニューから「Start Spying」を選択するか、またはメイン・パネルにある「Spy」アイコンをクリックして起動する必要があります。
ウィンドウの下部には、 図25に示すステータス・バーがあり、ツールの状態に関する情報が示されます。起動すると、ステータス行にプロキシ・ホストおよびポート番号が表示されます。
次のオプションは、SOAPSpyをアクティブ化する際にコマンドラインで使用できます。
--port [PORT]
指定したポートでSOAPSpyを起動します。
--help
ヘルプ画面をコンソールに表示します。
--version
SOAPSpyのバージョンをコンソールに表示します。
宛先に直接接続するのではなく、SOAPSpyで別のプロキシ・サーバーと通信するには、HTTPプロキシ用の標準Javaシステム・プロパティを使用します。
-Dhttp.proxyHost=PROXY_HOST: プロキシ・サーバーのホスト名
-Dhttp.proxyPort=PROXY_PORT: プロキシ・サーバーのポート
ツールをロードするには、次の2つの方法があります。
./SoapSpy
./SoapSpy --port PROXY_PORT
プログラムには、コール・リストおよびメッセージ・ビューアが含まれています。
受信されたコールは、ウィンドウの左側にあるリストに保存されます。コールは選択して確認できます。「Call」メニューまたはコンテキスト・ポップアップを使用すると、不要なコールをリストから削除できます。
メッセージ・ビューアには、図26に示すように、選択したコールが表示されます。すべてのコールには、「HTTP Request」タブおよび「HTTP Response」タブが含まれています。これらのタブには、SOAPSpyで取得した生データが含まれています。SOAPコールには、SOAPメッセージの操作を拡張するために2つの固有のパネル(「SOAP Request」および「SOAP Response」)が含まれています。WSDLコールも同様です。
「SOAP Request」タブは、図27に示すように、SOAPアクション、SOAPメッセージおよび元のリクエストの送信元のターゲットURLで構成されています。すべてのファイルが編集可能です。「Resend」をクリックして、新しいHTTPリクエストを生成します。コール・リストには、再送信されたリクエストが表示されます。
Javaシステム・プロパティhttp.proxyHostおよびhttp.proxyPortを設定する必要があります。 SoapSpyを実行する前に、java -Dhttp.proxyHost=CLIENT_COMPUTER_NAME -Dhttp.proxyPort=4444...コマンドを使用します。たとえば、次のように入力します。
java -Dhttp.proxyHost=%CLIENT_COMPUTER_NAME% -Dhttp.proxyPort=4444 org.my.FooClient
![]() | 重要 |
---|---|
SoapSpyでは、java.netプロキシ・クラスが使用されるため、localhostアドレスは使用されません。これは、クライアントがコールするエンドポイントURLに当てはまります。SoapSpyの使用時にいずれのアクティビティも表示されない場合は、これが原因である可能性があります。サービスをローカルで実行する場合は、java.net.InetAddressクラスを介してマシンのホスト名を取得してください。 |
Oracle Service Registryでは、Log4jロギング・サービスが、ログ・エラー、警告およびその他の情報にラップされます。デフォルトは、次のようになります。
このようなイベントは、すべてREGISTRY_HOME¥log¥logEvents.logに記録されます。
スタック・トレースなどのエラーは、すべてREGISTRY_HOME¥log¥errorEvents.logに記録されます。
動作の記述は、REGISTRY_HOME¥conf¥log4j.config内で構成されています。
カスタム・サーバー・コード(カスタム検証サービスなど)で同じロギング・メカニズムを使用するには、次の手順を実行します。
com.idoox.debug.Categoryをjavaクラスにインポートします。
import com.idoox.debug.Category;
カテゴリの名前を持つ静的インスタンスを作成します。
private static Category log = Category.getCategory("com.company.MyValidationService");
クラス名に従ってカテゴリに名前を付けておくことをお薦めします。カテゴリは、次のように使用できます。
... try{ ... } catch(Exception e){ log.error("Fatal error", e); } ...