Javaプログラマーは不器用な鳥から菜鳥まで(百一十)一歩一歩webservice(四)Axis 2開発webserviceの詳細を学ぶ


Axis 2はApacheが提供するサードパーティWeb Servicesエンジンで、axis 2は前身のApache Axisよりも効率的でモジュール化され、XMLの組織にも向いています.axis 2は、丹念な設計により、より便利なモジュール追加機能を提供します.新しいアーキテクチャに基づいて新しい作成が行われ、Axis 1は採用されていない.xの共通コード.Axis 2の開発をサポートする原動力は、モジュール化がより強く、柔軟性がより高く、より効率的なアーキテクチャを探ることです.このアーキテクチャは、他の関連Webサービス標準およびプロトコルに容易に挿入できる(WS-security、WS-REliableMessagingなど)の実装中.Apache Axis 2はAxisの後続バージョンであり、次世代のSOAPエンジンである.Webサービスは現在SOAを実装するのに最も適した技術であり、Axis 2は現在Webサービスを実装する比較的成熟したフローラインの技術フレームワークである(アーキテクチャ).axis 2のwebservice開発に関する主なプロセス手順を見てみましょう.
使用する前にaxis 2関連のサービスをインストールする必要があります.axis 2サービスをインストールする前に、関連するインストールファイルをダウンロードする必要があります.ダウンロード先:
http://www.apache.org/dist//axis/axis2/java/core/1.6.1/
関連ファイルをダウンロードする前に、axis 2に関するパッケージについて説明します.axis 2については、バイナリパッケージ、warパッケージ、ドキュメントパッケージ、ソースファイルパッケージの4種類のパッケージが公式に提供されています.バイナリパッケージには、サンプルプログラムとjarパッケージが含まれています.warパッケージは、apache axis 2が提供するサービス管理のツールクラスウェブアプリケーションであり、axis 2のインストールとは、servlet containerにこのパッケージをインストールすることを意味する.ドキュメントパッケージはもう言わない.ソースパッケージももう言わない.公式ドキュメントでは、axis 2を使用するにはjava 5以上、11 M以上のハードディスク容量と任意のオペレーティングシステムが必要です.また、バイナリデータをwarファイルにパッケージするためには、1.6以下のインストールが必要である.5のapache ant;ソースパッケージを構築するにはmaven 2を下回るインストールが必要である.0.7のmaven. 
OK、次にaxis 2をインストールします.
1.axis 2のwarパッケージをダウンロードします.
2.ダウンロードしたwarパッケージをtomcatディレクトリのwebappsの下に解凍します.
3.tomcatを起動します.Webappsディレクトリの下にaxis 2フォルダと関連ファイルが生成されます.
アクセスhttp://localhost:8080/axis2/axis 2が正常に実行されたことを示すページが表示されます.
                    
Ok、取り付け終わったから、簡単でしょう.
axis 2のインストールが完了したら.次は、Webサービスプログラムを開発するためにそれを借りることができます.
1.まずweb projectを作成する
2.サービスクラスHelloworldの作成
package com.bzu.csh; public class HelloWorld { public String getHello(String name) { return "Hello, " + name + "."; } public String getWorld(String name) { return "World," + name + "."; } public String getHelloWorld() { return "Hello,World"; } }

3.webを修正する.xml、内容は以下の通りです.
        AxisServlet org.apache.axis2.transport.http.AxisServlet 1   AxisServlet /services/*  

4.tomcatインストールディレクトリのwebapps/axis 2/WEB-INFのmodules、service、confファイルをHelloWorldのWEB-INFディレクトリにコピーします.libの下のjarパッケージもコピーします.次にサービスの下にHelloWorld/META-INFパスを新規作成し、META-INFの下にサービスを新規作成します.xml、内容は以下の通りです.
                  HelloWorld Service Example                       com.bzu.csh.HelloWorld                                                                                      

ここでお話ししますxmlの構成の詳細:
1.ここでサービス名を指定します.
2.サービスの説明
3.サービスレベルパラメータ
サービスでxmlファイルでは、メッセージコンテキスト(実行時)、AxisService、またはAxisOperationアクセスのためにサービスノードの下で直接パラメータを定義できます.パラメータには必須パラメータとオプションパラメータがあります.パラメータ名は必須パラメータです.ここでのサービスパラメータは、指定されたサービスクラスです.
4.   
サービスレベルのメッセージ受信機
Axis 2のメッセージ受信機は特殊なプロセッサで、Inパス(リクエストパス)の最後のプロセッサです.Webサービスの各操作には独自のメッセージ受信機があり、異なる操作には異なるメッセージ受信機があります.メッセージ受信機はメッセージ交換モードに依存するので、異なるメッセージ交換モードに異なるメッセージ受信機を指定する必要があります.
すべての操作に同じメッセージ受信機を指定するにはどうすればいいですか?サービスレベルのメッセージ受信機を追加すればよい.これにより、オペレーションレベルでメッセージ受信機を指定する必要がなくなります.サービス・レベルのメッセージ受信機を指定します.一方、Axis 2は、デプロイ時に操作に正しいメッセージ受信機を自動的に選択します.ここでは
Operationレベルのメッセージ受信機
サービス・レベルのメッセージ・受信機を指定する方法について説明した.ただし、operationでmessageReceiverラベルを指定する必要がある異なる操作に対して異なるメッセージ受信機を指定することもできます.
最後に、サービスグループを配置するためのservicesを記述することについて説明する.xmlファイルの問題
単一のサービスパッケージファイルに複数のサービスを配置するには、サービスグループが便利です.もちろん、これらのサービスの間には論理的な関係があるはずです.サービスグループ用サービスs.xmlファイルと単一のサービスで使用される唯一の違いはルート要素です.サービスグループで使用されるルート要素はサービスグループであり、サービスグループ要素の内部で複数のサービス要素を定義できます.
......
..........
tomcatを起動してアクセスhttp://127.0.0.1:8080/Axis2Demo/services/HelloWorld?wsdl 
サービス情報が見えてきました.
                                    
次に、クライアントを書いて、私たちが書いたサービスプログラムを呼び出すことができます.
package com.bzu.client; import javax.xml.namespace.QName; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.rpc.client.RPCServiceClient; public class ClientTest { public static void main(String[] args) { String url = "http://127.0.0.1:8080/Axis2Demo/services/HelloWorld"; String result = null; try { //   RPC    WebService RPCServiceClient serviceClient = new RPCServiceClient(); Options options = serviceClient.getOptions(); //     WebService URL EndpointReference targetEPR = new EndpointReference(url); options.setTo(targetEPR); //    QName   ,QName              WSDL        ,      targetNamespace    // //       getWorld   WSDL       ..... QName opAddEntry = new QName("http://csh.bzu.com", "getWorld"); //  //   getGreeting      ,     ,         ,          Object[] opAddEntryArgs = new Object[] { "java" }; //       ,   axis1     // invokeBlocking       ,           QName  ,         ; //            WebService      ,     Object[]; //        WebService         Class  ,     Class[]。 //         ,invokeBlocking            null,    new Object[]{} //       WebService       ,   RPCServiceClient  invokeRobust  , //          ,      invokeBlocking              //   getGreeting           Class  ..... Class[] classes = new Class[] { String.class }; //   getGreeting            ....... result = (String) serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes)[0]; System.out.println(result); //      getHello     ,       getWorld        // classes = new Class[] {String.class}; opAddEntry = new QName("http://csh.bzu.com", "getHello"); opAddEntryArgs = new Object[] { "   " }; System.out.println(serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes)[0]); //      getHelloWorld      opAddEntry = new QName("http://csh.bzu.com", "getHelloWorld"); System.out.println(serviceClient.invokeBlocking(opAddEntry, new Object[]{}, classes)[0]); } catch (Exception e) { e.printStackTrace(); } } } 

実行結果:
各種の詳細な運用はすべて注釈の中で説明した.繰り返し言う必要はないと思います.注意パラメータ構成エラーなし
優秀なaxis 2の説明のブログを推薦します:http://androidguy.blog.51cto.com/974126/215252 
参考資料:http://blog.csdn.net/llhhyy1989/article/details/8312918
                              http://paggywong.iteye.com/blog/1350448