Apache Axis2を使ったWebサービスの構築

- JAVAクライアント・アプリの構築 -

ホーム
Axis2開発環境の構築 Axis2運用環境の構築 自作Webサービスの作成
NETクライアント・アプリの構築 Java クライアント・アプリの構築 チューニング



クラスパス設定
 実行に必要なクラスパスを設定します。JARの数が多いので注意して下さい。
 以下の例では直上のlibにAxis2のjarを展開してます。
  set JAVA_HOME=C:\Program Files\Java
  set PATH=%JAVA_HOME%\jre1.5.0_13\bin;%JAVA_HOME%\jdk1.5.0_13\bin;%PATH%
  set AXIS_LIB=..\lib
  
  set CLASSPATH=.
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\axis2-jws-api-1.3.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\soapmonitor-1.3.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\XmlSchema-1.3.2.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\jaxen-1.1.1.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\axis2-kernel-1.3.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\wsdl4j-1.6.2.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\xalan-2.7.0.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\axis2-adb-codegen-1.3.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\mail-1.4.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\jalopy-1.5rc3.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\axis2-jaxws-api-1.3.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\xbean-2.2.0.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\axis2-jibx-1.3.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\axis2-json-1.3.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\axis2-jaxws-1.3.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\jaxb-api-2.0.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\axis2-codegen-1.3.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\axis2-saaj-api-1.3.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\axis2-spring-1.3.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\httpcore-niossl-4.0-alpha5.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\neethi-2.0.2.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\axis2-fastinfoset-1.3.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\jaxb-xjc-2.0.5.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\axiom-impl-1.2.5.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\wstx-asl-3.2.1.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\juli-6.0.10.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\mex-impl-1.3.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\jibx-bind-1.1.5.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\axis2-metadata-1.3.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\axis2-clustering-1.3.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\activation-1.1.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\geronimo-annotation_1.0_spec-1.1.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\commons-codec-1.3.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\commons-logging-1.1.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\vjettison-1.0-RC1.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\commons-io-1.2.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\httpcore-nio-4.0-alpha5.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\axiom-api-1.2.5.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\axis2-saaj-1.3.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\commons-fileupload-1.1.1.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\axis2-jaxbri-1.3.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\jibx-run-1.1.5.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\woden-1.0-incubating-M7b.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\axiom-dom-1.2.5.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\tribes-6.0.10.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\geronimo-jms_1.1_spec-1.1.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\axis2-xmlbeans-1.3.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\log4j-1.2.14.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\annogen-0.1.0.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\stax-api-1.0.1.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\axis2-adb-1.3.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\jaxb-impl-2.0.5.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\axis2-ant-plugin-1.3.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\xml-apis-1.3.03.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\axis2-mtompolicy-1.3.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\commons-httpclient-3.0.1.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\httpcore-4.0-alpha5.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\xercesImpl-2.8.1.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\backport-util-concurrent-2.2.jar
  set CLASSPATH=%CLASSPATH%;%AXIS_LIB%\axis2-java2wsdl-1.3.jar
スタブソースの生成
Axis2のWSDL2Javaを使ってスタブソースを生成します
例)WSDL2Javaを使ったプロキシクラス作成例


java org.apache.axis2.wsdl.WSDL2Java -uri  <URL> -p <クラス> -d adb -s -o <パス>


オプション説明
-url <URL>     WSDLのHTTPパスを指定。       例) http://localhost:port/axis2/services/rjdbcService?wsdl
-p   <クラス>  プロキシクラスのパッケージ名を指定。 例) jp.co.auctor.rjdbc.stub
-d   adb              ADBを使ったサービスを生成
-s                    switch specifies synchronous or blocking calls only
-o   <パス>    ファイル出力先                      例) c:\usr\src\java\rjdbcServiceClient
JAVAクライアントソース
以下にサンプルソースを示します。
import jp.co.auctor.rjdbc.*;
import jp.co.auctor.rjdbc.stub.*;
import jp.co.auctor.rjdbc.stub.RjdbcServiceStub.*;
        
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.soap.*;

import org.apache.axis2.AxisFault;
import org.apache.axis2.Constants;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.client.Options;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.transport.http.HTTPConstants;
import org.apache.axis2.transport.http.HttpTransportProperties;
        
import java.io.*;
import java.net.*;
import java.security.*;
import java.security.cert.*;
import java.util.ArrayList;
import javax.net.ssl.*;
import javax.xml.rpc.*;

public class rjdbcServiceTest {

    //サンプル(Proxyを使う例)
    public static void main(String[] args) throws java.lang.Exception {
        try {
            //オプションの生成
            Options options = new Options();

            //対象WebサービスのURLを指定
            options.setTo(new EndpointReference("http://localhost:1234/axis2/services/rjdbcService"));   -- @

            //接続先URLを指定しスタブを生成する
            RjdbcServiceStub stub = new RjdbcServiceStub();       -- A

            //optionを設定し、変更内容を反映させる
            stub._getServiceClient().setOptions(options);              -- B
                                    
            //ステートフルセッションを実現する為にTRUEを設定する  
            stub._getServiceClient().getOptions().setManageSession(true); -- C

            //以下はステートフルセッションを使用した処理の例
            //DBコネクトを実行するとサーバ側のセッションにコネクション情報を保持する。
            //例えば、コネクトせずにSELECTしようとするとExceptionが発生し,"DB未接続"が表示されます
            System.out.println("1) DBコネクト試験");
            stub.openConnection();               -- D
            System.out.println("   結果→正常終了");
            
            System.out.println("2) SELECT試験");
            Request req = new Request();
            req.setMessage("select * from rjdbc");      -- E      
            Select sel = new Select();           
            sel.setRequest(req);                      -- F
            SelectResponse res = stub.select(sel);   -- G

            Response[] row = res.get_return();            -- H 

            for(int i=0 ; i < row.length ; i++){
                System.out.println("   **** " + (i+1) + "行目 ****");
                Column[] col = row[i].getRow();      -- I
                for(int j = 0 ; j < col.length ; j++){
                    System.out.println("   " + (j+1) + "列名: " + col[j].getMessage());  -- J
                }
            }
            System.out.println("   結果→正常終了");

            System.out.println("3) DBディスコネクト試験");
            stub.closeConnection();                 -- K
            System.out.println("   結果→正常終了");
        } catch (java.lang.Exception e) {
            System.out.println("   結果→異常終了: " + e.toString());
        }
    }
}
ソース解説
@ オプションに接続先URLを指定
A RjdbcServiceStubクラスを生成
B RjdbcServiceStubクラスに@で設定した内容を反映する
C Webサービス側のセッションを利用し、コネクションを持続したいのでsetManageSession(true)を指定する
D Webサービス側のDBコネクションをオープンします
E Requestクラスに検索したいSQL文を設定する
F Selectクラスにリクエストクラスを設定する
G RjdbcServiceStubクラスのselectメソッドを実行し、検索結果をSelectResponse に取得する
H SelectResponseクラスのget_returnメソッドを実行し、検索結果をResponseクラスの配列として取得する
I Responseクラスから検索結果(1行分のデータ)をColumnクラスの配列として取得する
J Columnクラスから列値を取得する。取得する値の型は必ず文字列になる。数値等の場合は各自で変換する事
KWebサービス側のDBコネクションをクローズ

戻る