本文作者在學習使用Java開發Web Service(不包括Restful)時,由於不知道Java有這么多框架支持開發Web Service一度陷入迷惘,不知道這些框架各有
什么不同,各有什么優缺點。經過幾天的查資料、實驗、失敗、再查資料、再實驗的過程,終於有了一個大概的了解,也把自己的學習成果跟大家分享一下:
用Java開發Web Service一般有三種方式,本文在Idea下分別使用三種方式並結合Spring容器實現了三個Demo,下面為大家一一介紹。
1、Axis、XFire和CXF方式
這幾種框架都采用“代碼優先”的方式開發Web Service,即先開發出普通的Java代碼,然后使用框架自動將Java對象方法發布成Web Service。
Idea自帶Axis框架,在創建工程時選擇即可(Web Application->WebServices,Version中選擇Apache Axis)。
該方式的開發過程很簡單,實現好web service 類后,點擊Idea窗口中的Tool->Web Service->Generate wsdl from java code,配置好服務地址即可。
該示例較簡單未上傳。
2、Spring-WS方式
該框架是“文檔優先”方式,即先制定出報文協議,然后再開發具體的服務應用。
Idea自帶該框架,在創建工程時選擇(Spring->Spring Web Services)即可自動下載相關包。
詳細開發步驟如下:
2.1 在web.xml中添加servlet
2.2、 在WEB-INF下建立配置文件spring-ws-servlet.xml
2.3、 在resources目錄下建立hello.wsdl
2.4 、創建web service 類和終結點
2.5、 在spring-ws-servlet.xml文件中配置終結點bean
示例Demo下載:http://files.cnblogs.com/wenjingu/springws.zip
3、JAX-WS方式
JAX-WS是JDK自帶的框架,它是Java的Web服務標准。該框架同時支持“代碼優先”方式和“文檔優先”方式,但似乎對“文檔優先”方式的支持更好一些。
很多JAX-WS開發者都推薦使用“文檔優先”方式。Idea自帶該框架,在創建工程時選擇(Web Application->WebServices,Version默認)即可自動下載相關包。
開發步驟如下:
3.1、“代碼優先”方式與1類似
3.2、“文檔優先”方式與2類似
示例Demo下載:http://files.cnblogs.com/wenjingu/jaxws.zip 只傳了服務端,客戶端按4.2節的步驟創建即可。
4、測試
4.1、在瀏覽器輸入:http://localhost:8080/services/HelloWorld?wsdl可以顯示該文件內容,輸入:http://localhost:8080/services/HelloWorld可顯示類似如下內容:
4.2、在Idea中創建一個WebService Client工程,idea會自動創建一些代碼,修改后如下所示:
public class HelloWorldClient { public static void main(String[] argv) { mypackage.HelloWorld service = new HelloWorldService().getHelloWorldPort(); //invoke business method service.sayHelloWorldFrom("192.168.20.106"); } }
執行后會在服務端打印:Hello, world, from 192.168.20.106。
4.3、很多開發者建議用SoapUI測試,本文尚未使用,有時間再研究下。
補充:
CXF現在已實現了JAX-WS2.0規范,開始提供對JAX-WS API的支持。