service部分
在eclipse下新建一個動態web項目
在項目中新建一個service類
編寫SayHello類的代碼
package org.sunny.service; //包不要引用錯了 import javax.jws.WebService; import javax.xml.ws.Endpoint; //注解@WebService不能少 @WebService public class SayHello { //該方法為客戶端調用的方法,方法名任意 public String say(String name){ return "Hello " + name + " , this is SayHelloService !" ; } public static void main(String[] args) { //第一個參數是訪問時的url,9091是任意一個不占用的端口 Endpoint.publish("http://localhost:9091/Service/SayHello", new SayHello()); System.out.println("service success !"); } }
進行測試:對任意空白處右鍵
或者
運行后將會調用類中的main方法
運行結果出現如下配置則表示發布成功
訪問網頁:http://localhost:9091/Service/SayHello?wsdl
注意:‘?wsdl’是必須要添加的。
出現如下頁面表示發布成功
client部分
新建客戶端類
當然,你也可以新建一個web項目來編寫客戶端代碼,本次client可service放在同一個項目下
打開命令行:win+R打開運行,輸入cmd
輸入以下命令
wsimport -s E:\SunnyWen\Data\Java_web\WebServiceDemo\src -p org.sunny.client.config -keep http://localhost:9091/Service/SayHello?wsdl
-s 后面的是你項目src所在的路徑
-p 后面的是你通過該命令生成的類所在的包
-keep 表示導出webservice的class文件時是否也導出源代碼java文件.
-verbose表示詳細信息。
-d 表示輸出的目錄,目錄必須事先存在,否則導出失敗。
在JDK的bin文件夾中,有一個wsimport.exe,這個工具依據wsdl文件生成相應的類文件,用這些類文件,就可以像調用本地的類一樣調用WebService提供的方法。該工具可以用於非Java的服務器,如:用C#編寫的WebService,通過wsimport則生成Java的客戶端實現。
其他命令參數請參照:http://download-llnw.oracle.com/javase/6/docs/technotes/tools/share/wsimport.html
對client類進行代碼編寫
package org.sunny.client; import java.net.URL; import javax.xml.namespace.QName; import javax.xml.ws.Service; //包別導錯了 import javax.xml.ws.WebServiceClient; //導入兩個命令生成的類 import org.sunny.client.config.SayHello; import org.sunny.client.config.SayHelloService; //注解@WebServiceClient需要加入 @WebServiceClient public class ClientToSay { public static void main(String[] args) { // 方法一 /*try { // 服務WSDL Document的地址 URL url = new URL("http://localhost:9091/Service/SayHello?wsdl"); // 1.Qnameqname是qualified name 的簡寫 // 2.構成:由名字空間(namespace)前綴(prefix)以及冒號(:),還有一個元素名稱構成 // 由package-info.java文件可知namespace為http://service.sunny.org/, QName qname = new QName("http://service.sunny.org/", "SayHelloService"); Service service = Service.create(url, qname); SayHello sayHello = service.getPort(SayHello.class); String result = sayHello.say("Sunny01"); System.out.println(result); } catch (Exception e) { e.printStackTrace(); }*/ // 方法二 //通過SayHelloService的getSayHelloPort()方法的奧SayHello接口 SayHello sayHello = new SayHelloService().getSayHelloPort(); //調用SayHello接口的say方法 String result = sayHello.say("Sunny02"); //輸出返回內容 System.out.println(result); } }
運行為java application程序,輸出結果