建立服務端
最近項目需要開發web service,找了一下資料,打算用axis2開發,但是網上很難找到一個完整demo。
所以整理總結一下,希望多大家有幫助!
有一個最簡單的方法就是把axis2.war中的內容作爲Web Project的基礎, 來進行開發.
不過爲了更清楚的瞭解如何在一個已有的Web Project中嵌入axis2,那就手動來配置。大致分如下幾個步驟:
一、新建Web Project,名爲“WebServiceDemo”
二、下載axis2-1.5-war.zip包(本來想發附件也發出來,發現csdn無法掛附件,只有麻煩各位再到其他地方下載了,當然也可以問我要,加QQ470312712),
解壓縮
將axis2/WEB-INF/lib裏的jar包拷貝到WebServiceDemo/WebRoot/WEB-INF/lib/
將axis2.war/axis2-web拷貝至WebServiceDemo/WebRoot/axis2-web/(這一步如果不想集成axis2的控制信息,可不需要)
三、配置axis2 servlet
打開WebServiceDemo/WebRoot/WEB-INF/web.xml,增加如下配置:
<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
四、寫一個簡單的web服務類
package com.ws;
public class MyService {
public String getName(String id){
System.out.println("-------------"+id+"--------");
return "pj";
}
}
五、配置Web Service.
由於axis2已嵌入到WebServiceDemo項目中,所以web service就不用打包成aar,而是直接在/WEB-INF目錄下創建相應的文件夾和services.xml,
六、services.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- 接口服務類 -->
<serviceGroup>
<service name="SampleService">
<description>
This service is common webService.
</description>
<!-- 這裏需要配置提供的服務類名包括類的路徑-->
<parameter name="ServiceClass">com.ws.MyService
</parameter>
<!--以下標籤的配置功能是說明此服務是有輸入和輸出功能-->
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
</messageReceivers>
</service>
</serviceGroup>
到這裏服務端已經配置完成!很簡單吧!然後啓動tomcat,訪問地址粗線wsdl文件,說明配置成功!
在瀏覽器中訪問http://localhost:8080/ws/services/SampleService?wsdl可以查看到該Web服務的描述文件說明發布成功!
建立客戶端
我查看了網上總結的,有多種方式生成客戶端,我採用的是axis2對myeclipse的插件生成,個人覺得比較簡單!無需配置環境變量!
一、先下載axis2-eclipse-codegen-wizard.jar和axis2-eclipse-service-archiver-wizard.jar
然後把上述兩個文件解壓出來,然後再複製backport-util-concurrent-3.1.jar(需要在單獨網上下載,axis2沒自帶)和geronimo-stax-api_1.0_spec-1.0.1.jar
到axis2-eclipse-codegen-wizard(解壓出來的文件)裏面的lib裏面!
然後修改axis2-eclipse-codegen-wizard裏面的plugin.xml文件,在節點runtime下添加如下內容
<library name="lib/geronimo-stax-api_1.0_spec-1.0.1.jar">
<export name="*"/>
</library>
<library name="lib/backport-util-concurrent-3.1.jar">
<export name="*"/>
</library>
二、把剛纔axis2-eclipse-codegen-wizard和axis2-eclipse-service-archiver-wizard複製到myeclipse(我用的是myeclipse8.6)根目錄下的dropins文件夾下
(特別要注意,最後修改後在複製到myeclipse的dropins文件夾下,要是已經是複製進去才修改,請剪切出來,然後啓動myeclipse關掉,在複製進去)
三、 打開myeclipse,新建一個項目,在窗體中看到如下:
看到axis2下的連個選項,說明安裝插件成功!
四、生成客戶端,新建醒目,選擇以上兩個選項中的axis2 code generator,然後下一步出現
選第一個,代表的意思是用wsdl文件生成客戶端!點擊下一步出現
五、 輸入wsdl文件路徑,該文件路徑可以是本地的文件,也可以是網絡上的地址(如果是網絡行的,必須要聯網哦)點擊下一步
六、如果上一步的wsdl沒錯,那麼這一步默認就行了
七、選要輸出到的項目,你可以先建好一個web project項目,然後選擇該項目,(注意,選擇到項目名稱即可)然後點擊完成。(記得要打上add the axis2 codeger...這個複選框)
八、生成的項目是不是好多小紅叉啊,沒關係,先把axis2的包添加到claspath下,添加jar都懂吧,這裏就不囉嗦!
添加完後是不是還有小紅叉啊,不要緊張,這個是這個插件的一個小bug,解決方案如下:
點擊小紅叉的地方,出現add unimplemented methods 實現方法就可以,是不是發現還有紅叉啊,別那麼緊張嘛,下載axis2-adb-1.4.1.jar添加到classpath即可
編寫客戶端如下
SayHelloStub sayHelloStub=new SayHelloStub();
SayHelloStub.SayHelloMethod sayHelloMethod=new SayHelloStub.SayHelloMethod();
//傳遞的參數
sayHelloMethod.setName("pjn");
//調用sayHelloMethod方法
System.out.println(sayHelloStub.sayHelloMethod(sayHelloMethod).get_return());
SayHelloStub.AddStudnet addStudnet=new SayHelloStub.AddStudnet();
Student student=new Student();
student.setName("pangjian");
addStudnet.setStudent(student);
System.out.println(sayHelloStub.addStudnet(addStudnet).get_return());
完成!如有問題可以聯繫我!