Axis2 WebService
實現webservice的開源框架有很多,axis是比較常用的一種,它能讓你在tomcat上方便的發佈webservice,它能幫助你把代碼轉化成wsdl文件,或者把wsdl文件轉化成java代碼,下面對axis2作詳細說明,我會側重講cmd命令行發佈和轉化,因爲最新版axis2的插件和多數eclipse版本不兼容。
一.下載axis2
下載地址:http://axis.apache.org/axis2/java/core/download.cgi
當前最新版本是1.6.1。
下載到本地:
Axis2-1.6.1-bin.zip裏有axis2的jar包。
Axis2-1.6.1-docs.zip裏有詳細的幫助文檔。
Axis2-1.6.1-src.zip裏是源代碼,方便愛學習的同學研究。
Axis2-1.6.1-war.zip裏是axis的管理平臺,直接扔到tomcat中就能用了。
二.創建項目
PipeService代碼如下:
package com.pipe.webservice;
import com.pipe.bean.User;
public class PipeService {
public String sayHello(String name) {
return name + " say: hello";
}
public User getUser(String userName) {
User user = new User();
user.setName(userName);
return user;
}
}
三. 發佈WebService
1. 直接拷貝目錄結構到tomcat發佈
網上幫助:http://axis.apache.org/axis2/java/core/docs/userguide-buildingservices.html#deployrun
直接拷貝如下目錄結構到webapps/axis2/WEB-INF/services
Services.xml
<service name="PipeService" >
<description>
Please Type your service description here
</description>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messageReceivers>
<parameter name="ServiceClass">com.pipe.webservice.PipeService</parameter>
</service>
重啓tomcat,成功。
2. 打包aar文件,通過頁面upload發佈
考慮到給客戶發佈的話不太方便,故下面把它打成aar包。
在C盤下建文件夾AxisSession,按上文提到的目錄結構把class和server.xml放好。
通過cmd進入目錄,
打命令:jarcvf pipeservice.aar .(注意最後的句點)
用戶名密碼admin axis2
同樣成功。
四.Java2wsdl
在最外層輸全帶包名的類名。
java2wsdl -cn com.pipe.webservice.PipeService
成功生成。
五.Wsdl2java
wsdl2java -uri PipeService.wsdl
生成2個文件。
public void downFile(StringfilePath) {
System.out.println(filePath);
StringtargetUrl = "http://localhost:8090/axis2/services/PipeService";
try {
PipeServiceStubps = new PipeServiceStub(targetUrl);
PipeServiceStub.SayHellosayHello = new PipeServiceStub.SayHello();
PipeServiceStub.GetUsergetUser = new PipeServiceStub.GetUser();
sayHello.setName("sam");
SayHelloResponse shr = ps.sayHello(sayHello);
getUser.setUserName("sam");
GetUserResponsegur = ps.getUser(getUser);
Useru = gur.get_return();
System.out.println(shr.get_return());
System.out.println(u.getName());
}catch (AxisFault e) {
e.printStackTrace();
}catch(RemoteException e) {
// TODOAuto-generated catch block
e.printStackTrace();
}