Apache Axis是一個Web Services系統服務和客戶端的實現
下載和部署Axis
)下載地址
下載Binary Distribution和WAR Distribution這兩個壓縮包
)將下載的axiswarzip解壓解壓後將axiswar復制到tomcat的webapps目錄下
)啟動tomcat浏覽器訪問//localhost:/axis/ 出現以下界面部署成功
以普通的Java類建立Web Services
)需要注意的這個普通的Java類是沒有package的
)在\apachetomcat\webapps\axis\WEBINF\目錄下建立pojo目錄
)Java類
/** * 第一個Web Services * @author Luxh */public class FirstService {
public String sayHello(String name) {
String result = Hello+name+this is first Axis Application!;
return result;
}
public String getInfo() {
return This is first Axis Application!;
}
}
將這個類編譯後的FirstServiceclass文件復制到\apachetomcat\webapps\axis\WEBINF\pojo目錄下無需重啟tomcatAxis支持熱部署
)訪問//localhost:/axis/services/listServices
可以看到普通的Java類已經發布為web Services
)訪問web Services
//localhost:/axis/services/FirstService/getInfo
其中//localhost:/axis/services/FirstService/ 是Web Services 的地址getInfo是方法名稱
其中//localhost:/axis/services/FirstService/ 是Web Services 的地址sayHello是方法名稱?name=LiHuai是參數名稱和參數值
傳參數的時候要注意一定要跟提供服務的方法中的參數名一致public String sayHello(String name)
Java客戶端使用RPC方式調用Web Services
)新建一個Java Project將axisbinzip解壓解壓後將\axis\lib\目錄下的所有jar引入到項目的classpath路徑中
)客戶端代碼
package cnluxhwsclient;import javaxxmlnamespaceQName;import orgapacheaxisAxisFault;import orgapacheaxisaddressingEndpointReference;import orgapacheaxisclientOptions;import orgapacheaxisrpcclientRPCServiceClient;import orgjunitTest;public class FirstClient {
/** * 用RPC方法調用Web Services * @throws AxisFault
*/@Testpublic void testGetServices() throws AxisFault { //創建一個訪問服務的客戶端
RPCServiceClient client = new RPCServiceClient() //獲取操作客戶端選項的持有者
Options options = clientgetOptions() //設置要調用的Web Services 的地址
String ServiceEPR = //localhost:/axis/services/FirstService;
EndpointReference epr = new EndpointReference(ServiceEPR)
optionssetTo(epr)
//因為提供Web Services普通的Java類沒有package
//所以默認是
//getInfo是要調用的方法
QName qName = new QName( getInfo)
//qName 調用的方法
//new Object[]{}傳遞的參數值
//new Class[]{} 返回值類型
Object[] result = clientinvokeBlocking(qName new Object[]{} new Class[]{Stringclass})
Systemoutprintln(返回的結果是+result[])//調用sayHello方法
qName = new QName( sayHello)
result = clientinvokeBlocking(qName new Object[]{LiHuai} new Class[]{Stringclass})
Systemoutprintln(返回的結果是+result[])
}}
使用生成stub的方式調用Web Services
可以使用wsdljava命令生成調用Web Services的客戶端代碼
wsdljava命令格式wsdljava //localhost:/axis/services/FirstService?wsdl p cnluxhwsclient s o stub
uri 指定訪問的Web Services wsdl文件路徑
p 指定了生成的Java類的包名
o 指定了生成文件保存的根目錄
)在命令行進入到axisbinzip解壓後的\axis\bin\目錄因為wsdljava命令在這個目錄中
)輸入 wsdljava //localhost:/axis/services/FirstService?wsdl p client s o stub 然後回車
)執行完後在\axis\bin\目錄下有個stub文件夾在stub文件夾下的src\cn\luxh\ws\client包下有個FirstServiceStubjava和FirstServiceUnsupportedEncodingExceptionExceptionjava類我們把這兩個類復制項目中相應的包下就可以直接調用Web Services方法了
)stub客戶端代碼
package cnluxhwsclient;import javarmiRemoteException;import javaxxmlnamespaceQName;import orgjunitTest;public class FirstClient {@Testpublic void testGetServiceByStub()
throws RemoteException FirstServiceUnsupportedEncodingExceptionException {FirstServiceStub firstServceStub = new FirstServiceStub()
//wsdljava命令將Web Services 的方法封裝成了靜態類
//所以需要通過下面的方法獲取返回結果FirstServiceStubGetInfo getInfo = new FirstServiceStubGetInfo()
String ruselt = firstServceStubgetInfo(getInfo)get_return()
Systemoutprintln(getInfo方法返回值+ruselt)
FirstServiceStubSayHello sayHello = new FirstServiceStubSayHello()
sayHellosetName(LiHuai)ruselt = firstServceStubsayHello(sayHello)get_return()
Systemoutprintln(sayHello方法返回值+ruselt)
}
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26702.html