1. 程式人生 > >Apache CXF 簡介

Apache CXF 簡介

開始之前

SOA 目前已經成為了人人皆知的熱點,對分析人員來講,SOA 重點需要加強對業務服務的分析;各種不同的服務是 SOA 的重要基礎;ESB 則提供了一個舞臺,讓各種異構系統的業務服務在這裡進行實際業務的展現、整合等。對開發人員來講,如何更快速地創建出更穩定的業務服務元件是關鍵;應該更加深入領會使用面向介面的元件化開發方式;開發人員重點是保障服務的生命週期,其它的事情則讓業務開發人員來做。

SOA 的重點在於服務的重用,更高一級層次的重用則屬於業務層次了。但是對於開發人員來說,重用的層次需要自己掌握與提升,從程式碼級到元件級、再到業務層次等。

關於本教程

本教程將採取從簡單到複雜,知識點和實際程式碼相結合的方式。先講述一些簡單的概念和程式碼,使大家先對 CXF 建立起直觀的印象,並且能夠寫出自己的應用程式。然後再介紹 CXF 的類與 Spring 2.0 的簡單整合,並且講述如何使用 Web Services,從而能夠在建立好程式的基礎之上,增加業務邏輯,組建自己的 Web Services 應用程式。

目標

學完本教程後,您將不僅能夠掌握 Apache CXF 的基本知識,可以用 CXF 編寫基本的 Web Services,並且能夠增加自己的業務邏輯,從而開發滿足自己需求的 Web Services 應用,最重要的是學會與 Spring 2.0 框架的無縫整合,快速輕鬆地實現服務的釋出與消費。

先決條件

要學習本教程,您需要有一定的程式設計經驗,並瞭解面向物件的概念。同時您應該熟悉 Eclipse 開發環境,熟悉 Ant 的基本使用,熟悉基本的 Web 應用程式開發,熟悉基本的 Spring 概念與配置檔案的編寫。

程式碼示例和安裝要求

您需要一些工具才能試用本教程中的程式碼。所有這些工具都可以免費下載(參見 

參考資源):

  • Java SDK 1.5 或更高版本的 JDK;
  • Apache Ant 1.6.5 或更高版本;
  • Eclipse 3.2 或更高版本;
  • Apache CXF 2.0.2 版本。

CXF 簡介

關於 Apache CXF

Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,現在已經正式更名為 Apache CXF 了,以下簡稱為 CXF。CXF 繼承了 Celtix 和 XFire 兩大開源專案的精華,提供了對 JAX-WS 全面的支援,並且提供了多種 Binding 、DataBinding、Transport 以及各種 Format 的支援,並且可以根據實際專案的需要,採用程式碼優先(Code First)或者 WSDL 優先(WSDL First)來輕鬆地實現 Web Services 的釋出和使用。目前它仍只是 Apache 的一個孵化專案。

Apache CXF 是一個開源的 Services 框架,CXF 幫助您利用 Frontend 程式設計 API 來構建和開發 Services ,像 JAX-WS 。這些 Services 可以支援多種協議,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,並且可以在多種傳輸協議上執行,比如:HTTP、JMS 或者 JBI,CXF 大大簡化了 Services 的建立,同時它繼承了 XFire 傳統,一樣可以天然地和 Spring 進行無縫整合。

功能特性

CXF 包含了大量的功能特性,但是主要集中在以下幾個方面:

  1. 支援 Web Services 標準:CXF 支援多種 Web Services 標準,包含 SOAP、Basic Profile、WS-Addressing、WS-Policy、WS-ReliableMessaging 和 WS-Security。
  2. Frontends:CXF 支援多種“Frontend”程式設計模型,CXF 實現了 JAX-WS API (遵循 JAX-WS 2.0 TCK 版本),它也包含一個“simple frontend”允許客戶端和 EndPoint 的建立,而不需要 Annotation 註解。CXF 既支援 WSDL 優先開發,也支援從 Java 的程式碼優先開發模式。
  3. 容易使用: CXF 設計得更加直觀與容易使用。有大量簡單的 API 用來快速地構建程式碼優先的 Services,各種 Maven 的外掛也使整合更加容易,支援 JAX-WS API ,支援 Spring 2.0 更加簡化的 XML 配置方式,等等。
  4. 支援二進位制和遺留協議:CXF 的設計是一種可插撥的架構,既可以支援 XML ,也可以支援非 XML 的型別繫結,比如:JSON 和 CORBA。

專案目標

下面列出了來自 Apache CXF 官方網站(參見 參考資源)的專案目標。

概要

  • 高效能
  • 可擴充套件
  • 簡單且容易使用

支援多種標準

  • 支援 JAX-WS、 JAX-WSA、JSR-181 和 SAAJ;
  • 支援 SOAP 1.1、1.2、WS-I BasicProfile、WS-Security、WS-Addressing、WS-RM 和 WS-Policy;
  • 支援 WSDL 1.1 、2.0;
  • 支援 MTOM;

多種傳輸方式、Bindings、Data Bindings 和 Format

  • Bindings:SOAP、REST/HTTP;
  • Data Bndings:目前支援 JAXB 2.0、Aegis 兩種,預設是 JAXB 2.0。XMLBeans、Castor 和 JiBX 資料繫結方式將在 CXF 2.1 版本中得到支援;
  • 格式(Format):XML、JSON;
  • 傳輸方式:HTTP、Servlet、JMS 和 Jabber;
  • 可擴充套件的 API 允許為 CXF 增加其它的 Bindings,以能夠支援其它的訊息格式,比如:CSV 和固定記錄長度。

靈活部署

  • 輕量級容器:可在 Tomcat 或基於 Spring 的容器中部署 Services;
  • 整合 JBI:可以在如 ServiceMix, OpenESB or Petals 等等的 JBI 容器中將它部署為一個服務引擎;
  • 整合 SCA:可以部署在如 Tuscany 之類的 SCA 容器中;
  • 整合 J2EE:可以在 J2EE 應用伺服器中部署 Services,比如:Geronimo、JOnAS、JBoss、WebSphere Application Server 和 WebLogic Application Server,以及 Jetty 和 Tomcat;
  • 獨立的 Java 客戶端/伺服器。

支援多種程式語言

  • 全面支援 JAX-WS 2.0 客戶端/伺服器程式設計模型;
  • 支援 JAX-WS 2.0 synchronous、asynchronous 和 one-way API's;
  • 支援 JAX-WS 2.0 Dynamic Invocation Interface (DII) API;
  • 支援 wrapped and non-wrapped 風格;
  • 支援 XML messaging API;
  • 支援 JavaScript 和 ECMAScript 4 XML (E4X) ,客戶端與服務端均支援;
  • 通過 Yoko 支援 CORBA;
  • 通過 Tuscany 支援 SCA;
  • 通過 ServiceMix 支援 JBI ;

程式碼生成

  • Java to WSDL;
  • WSDL to Java;
  • XSD to WSDL;
  • WSDL to XML;
  • WSDL to SOAP;
  • WSDL to Service;

CXF 安裝包

下載及目錄結構

CXF 框架目前的最新版本是 2.0.2,可以訪問 Apache 站點(連結請見 參考資源)下載 CXF 框架的安裝包,下載時請選擇“二進位制釋出包(Binary distribution)”,當然如果您有興趣也可以下載相應版本的“原始碼釋出包(Source distribution)”。

下載完成後,將下載的檔案解壓縮到任意的資料夾中,比如:C:/Java/CXF,在後面的章節中使用 %CXF_HOME% 表示 CXF 框架的存放目錄,解壓縮後形成的檔案目錄結構按名稱排序如下:

圖 1、Apache CXF 發行包的目錄結構示意圖
圖 1、Apache CXF 發行包的目錄結構示意圖

檔案目錄結構及相關檔案的詳細說明:

  • bin(目錄)

    bin 目錄中是 CXF 框架中所提供的程式碼生成、校驗、管理控制檯工具:

    • Java to WSDL : java2wsdl
    • CXF Management Console Tool : mc
    • WSDL to Java : wsdl2java
    • WSDL to Service : wsdl2service
    • WSDL to SOAP : wsdl2soap
    • WSDL to XML : wsdl2xml
    • WSDL Validation : wsdlvalidator
    • XSD to WSDL : xsd2wsdl
  • docs(目錄)

    CXF 所有類(class)對應的 API 文件,為開發者使用 CXF 完成應用開發提供應有的幫助。

  • etc(目錄)

    包含一個基本的 Service 暴露所需要的 web.xml 檔案,及其它的配置檔案。

  • lib(目錄)

    lib 目錄中包含 CXF 及其執行時所需要的和可選的第三方支援類包(.jar 檔案),可以根據不同專案所需的 CXF 特性選擇所需要的支援類包。如果不想一一去區分的話,可以直接在 Web 專案中包含所有的 CXF 及其執行時所需要的第三方支援類包(.jar 檔案)即可。

    其中 cxf-2.0.2-incubator.jar 是 CXF 框架的二進位制包檔案,包含了全部的模組(modules),cxf-manifest-incubator.jar 是列表清單檔案 manifest jar 。

    以下的 jar 包是所有 CXF 專案所必需的:

    • cxf.jar
    • commons-logging.jar
    • geronimo-activation.jar (Or the Sun equivalent)
    • geronimo-annotation.jar (Or the Sun equivalent)
    • geronimo-javamail.jar (Or the Sun equivalent)
    • neethi.jar
    • jaxb-api.jar
    • jaxb-impl.jar
    • stax-api.jar
    • XmlSchema.jar
    • wstx-asl.jar
    • xml-resolver.jar

    對於 Java2WSDL 和 WSDL2Java,除了必需的之外,還需要再增加如下 jar 包:

    • jaxb-xjc.jar
    • veliocity.jar
    • velocity-dep.jar

    為了支援 JAX-WS ,除了必需的之外,還需要再增加如下 jar 包:

    • jaxws-api.jar
    • saaj-api.jar
    • saaj-impl.jar
    • asm.jar (可選的,但是可以提升包裝型別的效能)

    為了支援 XML 配置,除了必需的之外,還需要再增加如下 jar 包:

    • aopalliance.jar
    • spring-beans.jar
    • spring-context.jar
    • spring-core.jar
    • spring.web.jar

    為了獨立的 HTTP 服務支援,除了必需的之外,還需要再增加如下 jar 包:

    • geronimo-servlet.jar
    • jetty.jar
    • jetty-sslengine.jar
    • jetty-util.jar
    • sl4j.jar & sl4j-jdk14.jar (可選的,但是可以提升日誌 logging)

    為了支援 Aegis ,除了必需的之外,還需要再增加如下 jar 包:

    • jaxen.jar
    • jdom.jar
    • stax-utils.jar

    為了支援 WS-Security ,除了必需的之外,還需要再增加如下 jar 包:

    • bcprov-jdk14.jar
    • wss4j.jar
    • xalan.jar
    • xmlsec.jar

    為了支援 HTTP Binding ,除了必需的之外,還需要再增加如下 jar 包:

    • jra.jar
    • jettison.jar (僅為 JSON 服務所需的)
  • licenses(目錄)

    列表了引用第三方 jar 包的相關許可協議。

  • modules(目錄)

    modules 目錄中包含了 CXF 框架根據不同特性分開進行編譯的二進位制包檔案。釋出基於 CXF 框架的 Web 專案時,可以選擇使用該目錄下的所有 .jar 檔案,也可以選擇 lib 目錄中的 cxf-2.0.2-incubator.jar 檔案。

  • samples(目錄)

    samples 目錄中包含了所有隨 CXF 二進位制包釋出的示例,包含這些示例的原始碼和相關 Web 應用配置檔案,可以方便地用 Ant 來編譯執行測試這些示例,來了解 CXF 的開發和使用的方法。可以通過 samples 目錄和它各個子目錄下的 README.txt 的檔案來詳細瞭解示例的編譯與執行的步驟。

  • DISCLAIMER 由於仍是處於 Apache 孵化狀態的專案,這裡描述了一些說明。
  • LICENSE 檔案中包含了 CXF 框架的授權協議 Apache License Version 2.0 。
  • NOTICE 羅列了 CXF 框架用到的相關第三方元件的授權協議以其它的相關資訊。
  • README 檔案中包含了 CXF 框架本身的一些簡要說明。
  • release_notes.txt 包含了 CXF 釋出時的一些資訊,包括執行時所需要的環境,修復 BUG 的列表等。

CXF 框架支撐環境

CXF 框架是一種基於 Servlet 技術的 SOA 應用開發框架,要正常執行基於 CXF 應用框架開發的企業應用,除了 CXF 框架本身之外,還需要 JDK 和 Servlet 容器的支援。

JDK 版本選擇、下載和安裝

CXF 支援非常多的特性,其中不同的特性對 JDK 版本的要求有所不同,但是 JDK 最低的版本是需要選擇 JDK 5 或者以上版本。JDK 各版本均可以在 Sun 公司網站上下載(連結見 參考資源),如何安裝 JDK 請參考 SUN 公司的相關技術文件和 JDK 的幫助文件。為了執行 CXF 攜帶的 samples 目錄下的所有示例,還需要 Apache Ant 1.6.5 或以上的版本(下載連結見 參考資源)。為了使用 CXF 的 WS-Security 特性,還需要 Bouncy Castle ,可以從網站下載(下載連結見 參考資源),並增加到 CLASSPATH 中。

Servlet 容器下載和安裝

CXF 是一種基於 Servlet 技術的 SOA 應用開發框架,需要 Servlet 容器的支援。CXF 支援在多種 Servlet 容器中執行,包括 WebSphere、WebLogic、Tomcat、Jetty 等。為了說明的簡單,我們選擇使用 Tomcat 5.5.25 和 Jetty 作為 CXF 的執行容器,所有配置過程和釋出步驟的說明也均是針對 Tomcat 和 Jetty,如果讀者使用 Tomcat 之外的其它 Servlet 容器或者選擇了 Tomcat 的其它版本,下面的配置過程和步驟可能需要做出調整,請讀者根據實際 Servlet 容器的幫助文件進行相應調整。

Tomcat 與 Jetty 的各個版本均可以在網上下載(下載連結見 參考資源),如何正確安裝 Tomcat 與 Jetty 伺服器請參考相關的幫助文件。

CXF 之初體驗

下面我們將通過直接執行與簡單修改 CXF 自帶的例子體驗一下服務的釋出與消費。

配置與檢查環境變數

UNIX 上:

CXF_HOME=/opt/Java/CXF
JAVA_HOME=/opt/JDK/1.5.0
ANT_HOME=/opt/Java/Ant
export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$CXF_HOME/bin:$PATH
export CLASSPATH=.:$CXF_HOME/lib/cxf-manifest-incubator.jar:./build/classes

Windows 上:

set CXF_HOME=C:\Java\CXF
set JAVA_HOME=C:\JDK\1.5.0
set ANT_HOME=C:\Java\Ant
set PATH=%JAVA_HOME%\bin;%ANT_HOME%\bin;%CXF_HOME%\bin;%PATH%
set CLASSPATH=.;%CXF_HOME%\lib\cxf-manifest-incubator.jar;.\build\classes

為了部署到 Java EE 的容器中進行測試,示例採用 Tomcat 來進行,同樣設定 CATALINA_HOME 變數:

UNIX 上:

CATALINA_HOME=/opt/OpenSource/Tomcat-5.5.25
export CATALINA_HOME

Windows 上:

set CATALINA_HOME=C:\OpenSource\Tomcat-5.5.25

如果以上環境變數您沒有並沒有直接設定到系統的變數中,可以將之另存為一個檔案,儲存起來,比如存為:%CXF_HOME%/env.sh 或者%CXF_HOME%/env.bat,這樣在執行示例前,先執行它來設定環境變數即可。

通過 Ant 來構建和執行示例

構建與啟動 Server

首先,進入到 %CXF_HOME%/java_first_pojo/ 目錄下。在 UNIX 或 Windows 下的命令都是一樣的,如下:

ant server

最後可以看到如下資訊:

build:

server:
 [java] Server ready...

如果看不到這些資訊,請檢查環境變數設定是否正確。

執行 Client

再開啟一個命令視窗,執行:

ant client

最後可以看到如下資訊:

client:
 [java] Invoke sayHi()....
 [java] Hello user

BUILD SUCCESSFUL

如果看不到這些資訊,問題應當是出現在環境變數的設定上,需要再次檢查一下您的環境變數設定是否正確。

體驗改變

通過上面的構建,執行 Server ,再執行 Client ,我們可以體會到利用 CXF 釋出與使用 Web Services 是如此簡單。下面我們將開始進行簡單地程式碼修改。

修改 Client 端

開啟 %CXF_HOME%/samples/java_first_pojo/src/demo/hw/client 目錄下的 Client.java 檔案,在最後面修改為:

System.out.println(client.sayHi("World , 利用 Apache CXF 實現 Web Services"));

修改並儲存後,再執行:

ant client

現在可以看到您修改後的資訊,如下:

client:
 [java] Invoke sayHi()....
 [java] Hello World , 利用 Apache CXF 實現 Web Services

BUILD SUCCESSFUL

修改 Server 端程式碼

Ctrl + C 直接停止剛才啟動的 ant server 啟動端,然後開啟 %CXF_HOME%/samples/java_first_pojo/src/demo/hw/server 目錄下的 HelloWorldImpl.java 檔案,修改

return "Hello " + text;

return "Hello " + text + new java.util.Date();

我們在返回資訊時增加了一個時間戳上去,然後再次分別執行 ant server 與 ant client ,可以看到返回的資訊後面增加了時間,如下:

client:
 [java] Invoke sayHi()....
 [java] Hello World , 利用 Apache CXF 實現 Web ServicesThu Sep 27 21:40:49 CST 2007

BUILD SUCCESSFUL

以上只是一個簡單的示例,體驗一下利用 CXF 進行釋出與使用 Web Services,並嘗試修改了 Server 端與 Client 端的程式碼。下面讓我們更進一步,通過檢視 Server.java 及 Client.java 的程式碼,來了解一下 CXF 的運作過程。

程式碼簡單分析

Server.java 中主要的程式碼片斷如下,它利用 ServerFactoryBean 來進行 Web Services 的釋出,例項化一個實現類 HelloWorldImpl,設定將要進行釋出的地址 address,最後通過 ServerFactoryBean 的 create() 方法就成功地釋出了 Web Services,如此簡單而已,只有六行程式碼:

 HelloWorldImpl helloworldImpl = new HelloWorldImpl();
 ServerFactoryBean svrFactory = new ServerFactoryBean();
 svrFactory.setServiceClass(HelloWorld.class);
 svrFactory.setAddress("http://localhost:9000/Hello");
 svrFactory.setServiceBean(helloworldImpl);
 svrFactory.create();

Client.java 中的主要程式碼片斷如下,通過 ClientProxyFactoryBean 代理工廠類來建立一個服務,繫結到 endPointAddress 地址,就可以 create 並得到服務,並進行服務消費了:

 ClientProxyFactoryBean factory = new ClientProxyFactoryBean();
 factory.setServiceClass(HelloWorld.class);
 factory.setAddress("http://localhost:9000/Hello");
 HelloWorld client = (HelloWorld)factory.create();
 System.out.println("Invoke sayHi()....");
 System.out.println(client.sayHi("user"));

最後,停止 Server,並清除構建過程中產生的一些檔案,直接執行 ant clean 即可。

構建和執行在 Servlet 容器裡的示例

接下來我們嘗試編譯打包一個示例,並部署到 Java EE 的容器裡進行測試。

構建 Web 應用程式包

停止掉前面執行的 Server ,然後在命令列執行:

ant war

將在 %CXF_HOME%/samples/java_first_pojo/build/war/ 目錄下生成 helloworld.war 檔案。

部署應用

先執行如下命令,將執行部署到 Tomcat 容器中:

ant deploy -Dtomcat=true

啟動 Tomcat

然後在 Windows 下通過 startup.bat 或在 Unix 下通過 startup.sh 來啟動 Tomcat,CXF 的應用也就隨之啟動。通過 Tomcat 管理控制檯 http://localhost:8080/manager/html/ 可以看到已經成功部署了 helloworld.war 的應用程式,如下圖所示:

圖 2. 在 Tomcat 5.5.25 上面成功部署 CXF Web Service 的示意圖
圖 2. 在 Tomcat 5.5.25 上面成功部署 CXF Web Service 的示意圖

校驗服務

假設您的 Tomcat 服務埠是 8080 ,那執行以下命令就可以呼叫部署到 Java EE 容器裡的 CXF 所提供的 Web Services 的服務了。

http://localhost:8080/helloworld/services/hello_world?wsdl

檢視 wsdl 檔案的資訊內容如下:

圖 3. 在 Tomcat 5.5.25 上面成功部署 CXF Web Service 的示意圖
圖 3. 在 Tomcat 5.5.25 上面成功部署 CXF Web Service 的示意圖

執行 Client

接下來我們來執行 Client 來使用它,執行:

ant client-servlet

如果您的埠不是 8080,可以使用:

ant client-servlet -Dbase.url=http://localhost: 埠號

或者

ant client-servlet -Dhost=localhost -Dport= 埠號

來呼叫 Web Services ,返回結果如下:

client-servlet:
 [java] Invoke sayHi()....
 [java] Hello World , 利用 Apache CXF 實現 Web ServicesThu Sep 27 21:56:32 CST 2007

BUILD SUCCESSFUL

在 Tomcat 後臺可以看到一些 Exception 的資訊,這是正常的,是因為 public void pingMe() throws PingMeFault 特意丟擲來的,不必理會,沒有丟擲異常資訊才是不正常的,需要重新檢查以上各個步驟是否正確執行了。

解除安裝應用

從 Tomcat 中解除安裝應用,執行:

ant undeploy -Dtomcat=true

最後,停止 Tomcat,然後清除構建過程中產生的一些檔案,直接執行 ant clean 即可。

CXF 應用開發

下面就將開始我們的 CXF Web Services 的開發之旅!首先,要有一個基於 Eclipse 的開發環境;然後,我們將利用這個開發環境開發一個簡單的“調查投票”示例,同時我們將解釋一些 CXF 在開發中進行配置的基本方法。

開發環境準備

在開發之前我們通常需要做些準備工作,比如搭建好開發環境。在本教程中,我們將在 Eclipse 3.2 環境中開發,當然如果您是使用 Eclipse Europa(Eclipse 3.3)也是可以的,我們假設您已經下載並且在計算機中安裝好了 Eclipse 開發環境(關於如何下載和安裝 Eclipse,請參見 參考資源)。

建立專案骨架

啟動 Eclipse,建立一個 Java Project,如果是 WTP 的話,可以直接建立一個 J2EE 的 Web 專案,我們取名為 CXF_Spring_Survey,並設定編譯的 output 路徑為 WEB-INF/classes 目錄,方便直接部署應用程式。

目錄結構如下圖所示:

圖 4. 利用 CXF 開發 Web Services 的工程骨架示意圖
圖 4. 利用 CXF 開發 Web Services 的工程骨架示意圖

為了方便起見,我們直接拷貝 %CXF_HOME%/lib 目錄下的所有 .jar 檔案到 CXF_Spring_Survey 專案的 WEB-INF/lib 目錄下,也可以根據前面“CXF 安裝包”章節所述的各個 jar 包的作用範圍選擇僅需要的 .jar 檔案。在 Eclipse 裡重新整理後,可以看到如下結構:

圖 5. 利用 CXF 開發 Web Services 的工程引入所有 .jar 檔案後的骨架示意圖
圖 5. 利用 CXF 開發 Web Services 的工程引入所有 .jar 檔案後的骨架示意圖

並在 CXF_Spring_Survey 專案屬性裡將這些 .jar 加到 Java Build Path 當中去,如下圖:

圖 6. Eclipse 中引入所有 .jar 檔案後的示意圖
圖 6. Eclipse 中引入所有 .jar 檔案後的示意圖

這樣,專案的基本骨架已經建立完成,接下來開始編寫介面與具體實現的程式碼了。

介面類建立

在專案的 src 目錄中新建一個 ws.cxf 包,並在裡面建立介面類 ISurveyService.java,為了簡單示示例起見,我們僅建立一個方法public String vote(String username,int point); 這裡要注意的是我們在介面上用 @WebService 註解標明這是一個即將暴露為 Web Service 的介面,並將裡面的方法都暴露出去。完整的介面程式碼清單如下:

package ws.cxf;

import javax.jws.WebService;

@WebService
public interface ISurveyService
{
	/**
	 * @param username 名字
	 * @param point 分數
	 * @return
	 */
	public String vote(String username,int point);
}

接下來,我們根據介面的定義,來實現它。

具體類實現

針對介面的定義,我們建立一個相應的實現類,並將其定義在 sw.cxf.impl 包中,完整的程式碼清單如下:

package ws.cxf.impl;

import javax.jws.WebService;
import ws.cxf.ISurveyService;

@WebService
public class SurveyService implements ISurveyService
{
	private String excludeName = "Michael";
	private int leastPonit = 5;

	public String vote(String username,int point)
	{
		String result = "";
		if(excludeName.equals(username))
		{
			result = " 您不能重複進行投票!";
		}
		else
		{
			result = " 謝謝您的投票!";
			if(point < leastPonit)
			{
				result += " 您的投票分數太低!";
			}
			else
			{
				result += " 您的投票分數通過稽核!";
			}
		}
		return result;
	}

	// For IoC
	public String getExcludeName()
	{
		return excludeName;
	}

	public void setExcludeName(String excludeName)
	{
		this.excludeName = excludeName;
	}

	public int getLeastPonit()
	{
		return leastPonit;
	}

	public void setLeastPonit(int leastPonit)
	{
		this.leastPonit = leastPonit;
	}
}

介面定義與具體的實現就這樣簡單完成了,接下來就是相關的配置工作了,首先進行 Spring 的 Bean 配置。

Spring 配置

在 src 目錄中建立 beanRefServer.xml 檔案,用來定義 Spring 的 Bean 的配置,CXF 支援 Spring 2.0 Schema 標籤配置方式,並且提供快捷暴露 Web Services 的標籤。

首先,我們需要引入 Spring 與 CXF 的名稱空間(namespace),如下:

            
           

相關推薦

Apache CXF 簡介

開始之前 SOA 目前已經成為了人人皆知的熱點,對分析人員來講,SOA 重點需要加強對業務服務的分析;各種不同的服務是 SOA 的重要基礎;ESB 則提供了一個舞臺,讓各種異構系統的業務服務在這裡進行實際業務的展現、整合等。對開發人員來講,如何更快速地創建出更穩定的業務服務元件是關鍵;應該更加深入領會使

分布式架構探索 - 2. WebService RPC框架之Apache CXF

tomcat7 als cti nvi urn lap add ring mod Apache CXF是一個開源的WebService RPC框架。 例子: 1. 新建一個maven web項目, 添加pom 如下: <?xml version="1.0"

Apache服務簡介及編譯安裝詳解

Apache簡介 Apache編譯安裝詳解 Apache設置啟動腳本 Apache服務簡介及編譯安裝詳解一、Apache簡介Apache HTTP Server(簡稱Apache)是Apache軟件基金會的一個開放源碼的網頁服務器,是目前世界上使用最廣泛的一種web server,它以跨平臺,高效

使用Apache CXF根據wsdl文件生成代碼

bugs 代碼 jdk property 遇到 AI div www per 1、去官網下載,我用的是apache-cxf-2.5.10.zip 2、解壓 3.通過命令行進入Apache CXF的bin目錄,如我的目錄是D:\BIS\axis2\apache-cxf-2.

Apache Flume簡介及安裝部署

display 根據 buffers type hello headers agent tran 結構圖 概述 Flume 是 Cloudera 提供的一個高可用的,高可靠的,分布式的海量日誌采集、聚合和傳輸的軟件。 Flume 的核心是把數據從數據源(source)收集

Apache CXF實戰之一 Hello World Web Service

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Apache CXF實戰之五 壓縮Web Service資料

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Apache CXF實戰之二 整合Sping與Web容器

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Apache CXF基本使用

一、服務端開發 1、建立web專案 2、匯入jar包 3、web.xml中配置Servlet 1 <!-- 配置CXF框架提供的Servlet --> 2 <servlet> 3 <servlet-name>cxf</servl

Apache CXF wsdl2java工具使用教程

使用 Apache CXF wsdl2java工具生成webservice客戶端程式碼 1、先執行服務端專案 2、找到客戶端程式碼生成的專案路徑 上圖中的 F:\workplace-practice\webserviceclient\src\main

[Kafka] Apache Kafka 簡介、叢集搭建及配置詳解

前言 kafka是一種高吞吐量的分散式釋出訂閱訊息系統,它可以處理消費者規模的網站中的所有動作流資料。這種動作(網頁瀏覽,搜尋和其他使用者的行動)是在現代網路上的許多社會功能的一個關鍵因素。這些資料通常是由於吞吐量的要求而通過處理日誌和日誌聚合來解決。 Kafk

apache CXF入門

下載:官網:cxf.apache.org     Apache CXF = Celtix + Xfire     支援多種協議:         SOAP1.1,1.2         XML/HTTP         CORBA(Common Object Request

Apache kafka簡介

在 第一個挑戰是如何收集大量的資料,第二個挑戰是分析收集的資料。為了克服這些挑戰,你必須需要一個訊息系統。 kafka專門分散式高吞吐量系統而設計。kafka往往工作的很好,作為一個更傳統的訊息代理的替代品。與其他訊息傳遞系統相比,kafka具有更好的吞吐量,內建分割槽,複製和固有的容錯能力

Apache CXF實戰之四 構建RESTful Web Service

                本文連結:http://blog.csdn.net/kongxx/article/details/7527115這篇文章介紹一下怎麼通過CXF來發布RESTful的Web Service.1. 首先是實體類,注意其中的@XmlRootElement註解package com.g

使用Apache CXF框架開發webservice服務的客戶端

場景: webservice服務的客戶端用來訪問webservice這是個異構的架構,      本客戶端使用Java開發,服務端不限程式語言,只需遵循wsdl規範即可。 1.在開發客戶端時,會得到需要訪問的服務的釋出服務地址,本例使用如下地址:   http

在spring web專案中使用Apache CXF框架釋出webservice服務

場景: 使用Apache CXF釋出一個查詢城市資訊的服務,       查到資訊是服務端寫的一個JSON格式的靜態資料,使用webservice的最簡流程。 1.建立spring web專案,且確保web專案在Tomcat中能正常啟動。   講解:本例的

Apache-dbutils 簡介及事務處理

/**   * @ClassName: JdbcUtils2   * @Description: 資料庫連線工具類   * @author:   * @date:   *   */   public class JdbcUtils2 {              private static Combo

spring 丟擲自定義異常報java.lang.RuntimeException: org.apache.cxf.interceptor.Fault: Transaction rolled back

介紹一下我報這個錯誤造成的原因:    我啟用了aop全域性事務管理,但是我在業務程式碼中自定義了一個異常類繼承了Exception,當我需要在指定位置丟擲這個異常的時候,就會報:java.lang.RuntimeException: org.apache.cxf.inter

Apache ZooKeeper簡介

Apache ZooKeeper致力於開發和維護一個開源伺服器,從而實現高度可靠的分散式協調。什麼是ZooKeeper?ZooKeeper是一個集中服務,用於維護配置資訊,命名,提供分散式同步和提供組服

apache CXF wsdl2java工具的簡單使用

最近,由於要用到某公司提供的webservice實現的api介面,想到了用cxf的wsdl2java工具來生成客戶端程式。(自己寫是比較麻煩且費時,so偷懶一下、、) 使用步驟如下: 一、下載apache cxf的包,如apache-cxf-2.7.10.zip,地址