使用CXF開發簡單的Web Service-HelloWorld(二)
上篇博文我們介紹了Web Service的基本概念,瞭解它的基本概念之後,我們這篇博文介紹一個開源的WebService框架-Apache CXF,並實現一個HelloWorld例項。
一、開始之前
SOA目前已經成為了人人皆知的熱點,SOA是面向服務的架構,SOA的重點在於服務的重用,即Service1+Service2+Service3,所有的元件都是“即插即用”的。SOA是由IBM提倡的架構,希望以“組裝電腦”的方式開發軟體。SOA涉及到兩個重要的技術:
- 各種提供服務的元件(web service)
- 企業服務匯流排(Enterprise Service Bus ——> ESB )(後面的博文介紹)
二、CXF介紹
CXF號稱是SOA框架,也是Apache旗下的開源框架,由Celtix + XFire這兩門經典的框架合成,是一套非常流行的web service框架。提供了對 JAX-WS 全面的支援,並且提供了多種 Binding 、DataBinding、Transport 以及各種 Format 的支援,並且可以根據實際專案的需要,採用程式碼優先(Code First)或者 WSDL 優先(WSDL First)來輕鬆地實現 Web Services 的釋出和使用。對於CXF的功能特性,以及支援標準,傳輸方式,不再過多的介紹,大家看一下網上的內容即可。
CXF下載地址:
安裝CXF+配置:
- 下載CXF,將壓縮包解壓
- 找到bin目錄,例如:D:\apache-cxf-2.5.9\bin,將這個目錄配置到電腦的環境變數的path下。
- 驗證是否成功。
在命令介面dos下,輸入wsdl2java,例如:
可以看到有相應的資訊輸出,就是我們的命令缺少引數而已,表明可以執行這個命令,已經成功。
三、開發Web Service
1、開發準備
- jdk安裝
- eclipse開發環境
- CXF安裝+配置
2、伺服器端
萬事俱備只欠東風,我們先開發伺服器端。
1、目錄:
每個WebService組建需要2個部分:介面和實現類。
2、伺服器端的程式碼:
介面:HelloWorld
package com.tgb.ws;
import javax.jws.WebService;
@WebService
public interface HelloWorld {
String sayHi(String name);
}
實現類:
package com.tgb.ws.impl;
import java.util.Date;
import javax.jws.WebService;
import com.tgb.ws.HelloWorld;
@WebService(endpointInterface="com.tgb.ws.HelloWorld",
serviceName="HelloWorldWs")
public class HelloWorldWs implements HelloWorld {
@Override
public String sayHi(String name) {
return name + ".您好" + "現在時間是:"
+ new Date();
}
}
介面和實現我們都寫好了,下面我們暴露我們的服務:
package service;
import javax.xml.ws.Endpoint;
import com.tgb.ws.HelloWorld;
import com.tgb.ws.impl.HelloWorldWs;
public class ServerMain {
public static void main(String[] args) {
HelloWorld hw = new HelloWorldWs();
//呼叫EndPoint的publish方法釋出WebService
//呼叫Endpoint的publish方法釋出web service 第一個引數為ip地址 ,第二v引數就是服務的提供者
Endpoint.publish("http://192.168.3.3:8989/crazyit", hw);
System.out.println("WebService呼叫成功了");
}
}
執行main方法,我們就可以發現我們暴露的服務了:
由上圖我們已經成功的暴露服務,我們使用了WebService的註解,但是好像我們到現在還沒有使用CXF, 為什麼呢?
因為WebService是java的規範,CXF是WebService的實現。
3、伺服器端小結
開發伺服器端的步驟,總共分為三步:
(1)開發一個Web Service業務介面。
該介面要用@WebService修飾
(2)開發一個Web Service實現類
實現類也需要用@WebService修改
(3)使用EndPoint類的靜態方法來發布WebService
3、客戶端
1、目錄
2、使用CXF生成客戶端程式碼
首先,新建java專案,在命令列視窗中,切換到此java專案src目錄。使用CXF的命令,wsdl2java+服務暴露地址?wsdl
[注]生成客戶端程式碼時,伺服器端一定要執行,否則會保持,如下圖:
3、客戶端程式碼:
package client;
import com.tgb.ws.HelloWorld;
import com.tgb.ws.impl.HelloWorldWs;
public class ClientMain {
public static void main(String[] args) {
HelloWorldWs hw = new HelloWorldWs();
HelloWorld helloWorld = hw.getHelloWorldWsPort();
System.out.println(helloWorld.sayHi("HelloWorld"));
}
}
執行客戶端,如下圖:
好的,恭喜你,我們已經成功的呼叫了我們的服務。
4、客戶端小結:
使用CXF開發Web Service客戶端得步驟也分三步:
(1)呼叫CXF提供的wsdl2java工具
WSDL-Web Service Definition Language任何語言實現了Web Service,都需要提供、並暴露WSDL文件。
(2)找到wsdl2java所生成類中,一個繼承了Service的類。
該類的例項可當成工廠使用。
(3)呼叫Service子類的例項的getxxxPort方法,返回webService的代理。
總結:
恭喜你,使用CXF開發Web Service的簡單例項到此結束。
下篇博文,我們深入的講解WSDL文件。