1. 程式人生 > >用AXIS2釋出WebService的方法 使用eclipse外掛生成服務端和客戶端

用AXIS2釋出WebService的方法 使用eclipse外掛生成服務端和客戶端

  一、Axis2的下載和安裝


     1.可從http://ws.apache.org/axis2/ 下載Axis2的最新版本:
      可以下載如下三個zip包:
      axis2-eclipse-service-plugin-1.7.1.zip

      axis2-eclipse-codegen-plugin-1.7.1.zip

      axis2-1.7.1-war.zip
      前兩個是eclipse的外掛包,解壓放到eclipse安裝目錄的dropins即可

    

   重啟eclipse可以看到

        

      axis2-1.7.1-war.zip

檔案用於將WebService釋出到Web容器中。解壓下後將axis2.war放至tomcat安裝目錄下的webapps資料夾下,然後啟動tomcat後,在webapps目錄下會生成axis2資料夾。  訪問http://localhost:8080/axis2/能看到以下頁面表示axis2執行成功。


2  在Eclipse下新建Dtnamic Web Project,工程名:WebServiceServer(服務端)。新建包cn.test.webservice(包名小寫,以免生成的java檔案報錯,後面的axis2自動生成的java檔案包名都是小寫,大寫的包名生成java檔案的包名都會變小寫),在cn.test.webservice

下新建IWebService

2:使用Axis2 程式碼生成器,完成WebService程式開發 (伺服器端)根據介面生成 wsdl檔案 (WebService 核心描述檔案 )

  選擇專案,new other,選擇axis2 的程式碼生成器,如

先用service介面生成wsdl檔案,所以選擇“從java程式碼生成wsdl檔案”,點選【下一步】



 填寫類的名稱,點選AddFolder  選擇工作空間,專案下的bulid—>classes的目錄,點選【測試類路徑】顯示成功!點選【下一步】


選擇預設配置即可:

選擇wsdl的輸出路徑,可以先放置到桌面


3:基於wsdl生成伺服器程式碼。

選擇專案,new other,選擇axis2 的程式碼生成器,如圖:


先用service介面生成wsdl檔案,所以選擇“從wsdl檔案生成java程式碼”,點選【下一步】


 選擇wsdl檔案的位置:如圖:


   選擇程式碼選項為custom(自定義),並選擇生成服務端程式碼和生成一個預設的services.xml檔案,點選【下一步】。


    選擇輸出路徑,為專案的根路徑,點選【結束】,重新整理專案,即生成服務端程式碼。


服務端程式碼如圖:


匯入響應的jar包

把tomcat安裝目錄下的webapps/axis2/WEB-INF下的modules、service和conf檔案拷至WebService下的WEB-INF目錄下。同時把lib下jar包也拷到專案的lib包下(測試方便全部拷貝,實際開發有jar包衝突)。


拷貝webapps/axis2/WEB-INF/web.xml的servlet內容,放置到專案WebService的web.xml下 web.xml去掉出錯的部分

  <servlet>
        <servlet-name>AxisServlet</servlet-name>
        
        <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
        <!--<init-param>-->
        <!--<param-name>axis2.xml.path</param-name>-->
        <!--<param-value>/WEB-INF/conf/axis2.xml</param-value>-->
        <!--<param-name>axis2.xml.url</param-name>-->
        <!--<param-value>http://localhost/myrepo/axis2.xml</param-value>-->
        <!--<param-name>axis2.repository.path</param-name>-->
        <!--<param-value>/WEB-INF</param-value>-->
        <!--<param-name>axis2.repository.url</param-name>-->
        <!--<param-value>http://localhost/myrepo</param-
        <!--</init-param>-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet>
        <servlet-name>AxisAdminServlet</servlet-name>
        
        <servlet-class>
            org.apache.axis2.webapp.AxisAdminServlet</servlet-class>
    </servlet>
    
    <!-- servlet>
        <servlet-name>SOAPMonitorService</servlet-name>
        <display-name>SOAPMonitorService</display-name>
        <servlet-class>org.apache.axis2.soapmonitor.servlet.SOAPMonitorService</servlet-class>
        <init-param>
            <param-name>SOAPMonitorPort</param-name>
            <param-value>5001</param-value>
        </init-param>
        <init-param>
            <param-name>SOAPMonitorHostName</param-name>
            <param-value>localhost</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet -->
    
    <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>/servlet/AxisServlet</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>*.jws</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>AxisServlet</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>AxisAdminServlet</servlet-name>
        <url-pattern>/axis2-admin/*</url-pattern>
    </servlet-mapping>

將tomcat生成的axis2資料夾中的axis2-web檔案放置到專案的WebContent的資料夾下。

4:服務端程式碼分析:


  (1)ExtensionMapper:將實體類資料對映為XML檔案

  (2)GetScoreById:介面方法getScoreById的引數物件

    (3)  GetScoreByIdResponse:介面方法getScoreById的返回值物件

 (4)IWebServiceMessageReceiverInOut 這個類,負責遠端資料傳送和接收

(5)IWebServiceSkeleton:伺服器介面實現類,負責實現IWebService的介面IWebServiceSkeleton類,所有可以在該類上定義釋出的方法,程式碼如下

   5:WEB-INF/services下新建 test(可以是任何資料夾都可以)/META-INF路徑,將生成的resources下的2個檔案拷貝到  test/META-INF的資料夾下。例如:

       

5:啟動tomcat後訪問:

http://localhost:8080/WebService/services/IWebService.wsdl能看到服務資訊了。  到此Axis2的WebService服務已成功釋出。

其中IWebService是IWebService.wsdl中定義的<service name="IWebService">service的名稱

注意:看懂webservice的使用說明書,記住要從下向上看。

Axis2客戶端呼叫:

下面看看利用axis2客戶端呼叫例項  

第一步:客戶端程式需要的jar包(為了測試方便全部拷貝axis2 lib下jar包也拷到專案的lib包下)

第二步:生成客戶端程式碼

選擇axis2的程式碼生成器,點選【下一步】


選擇從wsdl檔案生成java程式碼


選擇桌面的services.wsdl檔案


選擇預設default,即生成客戶端程式碼




選擇客戶端的程式目錄,點選【完成】


選擇專案,重新整理,會生成客戶端程式碼


jar包


客戶端沒有Skeleton類 (業務介面實現) ,多了 IWebSystemDDLServiceStub 客戶端測試類

客戶端程式,使用 IWebServiceStub.java來編寫

在客戶端的測試程式中使用:程式碼如下

</pre><pre name="code" class="html">package Test;

import java.rmi.RemoteException;

import cn.test.domain.xsd.Score;
import cn.test.webservice.GetScoreById;
import cn.test.webservice.GetScoreByIdResponse;
import cn.test.webservice.IWebServiceStub;

public class Test {
	public static void main(String[] args) throws RemoteException {
		/***呼叫網路服務axis呼叫webservice**/
		IWebServiceStub iWebServiceStub = new IWebServiceStub("http://192.168.1.104:8080/WebService/services/IWebService");
	  
		//傳遞引數
	    GetScoreById getScoreById = new GetScoreById();
	    getScoreById.setArgs0(1);
	    
	    ////傳遞引數返回結果
	    GetScoreByIdResponse getScoreByIdResponse = iWebServiceStub.getScoreById(getScoreById);
	    Score[] get_return = getScoreByIdResponse.get_return();
	    
	    for (int i = 0; i < get_return.length; i++) {
			System.out.println("id:" +get_return[i].getId()+" score:"+get_return[i].getScore());
		}
	
	}
}

程式碼下載:http://download.csdn.net/detail/u014695188/9460217