WebServices - Axis

WebServices - Axis - FAQ/Wiki

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

一般的な質問

  1. [どのようにして自分のアプリケーションサーバに Axis をインストールするのですか?] [編集日時 2004年4月15日pm12:45 版]

    インストール情報

    Axis は複数のアプリケーションサーバプラットフォームでのインストールを対象としているので、ユーザはさらにインストールの複雑さの問題に直面します。

    アプリケーションサーバに関する注意

    1. [Apache Tomcat]
    2. [IBM WebSphere]
    3. [JBoss]
    4. [Sun One Application Server]
    5. [Jetty]
    6. [Weblogic 6.1sp2]
    7. [Orion]
    8. [New Atlanta ServletExec]

    さらに、こちらもご覧下さい。

    1. [Standalone Mode (スタンドアローンモード)]
    2. [Diagnostics (問題の解決)]
    3. [XML Parser Notes (XML パーサに関する注意)]

  2. [Java2WSDL/WSDL2Java/AdminClient/TCPMon はどのようにして使用するのですか?] [編集日時 2004年5月22日am7:30 版]

    はじめに

    Axis には、新しいユーザにとって使い方がかなり基本的なコマンドラインツールがあります。これらは wsdl2java、java2wsdl、tcpmon、adminclient です。これらのツールは全て java を介して呼び出す必要があり、正しく動かすためにはかなり複雑なクラスパスを必要とします。

    java [クラスパス] [クラスの完全修飾名] パラメータ

    このようにしてツールを使うのはとてももどかしいです。というのもコマンドラインはとても長く、間違いやすいからです。ですからいくつかの役立つツールを作成したほうが賢いでしょう。

    誰かこの unix バージョンを作成してくれませんか? - AndrewPremdas

    コマンドラインツールの設定

    これから axis 用のいくつかの便利なバッチファイルを作成します。これらをあなたのパスに入れておくとよいでしょう。以下のものを作成します。

    setaxiscp - ツールが必要とするクラスパスを入れておく環境変数 AXIS_CP を設定します
    java2wsdl - java2wsdl を起動します
    wsdl2java - wsdl2java を起動します
    adminclient - adminclient を起動します
    tcpmon - tcp モニタツールを起動します

    以上の事をする前に、ツールのロギングを設定します。

    ロギングの設定

    全てのコマンドラインツールはロギングを持っています。ですからロギングが正しく初期化されることを保証するために簡単な log4j.properties ファイルを作成します。

    # axis 用の簡単な log4j 設定 #
    # ログメッセージを直接 stdout へ #
    log4j.appender.stdout=org.apache.log4j.ConsoleAppender
    log4j.appender.stdout.Target=System.out
    log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
    log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
    
    # ここでロギングレベルを変更
    log4j.rootLogger=info, stdout 
    

    これを、これから LOG4J_PROPERTIES_HOME と定義する場所に置く必要があります。

    クラスパスの設定

    コマンドラインツールは以下の jar ファイルにアクセスする必要があります。

    全ての axis jar ファイル
    activation.jar
    mail.jar
    xml パーサの jarファイル
    log4j.properties ファイル

    ですからまずしなくてはならないことは、これらの場所へのパスを作成することです。

    set AXIS_HOME=C:\lib.dir\axis-1_2beta
    set ACTIVATION_HOME=C:\lib.dir\jaf-1.0.2
    set MAIL_HOME=C:\lib.dir\javamail-1.3.1
    set XML_HOME=C:\lib.dir\xalan-j_2_6_0\bin
    set LOG4J_PROPERTIES_HOME=C:\axisUtils
    
    set AXIS_LIB=%AXIS_HOME%\lib
    

    次にそれぞれのライブラリへのパスを追加します。これを一度に行います。なぜならユーザガイド (http://ws.apache.org/axis/java/user-guide.html) やインストールガイド (http://ws.apache.org/axis/java/install.html#deploy) に従ってもできなかったからです。これによりタイプミスによってもたらされるいかなる問題も突き止めやすくなります。

    set AXISCP=.
    set AXISCP=%AXISCP%;%ACTIVATION_HOME%\activation.jar
    set AXISCP=%AXISCP%;%AXIS_LIB%\axis.jar
    set AXISCP=%AXISCP%;%AXIS_LIB%\commons-discovery.jar
    set AXISCP=%AXISCP%;%AXIS_LIB%\commons-logging.jar
    set AXISCP=%AXISCP%;%AXIS_LIB%\jaxrpc.jar
    set AXISCP=%AXISCP%;%AXIS_LIB%\saaj.jar
    set AXISCP=%AXISCP%;%AXIS_LIB%\log4j-1.2.8.jar
    set AXISCP=%AXISCP%;%AXIS_LIB%\wsdl4j.jar
    set AXISCP=%AXISCP%;%MAIL_HOME%\mail.jar
    set AXISCP=%AXISCP%;%XML_HOME%\xml-apis.jar
    set AXISCP=%AXISCP%;%XML_HOME%\xercesImpl.jar
    

    次に、パスに log4j.properties の場所を追加します。

    set AXISCP=%AXISCP%;%LOG4J_PROPERTIES_HOME%
    

    これを setaxiscp.bat として保存します。完全なバージョンがこのページの一番最後にあります。

    コマンドラインツールを呼び出す便利なツールを作成する

    各ツールのバッチファイルを作成します。

    java2wsdl.bat

      java -cp %AXISCP% org.apache.axis.wsdl.Java2WSDL %*
    

    wsdl2java.bat

      java -cp %AXISCP% org.apache.axis.wsdl.WSDL2Java %*
    

    adminclient.bat

      java -cp %AXISCP% org.apache.axis.client.AdminClient %*
    

    tcpmon.bat

      java -cp %AXISCP% org.apache.axis.utils.tcpmon %*

    使い方

    コマンドウィンドウを開いて setaxiscp を実行すれば他のバッチファイルを使うことができます。ヘルプを見るには -h パラメータだけを渡します。

    setaxiscp.bat
    @ECHO OFF
    
    REM Locations: Change these to match your environment
    set AXIS_HOME=C:\lib.dir\axis-1_2beta
    set ACTIVATION_HOME=C:\lib.dir\jaf-1.0.2
    set MAIL_HOME=C:\lib.dir\javamail-1.3.1
    set XML_HOME=C:\lib.dir\xalan-j_2_6_0\bin
    set LOG4J_PROPERTIES_HOME=C:\axisUtils
    
    set AXIS_LIB=%AXIS_HOME%\lib
    
    REM Create the class path
    set AXISCP=.
    set AXISCP=%AXISCP%;%ACTIVATION_HOME%\activation.jar
    set AXISCP=%AXISCP%;%AXIS_LIB%\axis.jar
    set AXISCP=%AXISCP%;%AXIS_LIB%\commons-discovery.jar
    set AXISCP=%AXISCP%;%AXIS_LIB%\commons-logging.jar
    set AXISCP=%AXISCP%;%AXIS_LIB%\jaxrpc.jar
    set AXISCP=%AXISCP%;%AXIS_LIB%\saaj.jar
    set AXISCP=%AXISCP%;%AXIS_LIB%\log4j-1.2.8.jar
    set AXISCP=%AXISCP%;%AXIS_LIB%\wsdl4j.jar
    set AXISCP=%AXISCP%;%MAIL_HOME%\mail.jar
    set AXISCP=%AXISCP%;%XML_HOME%\xml-apis.jar
    set AXISCP=%AXISCP%;%XML_HOME%\xercesImpl.jar
    
    ECHO set up classpath
    
    REM set logging to the console using log4j
    set AXISCP=%AXISCP%;%LOG4J_PROPERTIES_HOME%
    
    ECHO initialised logging
    
    ECHO Should now be able to call
    ECHO     adminclient, tcpmon, wsdl2java, java2wsdl /axis/ja.
    

  3. [Axis の使用例はどこで見つけることができますか?] [編集日時 2004年5月23日pm3:01 版]

    質問: Axis の使用例はどこで見つけることができますか?

    回答: ここにいくつかの参考資料があります。


  4. [自分のサービスと名前空間マッピングをどのようにして関連させることができますか?] [編集日時 2003年4月5日am7:46 版]

    質問: 自分のサービスと名前空間マッピングをどのようにして関連させることができますか?

    回答: あなたのサービスの WSDD は以下のようになるでしょう。

     <service name="MyService" provider="java:RPC">
       <namespace>http://my.com/MyServiceNamespace</namespace>
       /axis/ja. 
     </service> 
    

  5. [どのようにしてアプリケーションサーバなしで Axis を使用することができますか?] [編集日時 2004年3月18日am9:01 版]

    質問: どのようにしてアプリケーションサーバなしで Axis を使用することができますか?

    回答: Axis には秘密のスタンドアローンモードがあります。その機能は本来、実際の開発のためではなくスタンドアローンテストのためにあるので秘密なのです。その機能はサーブレット API のまさにそのままの実装を持っているので、HTTP トランスポートを実装する AxisServlet をホストすることができます。

    より詳細な情報と、なぜサポートされていないかの警告については、axis.transport.http パッケージにある SimpleAxisServer クラスをご覧下さい。


  6. [Axis はどのようにして私のバックエンドサービスオブジェクトを作成しますか? これをコントロールすることはできますか?] [編集日時 2003年7月16日pm8:14 版]

    質問: Axis はどのようにして私のバックエンドサービスオブジェクトを作成しますか? これをコントロールすることはできますか?

    回答: Axis はサービスに対して "scope" パラメータをサポートします。このパラメータには、"request" (各リクエストごとにサービスに対して新しいオブジェクトを作成する。これがデフォルトです。)、"session" (各セッションごとに新しいオブジェクトを関連付ける)、"application" (全てのユーザはたった一つのオブジェクトを共有する)を設定することができます。詳細については Axis ユーザガイドの Scoped Services を参照してください。

    警告: もしスコープに "session" あるいは "application" を設定すれば、制御の複数のスレッドがあなたのオブジェクトのメソッドに同時にアクセスする可能性があります。このような場合において、あなたのオブジェクトがスレッドセーフであることを保証するのはあなたの責任です。


  7. [Axis はどのようにして、どのデプロイされたサービスを呼び出すかを解決しますか?] [編集日時 2003年4月5日am7:32 版]

    質問: Axis はどのようにして、どのデプロイされたサービスを呼び出すかを解決しますか?

    回答: Axis には、3つの組み込みオプションがあり、また自分用のカスタマイズができる、柔軟性のあるディスパッチ機構があります。Axis におけるサービスへのディスパッチは、実際には MessageContext のサービスフィールドを設定することを意味します。なぜならディスパッチはあなたが設定した様々なハンドラの中を流れていくからです。一度サービスが設定されると、エンジンはサービスを適切な場面で呼び出すことができます。結局、誰が設定を行うのですか? それは、設定を行いたいあらゆるハンドラです。Axis におけるデフォルトのディスパッチ機構は URL によって行われます。ですからもし http://myhost/axis/services/WeatherReport にアクセスしたら "WeatherReport" サービスを受けることになります。Axis における HTTP トランスポートが、リクエストチェインにデプロイされた URLMapper (org.apache.axis.handlers.http.URLMapper) ハンドラを持っているので、この機構が働きます。URLMapper は入力された URL を受け取り、その最後の部分をサービスの名前として取り出し、現在の EngineConfiguration の中からその名前のサービスを検索しようとします。

    同じく、SOAPAction HTTP ヘッダを介してディスパッチするように、HTTPActionHandler をデプロイすることができます。自分の好きなようにサービスを設定することもできます。例えば、もし単一のサービスに全てのメッセージを流し込むトランスポートを持っているならば、トランスポートが AxisEngine を呼ぶ前に MessageContext にそのサービスを設定するだけです。もしくは、もし SOAP ヘッダの内容や日時に基づいてディスパッチするならば、それを行うハンドラを書きます。

    誰かが SOAP メッセージをデシリアライズする必要がある時に、どのハンドラもサービスを設定していなければ、最初簿ボディ要素の名前空間を使用して検索を試みます。ですから例えば、

    <SOAP:Body>
      <ns:MyMethod xmlns:ns="http://ws.apache.org/axis/Weather"/>
    </SOAP:Body>

    このメッセージは、関連するサービスがあるかどうか名前空間マッピングリストの中の "http://ws.apache.org/axis/Weather" を検索します。


  8. [Axis はセッションをサポートしていますか?] [編集日時 2003年4月29日am9:38 版]

    質問: Axis はセッションをサポートしていますか?

    回答: はい。基礎をなす実装の拡張可能な集合をもたらすセッション抽象化があります。詳細については org.apache.axis.session.Session クラスをご覧下さい。特に、HTTP クッキーに基づくセッションと、SOAP ヘッダに基づくトランスポート非依存のセッションをサポートしています。適切な Session の実装を設定し、セッションセマンティックスを使用したい人が誰でも MessageContext から取得できるように MessageContext.setSession() によって Session の実装を MessageContext に割り当てるのは、リクエストチェインにあるハンドラです。

    質問: SOAP ヘッダに基づくセッションとはすばらしいですね。それをするにはどうすればいいのですか?

    回答: この機能を実装する "org.apache.axis.handlers.SimpleSessionHandler" というクラスがあります。このハンドラを、あなたのクライアントとサーバ両方のリクエストとレスポンスフローの中に含める必要があります。例として、私達のセッションテスト (test.session.TestSimpleSession) をご覧下さい。クライアント側での使用については /AxisClientConfiguration をご覧下さい。

    質問: 他にセッションでどのようなことができますか?

    回答: セッションコンテキストが確立された後であればいつでも、現在の messageContext に対して getSession() を呼べば Session オブジェクトへの参照を受け取れます。このオブジェクトを Hashtable のように使用することで、任意のデータこのセッションに関連付けることにより保存することができます。例えば、最初のリクエストで、データベースから呼び出した人の名前とアドレスを取り出した (高価な操作) として、それらを Session オブジェクトにキャッシュし、同じ呼び出し人からの次回以降の呼び出しではそのキャッシュを利用することによって早いアクセスが可能になります。この機能は自分用のハンドラ、あるいはバックエンドサービスオブジェクト自身で使用することができます。


  9. [どこに私の <typeMapping>/<beanMapping> 情報を置けばいいのでしょうか?] [編集日時 2004年3月24日am5:17 版]

    質問: どこに私の <typeMapping>/<beanMapping> 情報を置けばいいのでしょうか?

    回答: 型マッピングが適切な場所が WSDD に2箇所あります。1つめは、<deployment> のちょうど下のトップレベルで、それらは global 型となり、Axis エンジンにデプロイされている全てのサービスはそれらを使用することができます。もう1つは、あなたの <service> タグの中に置くことで、そのマッピングはそのサービスからのみアクセス可能となります。


  10. [私のサービスオブジェクトの MessageContext にどのようにしてアクセスすればいいのでしょうか?] [編集日時 2003年4月5日am7:21 版] 質問: 私のサービスオブジェクトの MessageContext にどのようにしてアクセスすればいいのでしょうか?]

    回答: あなたのオブジェクトのメソッド呼び出し中に、いつでも、static な MessageContext.getCurrentContext() メソッドを使用します。


  11. [私のサービスを呼び出した HttpServletRequest にどのようにしてアクセスすればいいのでしょうか?] [編集日時 2003年4月17日pm1:00 版]

    質問: 私のサービスを呼び出した HttpServletRequest にどのようにしてアクセスすればいいのでしょうか?

    回答: EchoHeaders.jws に示されているように、メッセージコンテキストから HttpServletRequest を取得します。

        private HttpServletRequest getRequest() {
            MessageContext context = MessageContext.getCurrentContext();
            HttpServletRequest req = (HttpServletRequest) context.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);
            return req;
        }
    

    メッセージが違うトランスポートから来た場合、リクエストは null になることに注意してください。

    webapp 全体を、SOAP over HTTP だけしかサポートしないようにハードコードすることはとても近視眼的です。


  12. [JAX-RPC バインディングパターンの違いは何ですか?] [編集日時 2003年4月24日am5:52 版]

    質問: JAX-RPC バインディングパターンの違いは何ですか?

    回答: JAX-RPC は3つのバインディングパターンをサポートします。

     static binding (コンパイルされたスタブ)
     dynamic binding (動的プロキシ)
     dynamic invocation (DII)
    

    static binding を使用する際は、コンパイル済みのクライアントプロキシ (スタブ) を生成するために、開発者は開発時に WSDL <portType> と <binding> をコンパイルします。このスタブはプロキシのインターフェースと実装の両方を含みます。これは、あるアプリケーションがたった一つのWebサービス実装と会話するためのコードを提供します。もしWebサービス実装が何かしら変更されたら、開発者は新しいスタブを生成し、クライアントアプリケーションを再コンパイルしないといけません。このアプローチは最高のパフォーマンスと最低の柔軟性を提供します。

    dynamic binding を使用する際、開発者は開発時に WSDL の <portType> だけをコンパイルし、プロキシのインタフェースのみ生成します。実行時にこのアプリケーションは WSDL の <binding> に基づいたプロキシの実装を生成するために、dynamic proxy を使用します。このアプローチにより、クライアントアプリケーションは同じ <portType> を実装するどんなWebサービス実装とも bind することができます。このアプローチは、最初のサービス呼び出しで若干のオーバヘッドがありますが、より多くの柔軟性をもたらします。

    dynamic invocation を使用する際、クライアントアプリケーションは実行時に WSDL ドキュメントをパースし、動的にサービス呼び出しを構築します。クライアントアプリケーションにはサービスのセマンティックスに関するいくつかの事前知識が必要ですが、特定のインターフェースに縛り付けられているわけではありません。このアプローチは最高の柔軟性をもたらしますが、より複雑なプログラミングを必要とします。


  13. ["wrapped" は何を意味しているのですか? "document" とはどのように違うのですか?] [編集日時 2003年7月28日am10:59 版]

    "wrapped" スタイルは、RPC をエミュレートする document/literal を行う特定のスタイルを指し示します。(http://marc.theaimsgroup.com/?l=axis-dev&m=101784879902571&w=2 から引用)

    議論:

    http://marc.theaimsgroup.com/?t=101783723400012&r=1&w=2
    http://marc.theaimsgroup.com/?t=105164726200004&r=1&w=2
    

    .NET の SoapParameterStyle?: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebservicesprotocolssoapparameterstyleclasstopic.asp


  14. [メッセージスタイルのサービスメソッドで許されているのはどのメソッドシグネチャですか?] [編集日時 2003年7月11日am6:37 版]

    MsgProvider? では以下のメソッド署名が許されています。

        org.apache.axis.message.SOAPBodyElement[] method(org.apache.axis.message.SOAPBodyElement[])
        org.w3c.dom.Element[] method(org.w3c.dom.Element[])
        void method(org.apache.axis.message.SOAPEnvelope reqest, org.apache.axis.message.SOAPEnvelope response)

    詳細については http://marc.theaimsgroup.com/?l=axis-dev&m=103290034002923&w=2 をご覧下さい。


  15. [私のコードからどのようにして ServletContext にアクセスすることができますか?] [編集日時 2004年5月1日am7:51 版]

    質問: 私のコードからどのようにして ServletContext にアクセスすることができますか?

    回答:

    HttpServlet srv = (HttpServlet) MessageContext.getCurrentContext().getProperty(HTTPConstants.MC_HTTP_SERVLET);
    ServletContext context = srv.getServletContext();
    

  16. [Axis 上で EJB を Webサービスとしてデプロイする方法] [編集日時 2004年1月16日pm4:03 版]

    Axis 上で EJB を Webサービスとしてデプロイする方法 by John Mammen (john_mammen@yahoo.com)

    この手引きでは4つのクラスが出てきます。EJBに関連する3つのクラスと1つの詳細クラスです。

    この bean を Rates Bean と呼ぶことにします。手短に説明すると、この bean の機能は、3桁の通貨コードが渡された時にその通貨の詳細レートを入手することです。

    4つのクラスとは、リモート bean である Rates.java、実装 bean である RatesBean.java、ホーム bean である RatesHome.java、詳細レートを返す RatesDetails.java です。

    以下は、Weblogic にデプロイするための Rates bean の xml デプロイメントディスクリプタと Java コードの抜粋です。これらは参考資料として使用することができます。

    注意: 以下の抜粋は全て不完全です。必要な詳細のみが示されています。

    Rates.java (EJB リモートクラスです)

    ......
    public interface Rates extends EJBObject {
    
    public RatesDetails getRateDetails(String currencyCode) throws
    RemoteException,RateException;
    ...
    }
    

    RateDetails.java (リモート EJB 呼び出しで返されるクラスです)

    ...
    
    public class RatesDetails implements Serializable{
    
    private String isoCode;
    private String vaildFrom;
    private String vaildTo;
    private double retailBuy;
    private double retailMid;
    private double retailSell;
    private double wholesaleBuy;
    private double wholesaleMid;
    private double wholesaleSell;
    private int rateType;
    public RatesDetails() {
    }
    // setter と getter が定義されていますが、ここでは省略しています
    

    ejb-jar.xml

    <session>
    <ejb-name>RatesBean</ejb-name>
    <home>RatesHome</home>
    <remote>Rates</remote>
    <ejb-class>RatesBean</ejb-class>
    <session-type>Stateless</session-type>
    <transaction-type>Container</transaction-type>
    <resource-ref>
    <description>Datasource for Rates DB</description>
    <res-ref-name>jdbc/NewRatesDB</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    </resource-ref>
    </session>
    

    weblogic-ejb-jar.xml

    <weblogic-enterprise-bean>
    <ejb-name>RatesBean</ejb-name>
    <stateless-session-descriptor>
    <pool>
    <max-beans-in-free-pool>50</max-beans-in-free-pool>
    <initial-beans-in-free-pool>5</initial-beans-in-free-pool>
    </pool>
    </stateless-session-descriptor>
    <reference-descriptor>
    <resource-description>
    <res-ref-name>jdbc/NewRatesDB</res-ref-name>
    <jndi-name>jdbc.RatePool</jndi-name>
    </resource-description>
    </reference-descriptor>
    <jndi-name>jndi.Rates</jndi-name>
    </weblogic-enterprise-bean>
    

    上記のようなクラスがあり、コンテナへのデプロイが成功したと仮定します。これでWebサービスのデプロイを始めることができます。

    1. まず、EJB が EJB コンテナに正しくデプロイできたか確認してください。

    2. 次に J2EE アプリケーションサーバに Axis 1.0 をインストールして設定してください。

    3. Axis インストールページで validate をクリックして、Axis のデプロイをテストしてください。

    4. 以下に示すような rates.wsdd をメモ帳で作成してください。以下の例は上記の bean と対応しています。太字のテキストに注意してください。また、もしパッケージに入れているのならば、クラス名にパッケージが含まれていることを確認してください。例えば、もし RatesHome が com.mycompany パッケージにあれば、ホームインターフェースの名前は com.mycompany.RatesHome になります。

    <?xml version="1.0" encoding="UTF-8"?>
    <deployment xmlns="http://xml.apache.org/axis/wsdd/"
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
    xmlns:xsi="http:/www.w3.org/2000/10/XMLSchema-instance">
    <service name="RateDetails" provider="java:EJB">
    <parameter name="beanJndiName" value="jndi.Rates" />
    <parameter name="homeInterfaceName" value="RatesHome" />
    <parameter name="remoteInterfaceName" value="Rates" />
    <parameter name="allowedMethods" value="getRateDetails" />
    <parameter name="className" value="RatesBean" />
    <parameter name="jndiURL" value="t3://localhost:7001" />
    <parameter
    name="jndiContextClass"
    value="weblogic.jndi.WLInitialContextFactory" />
    <typeMapping
    xmlns:ns="http://soapinterop.org/xsd"
    qname="ns:RatesDetails"
    type="java:RatesDetails"
    serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"
    deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"
    encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
    />
    </service>
    </deployment>
    

    5. 次のコマンドで rates.wsdd をデプロイしてください。

    java org.apache.axis.client.AdminClient -lhttp://localhost:7001/axis/services/ejbservice rates.wsdd

    6. もし正しくデプロイできたのであれば、エラーメッセージを受け取ることはありません。もし何かしらのエラーがあれば、コンソールにそのエラーが表示されます。また、EJB コンテナのコンソールにもエラーがないか確かめてください。

    7. ブラウザの url に http://localhost:7001/axis/services/RateDetails?method=getRateDetails&value=USD を入れてWebサービスをテストしてください。

    もしデプロイが成功していたら、次のようなものを受け取ります。

    Axis Reply XML

    <?xml version="1.0" encoding="UTF-8"?>
    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Body>
    <geRateDetailsResponse
    soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
    <geRateDetailsReturn href="#id0"/>
    </geRateDetailsResponse>
    <multiRef id="id0" soapenc:root="0"
    soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
    xsi:type="ns1:RatesDetails"
    xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
    xmlns:ns1="http://soapinterop.org/xsd">
    <rateType xsi:type="xsd:int">0</rateType>
    <wholesaleSell xsi:type="xsd:double">1.0</wholesaleSell>
    <retailSell xsi:type="xsd:double">1.0</retailSell>
    <retailMid xsi:type="xsd:double">1.0</retailMid>
    <wholesaleMid xsi:type="xsd:double">1.0</wholesaleMid>
    <validTo xsi:type="xsd:string" xsi:nil="true"/>
    <validFrom xsi:type="xsd:string" xsi:nil="true"/>
    <isoCode xsi:type="xsd:string" xsi:nil="true"/>
    <retailBuy xsi:type="xsd:double">1.0</retailBuy>
    <wholesaleBuy xsi:type="xsd:double">1.0</wholesaleBuy>
    </multiRef>
    </soapenv:Body>
    </soapenv:Envelope>
    

    --- 質問 01.16.03 07:02p EST 与えられた SECURITY_PRINCIPAL を使用して接続するように EJBProvider を働きかけることはできますか? つまり、もしWebサービスの呼び出し側がユーザ名とパスワードの組を与えたら、サーバ側でこれを EJBContext に置き換えるのは何がお勧めですか?


  17. [Axis で Castor を使用することはできますか?] [編集日時 2003年12月10日pm2:41 版]

    質問: Axis で [Castor] を使用することはできますか?

    回答: 以下の記事/スレッドをご覧下さい。

    1. [How to integrate Axis and Castor in a Document-style Web service client and server (ドキュメントスタイルのWebサービスクライアントとサーバにおいて Axis と Castor を統合する方法)]
    2. [Apache SOAP type mapping, Part 2: A serialization cookbook (Apache SOAP 型マッピング、パート2: シリアライゼーションのマニュアル)]
    3. http://www.mail-archive.com/castor-dev@exolab.org/msg15150.html
    4. http://hypermail.linklord.com/castor-dev.old/2002/Aug/0497.html
    5. http://www.mail-archive.com/castor-dev@exolab.org/msg09933.html
    6. http://www.mail-archive.com/axis-dev@ws.apache.org/msg00971.html
    7. http://www.theserverside.com/patterns/thread.jsp?thread_id=8675

  18. [JBoss と Axis はうまく協調しますか?] [編集日時 2004年2月16日pm9:58 版]

    色々な理由で、数ヶ月間 Axis と JBoss を一緒に使用してきました。ステートレスセッション Bean に接続するのに java:EJB プロバイダを使用しています。

    新しくサーバを再起動したときはすべてうまくいきます。しかし、ear ファイルを再デプロイした後は、ほぼ必ず以下のことを経験します。

    13:46:30,112 ERROR [org.jboss.web.localhost.Engine]

    ルート原因

    java.lang.NullPointerException?
        at org.jboss.mx.loading.UnifiedClassLoader?.findResources(UnifiedClassLoader?.java:374)
        at java.lang.ClassLoader?.getResources(ClassLoader?.java:825)
        at java.lang.ClassLoader?.getResources(ClassLoader?.java:821)
        at java.lang.ClassLoader?.getResources(ClassLoader?.java:821)
        at org.apache.commons.discovery.jdk.JDK12Hooks.getResources(JDK12Hooks.java:150)
        at org.apache.commons.discovery.resource.DiscoverResources?$1.getNextResources?(DiscoverResources?.java:153)
        at org.apache.commons.discovery.resource.DiscoverResources?$1.getNextResource?(DiscoverResources?.java:129)
        at org.apache.commons.discovery.resource.DiscoverResources?$1.hasNext(DiscoverResources?.java:116)
        at org.apache.commons.discovery.resource.names.DiscoverNamesInFile?$1.getNextClassNames?(DiscoverNamesInFile?.java:186)
        at org.apache.commons.discovery.resource.names.DiscoverNamesInFile?$1.getNextClassName?(DiscoverNamesInFile?.java:170)
        at org.apache.commons.discovery.resource.names.DiscoverNamesInFile?$1.hasNext(DiscoverNamesInFile?.java:157)
        at org.apache.commons.discovery.resource.names.NameDiscoverers?$1.getNextIterator?(NameDiscoverers?.java:143)
        at org.apache.commons.discovery.resource.names.NameDiscoverers?$1.hasNext(NameDiscoverers?.java:126)
        at org.apache.commons.discovery.resource.classes.ResourceClassDiscoverImpl?$1.getNextResource?(ResourceClassDiscoverImpl?.java:159)
        at org.apache.commons.discovery.resource.classes.ResourceClassDiscoverImpl?$1.hasNext(ResourceClassDiscoverImpl?.java:147)
        at org.apache.axis.configuration.EngineConfigurationFactoryFinder?$1.run(EngineConfigurationFactoryFinder?.java:159)
        at java.security.AccessController?.doPrivileged(Native Method)
        at org.apache.axis.configuration.EngineConfigurationFactoryFinder?.newFactory(EngineConfigurationFactoryFinder?.java:152)
        at org.apache.axis.transport.http.AxisServletBase?.getEngineEnvironment?(AxisServletBase?.java:285)
        at org.apache.axis.transport.http.AxisServletBase?.getEngine(AxisServletBase?.java:208)
        at org.apache.axis.transport.http.AxisServletBase?.getEngine(AxisServletBase?.java:187)
        at org.apache.axis.transport.http.AxisServlet?.initQueryStringHandlers?(AxisServlet?.java:953)
        at org.apache.axis.transport.http.AxisServlet?.init(AxisServlet?.java:204)
        at javax.servlet.GenericServlet?.init(GenericServlet?.java:256)
    

    JBoss のクラスローディングスキーマは、その一風変わったふるまいによって評判が良くありません。誰かに他に似たような問題を体験したことがある人はいませんか? もしいましたら、解決策はありますか? マイナーな変更をして再デプロイした後にサーバを再起動するのは面倒です。

    "all" 設定で JBoss.NETを使用し、XDoclet タグを関連させれば全てうまくいきます。


  19. [どのようにして Axis サーバを起動せずにサービス (例えば server-config.wsdd を更新する) をデプロイしますか?] [編集日時 2004年5月16日am8:04 版]

    質問: どのようにして Axis サーバを起動せずにサービス (例えば server-config.wsdd を更新する) をデプロイしますか?

    回答: Axis サーバを起動せずにサービスディスクリプタをデプロイするには、org.apache.axis.utils.Admin クラスを使用します。

        cd webapps/axis/WEB-INF
        java -cp $AXIS_CLASSPATH org.apache.axis.utils.Admin server deploy.wsdd
    

    プログラムは現在のディレクトリに/の server-config.wsdd を作成/更新し、deploy.wsdd ファイルからサービスをデプロイします。server-config.wsdd を作成する必要がある場合は、axis.jar にある server-config.wsdd のコピーがデフォルトの起動設定として使用されます。

    Ant からは以下のようにします。

        <java classname="org.apache.axis.utils.Admin" 
                   fork="true" 
                    dir="${webapp.install}/WEB-INF">
    
          <arg value="server" />
          <arg value="${webapp.install}/wsdd/deploy.wsdd" />
    
          <classpath>
             <pathelement location="${build.dir}/classes"/>
             <path refid="axis.classpath"/>
          </classpath>
    
        </java>
    

  20. [Axis と IBM Emerging Technologies Toolkit (ETTK) (以前は Web Services Toolkit (WSTK)) との関係は何ですか?] [編集日時 2003年7月16日pm1:54 版]

    質問: Axis と IBM Emerging Technologies Toolkit (ETTK) との関係は何ですか?

    回答: ETTK とは オートノミック、グリッド、そしてもちろんWebサービスを含む未来技術の開発のための IBM AlphaWorks ソフトウェア開発キットです。WSDL4J、LotusXSL、UDDI4J、WSIL4 と同様に Axis のバイナリ (ソースは含まない) を含んでいます。それゆえ、ETTK は Axis の上位集合と考えることができます。

    ETTK 製品マネージャによると、ETTK 1.0 はいくつかの拡張を含む Axis 1.1 Final が含まれているとのことです。

    ETTK は Web Services Toolkit (WSTK) として知られていたパッケージから発展したものです。

    より多くの情報に関しては以下を参照してください。http://www.alphaworks.ibm.com/tech/ettk