WebService一之快速入門
最近工作需要用到webservice,對WebService相關知識進行了蒐集整理,總結記錄一下。
一.常用的WebService框架
1、JWS是Java語言對WebService服務的一種實現,用來開發和釋出服務。而從服務本身的角度來看JWS服務是沒有語言界限的。但是Java語言為Java開發者提供便捷釋出和呼叫WebService服務的一種途徑。
2、Axis2是Apache下的一個重量級WebService框架,準確說它是一個Web Services / SOAP / WSDL 的引擎,是WebService框架的集大成者,它能不但能製作和釋出WebService,而且可以生成Java和其他語言版WebService客戶端和服務端程式碼。這是它的優勢所在。但是,這也不可避免的導致了Axis2的複雜性,使用過的開發者都知道,它所依賴的包數量和大小都是很驚人的,打包部署釋出都比較麻煩,不能很好的與現有應用整合為一體。但是如果你要開發Java之外別的語言客戶端,Axis2提供的豐富工具將是你不二的選擇。
3、XFire是一個高效能的WebService框架,在Java6之前,它的知名度甚至超過了Apache的Axis2,XFire的優點是開發方便,與現有的Web整合很好,可以融為一體,並且開發也很方便。但是對Java之外的語言,沒有提供相關的程式碼工具。XFire後來被Apache收購了,原因是它太優秀了,收購後,隨著Java6 JWS的興起,開源的WebService引擎已經不再被看好,漸漸的都敗落了。
4、CXF是Apache旗下一個重磅的SOA簡易框架,它實現了ESB(企業服務匯流排)。CXF來自於XFire專案,經過改造後形成的,就像目前的Struts2來自WebWork一樣。可以看出XFire的命運會和WebWork的命運一樣,最終會淡出人們的視線。CXF不但是一個優秀的Web Services / SOAP / WSDL 引擎,也是一個不錯的ESB匯流排,為SOA的實施提供了一種選擇方案,當然他不是最好的,它僅僅實現了SOA架構的一部分。
注:對於Axis2與CXF之間的關係,一個是Axis2出現的時間較早,而CXF的追趕速度快。
如何抉擇:
1、如果應用程式需要多語言的支援,Axis2 應當是首選了;
2、如果應用程式是遵循 Spring 哲學路線的話,Apache CXF 是一種更好的選擇,特別對嵌入式的 Web Services 來說;
3、如果應用程式沒有新的特性需要的話,就仍是用原來專案所用的框架,比如 Axis1,XFire,Celtrix或 BEA 等等廠家自己的 Web Services 實現,就別勞民傷財了。
二.快速搭建WebService服務
在jdk1.6中就自帶了WebService的實現,用jdk自帶的WebService元件jax-ws搭建WebService服務。
服務端
1.新建一個java 工程
2.定義介面
import javax.jws.WebService;
@WebService
public interface MyService {
String sayHello(String name);
}
3.定義實現類:
import javax.jws.WebService; @WebService public class MyServiceImpl implements MyService { @Override public String sayHello(String name) { return "Hello:"+name; } }
4.服務端釋出程式:
import javax.xml.ws.Endpoint;
public class WebServicePublish {
public static void main(String[] args) {
String address = "http://localhost:8989/Service/jdkService";
Endpoint.publish(address, new MyServiceImpl());
System.out.println("Service success!");
}
}
開啟瀏覽器,輸入:http://localhost:8989/Service/jdkService?wsdl,可以看到生成的wsdl檔案。
客戶端
1.再新建一個java工程
2.利用jdk自帶的wsimport命令,來生成客服端的WebService程式碼。
開啟cmd,執行命令:
wsimport -s E:\code\java\webservice\JdkClient1\src -p com.cxf.client -keep http://localhost:8989/Service/jdkService?wsdl
這裡,“E:\code\java\webservice\JdkClient1\src”為你的java工程的src目錄,“com.cxf.client”為要生成的包。
執行後,重新整理一下src目錄,可以看到新生成了對應的檔案。
3.編寫測試類:
public class ServiceTest {
public static void main(String[] args) {
//建立工廠
MyServiceImplService factory = new MyServiceImplService();
//工廠生成例項
MyServiceImpl msImpl = factory.getMyServiceImplPort();
//呼叫例項方法
String result = msImpl.sayHello("java");
System.out.println(result);
}
}
執行,可以看到結果:
Hello:java
參考: