這篇文章主要介紹如何編寫WebService的服務端和用戶端
準備工作
下載下傳apache-cxf-2.4.0的jar包
将bin目錄配置到環境變量中,如:E:\Workspaces\MyEclipse 10\CXF\apache-cxf-2.4.0\bin
編寫服務端
-
New –》 Java Project
備注:如果使用apache-cxf-2.4.0,jdk需要是1.7
- 編寫接口和實作類
-
添加@Web Service注解(接口和實作類都要添加)
其中實作類的注解要指明實作了哪個接口
@WebService
public interface HelloWorld {
String sayHi(String name);
}
@WebService(endpointInterface = "com.tgb.ws.HelloWorld",serviceName = "HelloWorldWS")
public class HelloWorldWS implements HelloWorld {
public String sayHi(String name) {
Date currentDate=new Date();
SimpleDateFormat sdf=new SimpleDateFormat("YYYY-MM-dd hh:mm:ss");
String strDate=sdf.format(currentDate);
return name+",你好!"+ "現在時間是:"+strDate;
}
}
endpintInterface:表示該實作類實作的接口,寫完整類名
serviceName表示服務的名稱,可以任意寫。
4. 引入Jar包
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsISMwgTOwEDNyIzMxYDM2EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
5. 釋出服務
(使用Endpoint類釋出的靜态方法)
public class TestMain {
public static void main(String[] arg){
HelloWorld hw=new HelloWorldWS();
//hw.sayHi("許晨陽");
Endpoint.publish("http://localhost/HelloWorldWS",hw);
System.out.println("Web Service暴露成功!");
}
}
Jetty預設是80。這裡将端口改成9009。如:http://localhost:9009/HelloWorldWS
6. 測試服務
服務位址+”?wsdl” http://localhost/HelloWorldWS?wsdl
用戶端
- New Java Project(WS_Client)
-
生成用戶端代碼
在指令視窗定位到用戶端項目的src目錄下,通過工具wsdl2java 服務位址(**?wsdl)生成用戶端代碼
【WebService架構-CXF】——CXF入門執行個體準備工作編寫服務端用戶端回顧與總結 -
編寫用戶端調用代碼,調用服務
調用服務工廠(一個繼承了service的類)的get**Port方法
public class ClientMain {
public static void main(String[] args){
//工廠
HelloWorldWS factory=new HelloWorldWS();
//隻是服務的代理
HelloWorld hw=factory.getHelloWorldWSPort();
System.out.println(hw.sayHi("許晨陽"));
}
}
回顧與總結
回顧自己曾經總結的【EJB系列】(五)——EJB與WebService
發現與用CXF編寫WebService的服務端和用戶端的步驟和代碼有很多相同點。
服務端:
1.用@WebService注解實作類
- | CXF | EJB |
---|---|---|
接口注解 | @WebService注解 | |
實作類上的注解 | @WebService(endpointInterface = “com.tgb.ws.HelloWorld”,serviceName = “HelloWorldWS”) | @WebService,服務名稱預設由實作類名+Service構成 |
實作類中的方法 | @WebMethod |
2.釋出服務
- | CXF | EJB |
---|---|---|
服務位址 | “http://localhost:9009/HelloWorldWS“,可以是任意指定位址 | “http://localhost:8091/ejb_05/UserManagerBean“,這是預設釋出的位址,8091是我本機JBOSS的端口,ejb_05是項目名,UserManagerBean是實作類的名稱 |
伺服器 | 本例,預設采用CXF自帶的Jetty,可以用Tomcat | JBOSS |
3.生成的wsdl文檔
- | CXF | EJB |
---|---|---|
WSDL文檔 | 一個接口文檔和一個實作文檔 | 接口文檔和實作文檔寫在了一個 |
用戶端
- 依據wsdl文檔生成用戶端代碼
- 編寫用戶端調用服務代碼
- 獲得工廠
- 通過工廠生成服務代理
- 調用代理中的方法