WebServices - Axis

WebServices - Axis - FAQ/Wiki

[翻訳者注: このページは FAQ/Wiki ページを静的に翻訳したものです。最新の内容につきましては本家 FAQ/Wiki をご覧下さい。]

トラブルシューティング

  1. [どのようにして問題の原因を突き止めるのですか?] [編集日時 2003年7月4日am11:49 版]

    Axis の問題の原因を突き止める

    サーバ側

    1. HappyAxis.jsp は機能していますか? もし機能していないのであれば、XML パーサのバージョン問題かもしれません。
    2. HappyAxis はハッピーですか? 必要なライブラリは全て必要です。
    3. あなたが必要としているオプションのライブラリはありますか? 添付は、余分なライブラリなしには機能しません。
    4. サービスがリストアップされていますか?

    一般的なサーバ側の問題は

    1. ライブラリがない
    2. ライブラリが正しい場所にない
    3. XML パーサが Axis に100%準拠していない。詳細については [XML Parser Notes (XML パーサの注意点)] をご覧下さい。
    4. クラスパスに複数の XML パーサがある。

    Admin Client

    多くの人は Admin Client の問題を抱えていて、それに合わせてエラーコードの理解に苦しみます。

    Admin Client アプリケーションは SOAP を使って Axis の (localhost の) コピーと通信します。デフォルトでは http://localhost:8080/axis/services/Admin と通信します。もしあなたのアプリケーションサーバが違うポートにある、あるいは Axis が axis という名前と違う webapp 名の元にホストされている場合、エラーを受け取ることになります。おそらく HTTP エラーコードが404か302で、引き起こした AxisFault 例外のゴミの山に全て束ねられていることでしょう。

    クライアントを通信させたい "endpoint" にウェブブラウザを向けさせましょう。もし 'ここにサービスがあります' メッセージを受け取らなければ、AdminClient は機能しません。

    クライアント

    一般的なクライアントの問題は

    1. クラスパスの設定。添付を行いたいときは mail.jar と activation.jar を含めること、そして正しい XML パーサを使用することをおぼえておきましょう。詳細については [XML Parser Notes (XML パーサの注意点)] をご覧下さい。
    2. プロキシの設定。プロパティを設定する必要があります。http.proxyHosthttp.proxyPort が、システムの host:port 設定を指すようにします。さらなる情報については [How to Configure a Proxy (プロキシの設定方法)] をご覧下さい

  2. [どのようにして SOAP トラフィックをモニタするのですか?] [編集日時 2004年5月16日am6:10 版]

    質問: どのようにして SOAP トラフィックをモニタするのですか?

    回答: 様々なオプションが利用可能です。

    1. [TCPMON] は Axis に含まれています。
    2. [SOAP Monitor] は Axis に含まれています。
    3. [Soapmeter] は オープンソースの、TCPMON が機能強化されたバージョンです。
    4. [SOAPscope] は Mindreef による、安い商用製品です。
    5. [Microsoft Network Monitor] は Microsoft Windows Systems Management Server (SMS) に含まれています。
    6. [Microsoft SOAP Trace] は SOAP Toolkit 3.0 に含まれています。
    7. [AmberPoint Express] は商用のWebサービス開発管理ツールです。(開発用はフリーです)。
    8. [Eclipse Web Service Validation Tools][Eclipse] で使用する、オープンソースのプラグインです。

    質問: どのようにしてポート衝突をモニタ、あるいは検出するのですか?

    回答: Microsoft Windows のもとでは以下のオプションがあります。

    1. [Microsoft PortQry Command Line Port Scanner]
    2. [Microsoft Port Reporter Tool]

  3. [どのようにして 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 で利用可能なはずです。


  4. [一般的な例外について] [編集日時 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 クラス名が代わりにここに来ると間違って仮定してしまうことが時々あるので、これは混乱しやすいのです。