我們將Web Service發布在Tomcat或者其他應用服務器上后,有兩種方法可以調用該Web Service:
1、通過瀏覽器調用,返回規范的XML文件
2、通過客戶端程序調用,返回結果可自定義格式
接下來,我利用Eclipse J2EE作為開發工具,演示一個Axis調用WebService的簡單示例
第一種調用見我的另一篇博文:http://www.cnblogs.com/lanxuezaipiao/archive/2013/05/10/3072216.html
步驟如下:
准備工作:下載AXIS2最新版(官方下載:http://axis.apache.org/axis2/java/core/download.cgi),導入AXIS類庫,即把下載包里../lib/目錄下的jar文件拷貝到工程的WEB-INF下的lib文件里
第一步:新建Web Project,項目名稱為WebServiceTest
第二步:新建一個簡單的打印字符串的類HelloWorld.java:
1 public class HelloWorld {
2
3 public String printStr(String name){
4 String resultStr="Hello," + name;
5
6 System.out.println(resultStr);
7 return resultStr;
8 }
9 }
第三步:右擊HelloWorld.java---Web Services---Create Web service.依次點擊下一步……finish,此時發現WebContent目錄下生成一個wsdl目錄,目錄下有一個HelloWorld.wsdl
第四步:測試 web service :右擊HelloWorld.wsdl---Web Services---Test with Web Services Explorer---點擊方法名connectStr----輸入參數Alexia---點go.此時會發現控制台輸出Hello,Alexia,說明 測試成功,WebService沒有問題
第五步:編寫客戶端調用類HelloWorldTest,利用AXIS2遠程調用HelloWorld(為了體現遠程調用,新建一個Project,名稱為AxisTest),代碼如下:
1 import java.rmi.RemoteException;
2 import javax.xml.rpc.ParameterMode;
3 import javax.xml.rpc.ServiceException;
4 import org.apache.axis.client.Call;
5 import org.apache.axis.client.Service;
6 import org.apache.axis.encoding.XMLType;
7
8 public class HelloWorldTest {
9
10 public String invokeRemoteFuc() {
11 // 遠程調用路徑
12 String endpoint = "http://localhost:8080/WebServiceTest/services/HelloWorld";
13 String result = "call failed!";
14 Service service = new Service();
15 Call call;
16
17 try {
18 call = (Call) service.createCall();
19 call.setTargetEndpointAddress(endpoint);
20 // 調用的方法名
21 call.setOperationName("printStr");
22
23 // 設置參數名
24 call.addParameter("name", // 參數名
25 XMLType.XSD_STRING, // 參數類型:String
26 ParameterMode.IN); // 參數模式:'IN' or 'OUT'
27
28 // 設置返回值類型
29 call.setReturnType(XMLType.XSD_STRING); // 返回值類型:String
30 String name = "Alexia";
31 result = (String) call.invoke(new Object[] { name });// 遠程調用
32 } catch (ServiceException e) {
33 e.printStackTrace();
34 } catch (RemoteException e) {
35 e.printStackTrace();
36 }
37
38 return result;
39 }
40
41 // 測試
42 public static void main(String[] args) {
43 HelloWorldTest test = new HelloWorldTest();
44 String result = test.invokeRemoteFuc();
45 System.out.println(result);
46 }
47
48 }
第六步:測試:HelloWorldTest ---Run as---Java application,如果發現控制台正確輸出Hello Alexia,說明測試成功
注意:1、設置方法名和參數名的時候,必須與被調用的WebService保持一致
2、傳遞的參數需封裝到了一個Object數組里
3、遠程調用路徑endpoint為第四步測試中EndPoints