WebService系列二:使用JDK和CXF框架開發WebService
一、使用JDK開發WebService
服務端程序創建:
1.新建一個JDK開發webservice的服務端maven項目JDKWebServiceServer
2. 定義一個接口,使用@WebService註解標註接口,使用@WebMethod註解標註接口中定義的所有方法
1 package com.study.webservice.ws; 2 3 import javax.jws.WebMethod; 4 import javax.jws.WebService; 5 6 /** 7 * 定義一個接口,使用@WebService註解標註接口,使用@WebMethod註解標註接口中定義的所有方法8 * 9 */ 10 //使用@WebService註解標註IWebService接口 11 @WebService 12 public interface IWebService { 13 14 //使用@WebMethod註解標註IWebService接口中的方法 15 @WebMethod 16 String sayHello(String name); 17 18 @WebMethod 19 String save(String name,String pwd); 20 }
3. 編寫接口的實現類,使用@WebService註解標註實現類,實現接口中定義的所有方法
package com.study.webservice.ws.impl; import javax.jws.WebService; import com.study.webservice.ws.IWebService; /** * 編寫接口的實現類,使用@WebService註解標註實現類,實現接口中定義的所有方法 * */ //使用@WebService註解標註IWebService接口的實現類WebServiceImpl @WebService public class WebServiceImpl implements IWebService { @Overridepublic String sayHello(String name) { System.out.println("WebService sayHello "+name); return "sayHello "+name; } @Override public String save(String name, String pwd) { System.out.println("WebService save "+name+", "+pwd); return "save Success"; } }
4. 使用Endpoint(終端)類發布webservice
package com.study.webservice.ws.publish; import javax.xml.ws.Endpoint; import com.study.webservice.ws.impl.WebServiceImpl; /** * 使用Endpoint(終端)類發布webservice * */ public class WebServicePublish { public static void main(String[] args) { //定義WebService的發布地址,這個地址就是提供給外界訪問Webervice的URL地址,URL地址格式為:http://ip:端口號/xxxx //String address = "http://192.168.152.1:8989/";這個WebService發布地址的寫法是合法的 //String address = "http://192.168.152.1:8989/Webservice";這個WebService發布地址的是合法的 String address = "http://192.168.152.1:8989/WS_Server/Webservice"; //使用Endpoint類提供的publish方法發布WebService,發布時要保證使用的端口號沒有被其他應用程序占用 Endpoint.publish(address , new WebServiceImpl()); System.out.println("發布webservice成功!"); } }
6. 啟動主程序WebServicePublish,效果如下
7.在瀏覽器中輸入地址http://192.168.152.1:8989/WS_Server/Webservice?wsdl,可看到webservice發布成功
客戶端程序創建:
1. 新建一個JDK開發webservice的客戶端maven項目JDKWebServiceClient
2. 借助jdk的wsimort.exe工具生成客戶端代碼,wsimort.exe工具位於Jdk的bin目錄下
3. 執行命令:wsimport -keep url(url為wsdl文件的路徑)生成客戶端代碼。
打開命令行窗口,切換到src/main/java目錄,執行"wsimport -keep http://192.168.152.1:8989/WS_Server/Webservice?wsdl"生成客戶端代碼,如下圖所示:
4. 借助生成的代碼編寫調用WebService對外提供的方法
package com.study.webservice.ws.client; import com.study.webservice.ws.impl.WebServiceImpl; import com.study.webservice.ws.impl.WebServiceImplService; /** * 調用WebService的客戶端 * */ public class WSClient { public static void main(String[] args) { //創建一個用於產生WebServiceImpl實例的工廠,WebServiceImplService類是wsimport工具生成的 WebServiceImplService factory = new WebServiceImplService(); //通過工廠生成一個WebServiceImpl實例,WebServiceImpl是wsimport工具生成的 WebServiceImpl wsImpl = factory.getWebServiceImplPort(); //調用WebService的sayHello方法 String resResult = wsImpl.sayHello("小不點"); System.out.println("調用WebService的sayHello方法返回的結果是:"+resResult); System.out.println("---------------------------------------------------"); //調用WebService的save方法 resResult = wsImpl.save("小不點","123"); System.out.println("調用WebService的save方法返回的結果是:"+resResult); } }
5. 啟動客戶端主程序WSClient,效果如下
二、使用CXF框架開發WebService
服務端程序創建:
1.新建一個使用CXF框架開發webservice的服務端maven項目CXFWebServiceServer
2. 在pom.xml中引入相關依賴
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <cxf.version>3.1.4</cxf.version> </properties> <dependencies> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>${cxf.version}</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>${cxf.version}</version> </dependency> <!-- 使用cxf內置的jetty服務器發布WebService --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http-jetty</artifactId> <version>${cxf.version}</version> </dependency>
2. 定義一個接口,使用@WebService註解標註接口
package com.study.webservice.ws; import javax.jws.WebService; /** * 定義一個接口,使用@WebService註解標註接口 * */ //使用@WebService註解標註IWebService接口 @WebService public interface IWebService { String sayHello(String name); String save(String name,String pwd); }
3. 編寫接口的實現類,使用@WebService註解標註實現類,實現接口中定義的所有方法,註意代碼標紅色的地方
package com.study.webservice.ws.impl; import javax.jws.WebService; import com.study.webservice.ws.IWebService; /** * 編寫接口的實現類,使用@WebService註解標註實現類,實現接口中定義的所有方法 * */ //使用@WebService註解標註IWebService接口的實現類WebServiceImpl @WebService(serviceName = "IWebService", endpointInterface = "com.study.webservice.ws.IWebService" ) public class WebServiceImpl implements IWebService { @Override public String sayHello(String name) { System.out.println("WebService sayHello "+name); return "sayHello "+name; } @Override public String save(String name, String pwd) { System.out.println("WebService save "+name+", "+pwd); return "save Success"; } }
4. 使用CXF的JaxWsServerFactoryBean發布webservice
package com.study.webservice.ws.publish; import org.apache.cxf.jaxws.JaxWsServerFactoryBean; import com.study.webservice.ws.IWebService; import com.study.webservice.ws.impl.WebServiceImpl; /** * 使用CXF的JaxWsServerFactoryBean發布webservice * */ public class WebServicePublish { public static void main(String[] args) { //定義WebService的發布地址,這個地址就是提供給外界訪問Webervice的URL地址,URL地址格式為:http://ip:端口號/xxxx //String address = "http://192.168.152.1:8989/";這個WebService發布地址的寫法是合法的 //String address = "http://192.168.152.1:8989/Webservice";這個WebService發布地址的是合法的 String address = "http://192.168.152.1:8989/WS_Server/Webservice"; //使用Endpoint類提供的publish方法發布WebService,發布時要保證使用的端口號沒有被其他應用程序占用 /*Endpoint.publish(address , new WebServiceImpl());*/ JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean(); factory.setServiceClass(IWebService.class); //服務發布地址 factory.setAddress(address); factory.setServiceBean(new WebServiceImpl()); factory.create(); System.out.println("發布webservice成功!"); } }
5. 啟動服務端主程序WebServicePublish
6. 在瀏覽器中輸入地址http://192.168.152.1:8989/WS_Server/Webservice?wsdl,可看到webservice發布成功
客戶端程序創建:
1. 新建一個使用CXF框架開發webservice的客戶端maven項目CXFWebServiceClient
2. 在pom.xml中引入相關依賴
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <cxf.version>3.1.4</cxf.version> </properties> <dependencies> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>${cxf.version}</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>${cxf.version}</version> </dependency>
3. 借助jdk的wsimort.exe工具生成客戶端代碼,wsimort.exe工具位於Jdk的bin目錄下
4. 執行命令:wsimport -keep url(url為wsdl文件的路徑)生成客戶端代碼。
打開命令行窗口,切換到src/main/java目錄,執行"wsimport -keep http://192.168.152.1:8989/WS_Server/Webservice?wsdl"生成客戶端代碼,如下圖所示:
5. 使用CXF的JaxWsProxyFactoryBean調用WebService的服務端
package com.study.webservice.ws.client; import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; import com.study.webservice.ws.IWebService; /** * 使用CXF的JaxWsProxyFactoryBean調用WebService的服務端 * */ public class WSClient { public static void main(String[] args) { JaxWsProxyFactoryBean jwpfb = new JaxWsProxyFactoryBean(); jwpfb.setServiceClass(IWebService.class); String address = "http://192.168.152.1:8989/WS_Server/Webservice"; jwpfb.setAddress(address); IWebService hs = (IWebService) jwpfb.create(); //調用WebService的sayHello方法 String resResult = hs.sayHello("小不點"); System.out.println("調用WebService的sayHello方法返回的結果是:"+resResult); System.out.println("---------------------------------------------------"); //調用WebService的save方法 resResult = hs.save("小不點","123"); System.out.println("調用WebService的save方法返回的結果是:"+resResult); } }
6.啟動客戶端主程序,效果如下:
源代碼獲取地址:
https://github.com/leeSmall/WebService
參考文章:
http://www.cnblogs.com/xdp-gacl/p/4259481.html
https://www.cnblogs.com/luangeng/p/6575061.html
WebService系列二:使用JDK和CXF框架開發WebService