創建Web Service步驟
一、創建服務端工程
1、WebServerTest (web 工程)
File—New—Other——
選擇Dynamic Web Project
配置Tomcat服務器
點擊Browse選擇Tomcat所在目錄
點擊Finish
點擊Finish完成WebServerTest的創建
2.、創建服務的類和方法
在Java Resources:src上右鍵新建一個class
package com.test.service;
public class WSTest {
public String sayHello(String name){
return "Hello, "+name;
}
}
3、創建Web service
配置發佈的服務
4、發佈服務
點擊servers,右鍵單擊空白處,New—Server
下一步
點擊Add再點擊Finish
查看服務的目錄
啓動服務器,輸入http://localhost:8080/WebServerTest/services
有如下方法說明發布成功
5、測試服務
調用服務方法
http://localhost:8080/WebServerTest/services/WSTest?method=sayHello&arg0=world!
WSTest 服務類
sayHello 服務方法
Arg0=world 方法參數
二、創建客戶端工程
1、新建一個普通工程Java Project (WSClient)
2、利用wsdl文件生成服務接口類
選擇工程WSClient右鍵新建一個Web Service Client
點擊下一步
選中WSTest.wsdl點擊OK最後點擊finish生成如下文件
3、建測試類
package com.test.service;
import java.net.URL;
public class MyTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
WSTestService service = new WSTestServiceLocator();
//調用localhost的服務
WSTest wstest0 = service.getWSTest();
System.out.println(wstest0.sayHello("world"));
//調用其他路徑的服務
URL portAddress = new URL("http://localhost:8080/WebServerTest/services/WSTest");
WSTest wstest1 = service.getWSTest(portAddress);
System.out.println(wstest1.sayHello("world"));
} catch (Exception e) {
e.printStackTrace();
}
}
}
運行測試類
三、不需要任何配置文件調用web service
上面的客戶端測試類需要通過服務器生成的wsdl文件來生成服務接口,但在其他電腦上沒有任何配置文件怎麼調用上面發佈的web service?
通過使用axis提供的api即可,方法如下
public static void testToMySelf() {
try {
// 可以通過這個網址直接查看到wsdl文件
String endpoint = "http://10.10.114.163:8080/WebServerTest/services/WSTest?wsdl";
Service service = new Service();
// 通過service創建call對象
Call call = (Call) service.createCall();
// 設置service所在URL
call.setTargetEndpointAddress(new java.net.URL(endpoint));
// "http://service.test.com/"是通過上面網址查看到wsdl文件的targetNamespace的值,"sayHello"爲方法名
call.setOperationName(new QName("http://service.test.com/","sayHello"));
// 傳入的參數及類型
call.addParameter(new QName("http://service.test.com/", "name"),org.apache.axis.encoding.XMLType.XSD_STRING,javax.xml.rpc.ParameterMode.IN);
call.setUseSOAPAction(true);
// 返回參數的類型call.setSOAPActionURI("http://service.test.com/sayHello");
call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING);
// Object 數組封裝了參數,
String ret = (String) call.invoke(new Object[] { "world!" });
System.out.println("--------" + ret);
} catch (Exception e) {
e.printStackTrace();
}
}
四、根據上面原理訪問下天氣預報的web服務
public static void WeatherTest() {
try {
String endpoint = "http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl";
Service service = new Service();
Call call = (Call) service.createCall();// 通過service創建call對象
// 設置service所在URL
call.setTargetEndpointAddress(new java.net.URL(endpoint));
call.setOperationName(new QName("http://WebXml.com.cn/",
"getWeatherbyCityName"));
call.addParameter(
new QName("http://WebXml.com.cn/", "theCityName"),
org.apache.axis.encoding.XMLType.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);
call.setUseSOAPAction(true);
call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_VECTOR); // 返回參數的類型(不能用Array,否則報錯)
call.setSOAPActionURI("http://WebXml.com.cn/getWeatherbyCityName");
Vector ret = (Vector) call.invoke(new Object[] { "大慶" });
System.out.println("--------" + ret);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
運行結果