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