[どのようにして SOAP モニタを有効にするのですか?] [編集日時 2003年9月10日am10:13 版]
SOAP Monitor インストール
(http://www.sosnoski.com/presents/java-xml/axis/axis-monitor.html もご覧下さい)
1) SOAPMonitorApplet.java をコンパイルします。
cd $TOMCAT/webapps/axis
javac -classpath WEB-INF/lib/axis.jar SOAPMonitorApplet.java
2) webapp ルート (例えば tomcat4/webapps/axis) の中に様々な SOAPMonitorApplet*.class ファイルがあるはずです。
3) server-config.wsdd (例えば tomcat4/webapps/axis/WEB-INF/server-config.wsdd) の中でリクエストとレスポンスハンドラチェインに soapmonitor ハンドラを追加します。
<globalConfiguration>
<requestFlow>
<handler name="soapmonitor" type="java:org.apache.axis.handlers.SOAPMonitorHandler"/>
... any existing configuration ...
</requestFlow>
<responseFlow>
<handler name="soapmonitor" type="java:org.apache.axis.handlers.SOAPMonitorHandler"/>
... any existing configuration ...
</responseFlow>
</globalConfiguration>
これにより全ての SOAP メッセージをモニタします。対象別のモニタリングを行うには、特定のサービスに対して requestFlow と responseFlow 要素を追加します。
4) 以下のデプロイメントディスクリプタを使用して SOAPMonitorService をデプロイします。
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<service name="SOAPMonitorService" provider="java:RPC">
<parameter name="allowedMethods" value="publishMessage"/>
<parameter name="className"
value="org.apache.axis.monitor.SOAPMonitorService"/>
<parameter name="scope" value="Application"/>
</service>
</deployment>
5) SOAPMonitorService サーブレットが webapp 設定ファイルでマッピングされているか確認してください。
(例えば tomcat4/webapps/axis/WEB-INF/web.xml)
6) アプリケーションサーバ (tomcat) を再起動してください
これで SOAPMonitor アプレットは http://127.0.0.1/axis/SOAPMonitor で利用可能なはずです。
[一般的な例外について] [編集日時 2004年5月14日pm1:07 版]
一般的な Axis 例外 (Java)
Exception: javax.xml.rpc.ServiceException: Cannot find service: (例外: javax.xml.rpc.ServiceException: サービスが見つかりません:)
ここで起こっていることはおそらく、サービスの修飾名を正しく設定していないことでしょう。つまり名前は単純に修飾なしの文字列ではなく、名前空間の URI が含まれていないといけません。普通は、サービスに関連する WSDL を見て、サービスの QName が構築される際にtargetNamespace 属性の値が使われているか確かめればいいでしょう。
Exception: No client transport named 'null' found! (例外: 'null' という名前のクライアントのトランスポートが見つかりませんでした。)
ここで起こっていることはおそらく、エンドポイントを明示的に設定するのを忘れていたことでしょう。もしあなたのエンドポイントが http スキーマを使用するのであれば、setTargetEndpointAddress 関数を使って Call オブジェクトインスタンスに、あなたのエンドポイントが http スキーマを使用していることを設定する必要があります。多くの初心者は http に基づくサービスを使用するので、setTargetEndpointAddress を呼ぶ前にまずエンドポイントから java.net.URL オブジェクトを作成する必要があります。
Exception: org.apache.axis.ConfigurationException: Can't find handler name:'null' (例外: org.apache.axis.ConfigurationException: 'null' という名前のハンドラが見つかりませんでした)
もし自分のハンドラを書き、それをデプロイメントディスクリプタに追加した際に、<handler> 要素の type 属性の値に java 名前空間接頭辞を忘れると、この例外を見ることになります。
例:
<handler name="myHandler" type="java:GenericHandler" />
java 接頭辞を付け忘れないようにしましょう。クラス名が長くなり、修飾した java クラス名が代わりにここに来ると間違って仮定してしまうことが時々あるので、これは混乱しやすいのです。