天天看點

XFire 入門XFire 入門

XFire 入門

輕松将 POJO 釋出成 Web 服務

肖 菁, 自由撰稿人

簡介: Java 社群一直試圖将 POJO 的作用發揮到極緻,降低 Java 應用實作的難度,最近的嘗試是将 EJB3.0 建立在 POJO 之上;另一方面,SOA 是目前 Java 社群炙手可熱的名詞,非常多的企業都在努力應用和實施 SOA;XFire 為這兩方面的需求提供了一種魔術般的解決方式,我們很快能夠發現使用 XFire 建立和釋出 Web 服務可以直接基于 POJO,将煩人的繼承關系和一大堆其他可能的限制丢在一邊。

釋出日期:

 2007 年 5 月 16 日 

級别:

 初級 

通路情況 : 29708 次浏覽 

評論: 0 (檢視 | 添加評論 - 登入)

XFire 入門XFire 入門

 平均分 (72個評分)

為本文評分

POJO、SOA 概述

被重新審視的 POJO

POJO(Plain Old Java Object,簡單 Java 對象)是 Java 社群中最早的成員(回想您學習 Java 時第一個興奮的時刻,那個簡單的 "Hello World!" 例子),也是最簡單、最容易實作的方式。

然而現實中 Java 的發展已經遠遠超越了 POJO 的範圍,成為面向對象技術應用中最成功的程式設計語言,尤其是繼承、多态的應用為我們造就了一大批開發架構(如 Struts)和标準(如 EJB),随之而來的就是實作的複雜化,我們必須面對一大堆繼承關系的限制。比如說:要開發一個基于 Struts 的應用,我們必須了解 Struts 特定的繼承關系如 ActionForm、ValidateActionForm;要開發一個 EJB 應用,我們必須繼承 EJBObject、SessionEJB 等。

為了抛開這些限制,降低 Java 應用實作的難度,Java 社群開始重新審視 POJO 的價值,試圖将 POJO 的作用發揮到極緻,最新的努力是 EJB3.0。Java 社群将 EJB3.0 設計為基于 POJO,而不是為他準備更多的繼承關系等限制。

讓人愛恨交加的 SOA

SOA 已經成為了目前 Java 社群中炙手可熱的名詞,幾乎所有的軟體廠商都在讨論它,為他提供解決方案和産品支援,大部分的企業也已經在企業内部實施或者正在考慮實施 SOA。

然而 SOA 在企業内的實施卻不是一項簡單的任務,即使抛開建立系統直接基于 SOA 架構實施的因素,要把企業已有系統納入 SOA 架構也不是一件容易的事情。企業必須在對目前架構深入了解的基礎上,對已有系統進行大規模的改造才能滿足新的要求。如何經濟的從原有技術架構切換到 SOA 架構成為很多企業的難題。

回頁首

XFire 概述

XFire 是 codeHaus 組織提供的一個開源架構,它建構了 POJO 和 SOA 之間的橋梁,主要特性就是支援将 POJO 通過非常簡單的方式釋出成 Web 服務,這種處理方式不僅充分發揮了 POJO 的作用,簡化了 Java 應用轉化為 Web 服務的步驟和過程,也直接降低了 SOA 的實作難度,為企業轉向 SOA 架構提供了一種簡單可行的方式。

XFire 目前最新的版本是 1.2.2,目前支援的特性主要包括:

  • 支援将 Web 服務綁定到 POJO、XMLBeans、JAXB1.1、JAXB2.0 和 Castor;
  • 支援基于 HTTP、JMS、XMPP 等多種協定通路 Web 服務;
  • 支援多種 Web 服務業界重要标準如 SOAP、WSDL、Web 服務尋址(WS-Addressing)、Web 服務安全(WS-Security)等;
  • 支援 JSR181,可以通過 JDK5 配置 Web 服務;
  • 高性能的 SOAP 實作;
  • 伺服器端、用戶端代碼輔助生成;
  • 對 Spring、Pico、Plexus 等項目的支援等。

回頁首

XFire 安裝包

XFire 架構目前的最新版本是 1.2.6,可以通路 xfire.codehaus.org 下載下傳 XFire 架構的安裝包,下載下傳時請選擇“全部二進制釋出包(Binary Distribution in zip package)”,而不僅僅是“XFire jar 檔案(Jar of all XFire modules)”。

下載下傳完成後,我們可以将下載下傳的 .zip 檔案解壓縮到任意的檔案夾中(後面的章節中使用 % XFIRE_HOME % 表示 XFire 架構的安裝目錄),解壓縮後形成的檔案目錄結構如下:

  • api(目錄)

    api 目錄中是 XFire 架構中所有類(class)對應的 API 文檔,為開發者使用 XFire 完成應用開發提供幫助。

  • examples(目錄)

    examples 目錄中包含了所有随 XFire 二進制包釋出的執行個體,包括這些執行個體的源代碼和相關 Web 應用配置内容。

  • lib(目錄)

    lib 目錄中包含 XFire 運作所需要的外部支援類包(.jar檔案),可以根據不同項目所需的 XFire 特性選擇所需要的支援類包。保守的方法是在 Web 項目中包含所有的外部支援類包(.jar檔案)。

  • manual(目錄)

    manual 目錄中包含有 XFire 架構的幫助文檔,開發者可以從這些幫助文檔中學習更多運用 XFire 架構實作 SOA 的知識和技巧。

  • modules(目錄)

    modules 目錄中包含了 XFire 架構根據不同特性分别編譯的二進制封包件。釋出基于 XFire 架構的 Web 項目時,可以選擇使用該目錄下的所有 .jar 檔案,也可以選擇 XFire-all-1.2.6.jar 檔案。

  • XFire-all-1.2.6.jar

    XFire 架構的二進制封包件,包含了全部的子產品(modules)。

  • LICENSE.txt

    LICENSE.txt 檔案中包含了 XFire 架構的授權協定。

  • NOTICE.txt
  • README.txt

    這兩個檔案中包含了 XFire 釋出時的一些有用的資訊。

回頁首

XFire 架構支撐環境

XFire架構是一種基于Servlet技術的SOA應用開發架構,要正常運作基于XFire應用架構開發的企業應用,除了XFire架構本身之外,還需要JDK和Servlet容器的支援。

1.JDK 版本選擇、下載下傳和安裝

XFire 支援非常多的特性,其中不同的特性對 JDK 版本的要求有所不同,比如如果項目中選擇基于 JSR181 标準釋出 Web 服務,我們就需要選擇 JDK5 或者以上版本,如果僅僅選擇将 Web 服務綁定到最簡單的 POJO,我們隻需要選擇 JDK1.4 版本即可。

JDK 各版本均可以在 java.sun.com 網站上下載下傳,如何安裝 JDK 請參考 SUN 公司的相關技術文檔和 JDK 的幫助文檔。

2.Servlet 容器下載下傳和安裝

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

TOMCAT 各版本均可以在 tomcat.apache.org 網站上下載下傳,如何正确安裝 TOMCAT 伺服器請參考 TOMCAT 伺服器的幫助文檔。

3.xalan

XFire 需要 xalan 項目的支援,然而 1.2.6 版本中并沒有帶有相應的 jar 檔案,是以請通路 xml.apache.org,下載下傳 xalan 項目的二進制包。

回頁首

XFire 應用配置

前面的章節中我們下載下傳和安裝了 XFire 安裝包和所需要的支援環境,現在我們開始學習如何從零開始建立 XFire 應用開發環境。下面的所有配置過程和釋出步驟均針對 TOMCAT(版本5.0.30)伺服器,如果選擇其它的 Servlet 容器,下面的配置過程和步驟可能需要做出調整,請讀者根據實際 Servlet 容器的幫助文檔進行相應調整。

1、建立 Web 應用目錄和基本元素

  1. 在 %TOMCAT_HOME%/webapps 目錄下建立新的 Web 應用目錄 “XFire”

    [注] 其中的 %TOMCAT_HOME% 指向 TOMCAT 的安裝目錄。

  2. 在 ”XFire”目錄下建立 ”WEB-INF”目錄、
  3. 在 ” WEB-INF”目錄下建立 ”lib”目錄和 ”classes”目錄
  4. 在 ” WEB-INF”目錄下建立 Web 應用描述檔案 ”web.xml”, ”web.xml”檔案的内容見 清單 1-1。
清單 1-1 WEB-INF\web.xml
1、	<?xml version="1.0" encoding="ISO-8859-1"?>
2、	<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
3、	    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4、	    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee   
			http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
5、	    version="2.4">
6、	
7、	    <display-name>XFire執行個體</display-name>
8、	    <description>
9、	         基于XFire架構釋出Web服務的例子
10、	    </description>
11、	
12、	</web-app>
      

2、拷貝 XFire 所需的支援類封包件

拷貝 %XFIRE_HOME%/lib 目錄下所有檔案到 “1、建立 Web 應用目錄和基本元素” 中所建立的 ”lib”目錄下,将 %XFIRE_HOME%/XFire-all-1.2.6.jar 檔案也拷貝到 “1、建立 Web 應用目錄和基本元素” 中所建立的 ”lib”目錄下。将 xalan 安裝包中的所有 jar 檔案和所需要的支援 jar 檔案拷貝到相同的 ”lib”目錄下。

[注] 為了減少拷貝的 jar 檔案的數目,開發者可以根據項目的需要選擇需要拷貝的 jar 檔案,而不是全部拷貝,如何根據需要選擇拷貝合适的類封包件請通路 XFire 站點。

3、配置 XFire 架構運作所需的 Servlet

修改 web.xml 檔案,在其中增加如下 Servlet 定義内容。

1、	<servlet>
2、	    <servlet-name>XFireServlet</servlet-name>
3、	    <display-name>XFire Servlet</display-name>
4、	    <servlet-class>
5、	        org.codehaus.xfire.transport.http.XFireConfigurableServlet
6、	    </servlet-class>
7、	  </servlet>
8、	
9、	  <servlet-mapping>
10、	    <servlet-name>XFireServlet</servlet-name>
11、	    <url-pattern>/servlet/XFireServlet/*</url-pattern>
12、	  </servlet-mapping>
13、	
14、	  <servlet-mapping>
15、	    <servlet-name>XFireServlet</servlet-name>
16、	    <url-pattern>/services/*</url-pattern>
17、	</servlet-mapping>
      

4、建立 XFire 架構的服務釋出檔案 services.xml

  1. 在 “1、建立 Web 應用目錄和基本元素” 中建立的 classes 目錄下建立目錄 ”META-INF\xfire”;
  2. 在步驟 a) 中建立的 ”xfire”檔案目錄下建立新檔案 services.xml,檔案的預設内容如 清單1-2 。
清單 1-2 WEB-INF\classes\META-INF\xfire\services.xml
1、	<beans xmlns="http://XFire.codehaus.org/config/1.0">
2、	</beans>
      

回頁首

将 POJO 釋出成 Web 服務

XFire 架構中,我們有兩種方式将 POJO 釋出成 Web 服務:

  • 一種方式是直接使用 Web 服務接口和 Web 服務實作類(POJO)來釋出;
  • 另一種方式是基于 JSR181 标準和注釋技術将被注釋的 POJO 釋出成 Web 服務;

下面的章節中我們将學習使用第一種方式來完成 POJO 的 Web 服務釋出。我們将使用經典的 ”Hello World!”例子來示範将 POJO 釋出成 Web 服務所需要的步驟,不過我們不再是簡單的通路一個 Java 方法來輸出 ”Hello World!”字元串,而是轉為在 SOA 環境下實作:Web 服務用戶端通過通路伺服器端釋出成 Web 服務的 POJO 獲得傳回的 ”Hello World!”字元串後輸出到用戶端的控制台上。

将 POJO 釋出成 Web 服務的基本步驟如下:

  1. 建立 Web 服務接口,聲明該 Web 服務對外暴露的接口;
  2. 建立 Web 服務實作類,為 Web 服務接口提供實作;
  3. 修改 XFire 架構的服務釋出檔案 ---- services.xml,将 POJO 釋出成 Web 服務。

下面我們通過建立 ”Hello World!”例子來具體說明如何實作這三個步驟。

1.建立 Web 服務接口 ---- HelloWorldService

要将 POJO 釋出成 Web 服務,首先需要建立 Web 服務接口,在接口中聲明該 Web 服務需要對外暴露的接口。

我們根據需要建立 Web 服務接口 ” HelloWorldService”,在其中聲明一個 ”sayHello”方法,該方法傳回 ”String ”類型的内容。” HelloWorldService”接口對應的 Java 檔案代碼如 清單 1-3。

清單 1-3 WEB-INF\classes\org\vivianj\xfire\pojo\HelloWorldService.java
1.package org.vivianj.xfire.pojo;
2.
3. /**
4. * HelloWorldService 中聲明需要釋出成 Web 服務的所有 Java 方法 
5. * HelloWorldService 作為Web服務接口
6. */
7. public interface HelloWorldService {
8.	/**
9.	     * sayHello 方法聲明了 Web 服務對外暴露的接口
10.	 * 
11.	 * @return 傳回給用戶端的字元串
12.	 */
13.	public String sayHello();
14.}
      

2.建立 Web 服務實作類 ”HelloWorldServiceImpl”

建立 Web 服務實作類 ”HelloWorldServiceImpl”,它繼承 ”1、建立Web服務接口 ---- HelloWorldService” 中建立的 HelloWorldService 接口,并且為它聲明的 ”sayHello”方法提供具體實作: 傳回字元串”Hello World!”。 ”HelloWorldServiceImpl”類對應的 Java 檔案代碼如 清單 1-4。

清單 1-4 WEB-INF\classes\org\vivianj\xfire\pojo\HelloWorldServiceImpl.java
1.package org.vivianj.xfire.pojo;
2.
3./**
4. * HelloWorldServiceImpl 中為 Web 服務接口中聲明的所有 Java 方法提供具體實作 
5. * HelloWorldServiceImpl 作為 Web 服務的實作類
6. */
7.public class HelloWorldServiceImpl implements HelloWorldService {
8.
9.	/*
10.	 * sayHello 方法為 HelloWorldService 服務接口定義的 sayHello 方法提供具體實作
11.	 *  
12.	 * @see org.vivianj.XFire.pojo.HelloWorldService#sayHelloToXFire()
13.	 */
14.	public String sayHello() {
15.		return "Hello World!";
16.	}
17.
18.}
      

3.修改 services.xml,将 POJO 釋出成 Web 服務

我們可以在 WEB-INF\classes\META-INF\XFire\services.xml 檔案中的 <beans …> 和 </beans> 元素中間加入如下的 xml 内容将上面建立的 HelloWorldService 釋出成 Web 服務。

1.<service>
2.	<name>HelloWorldService</name>
3.	<namespace>http://vivianj.org/HelloWorldService</namespace>
4.	<serviceClass>
5.		org.vivianj.xfire.pojo.HelloWorldService
6.	</serviceClass>
7.	<implementationClass>
8.		org.vivianj.xfire.pojo.HelloWorldServiceImpl
9.	</implementationClass>
10.</service>
      

其中各元素的功能如下:

  • service

    service 标簽和它所包含的 xml 内容為釋出成 Web 服務的 POJO 提供完整的描述。

  • name

    Web 服務被釋出時所采用的唯一名稱。

  • namespace

    Web 服務釋出時所使用的命名空間。

  • serviceClass

    Web 服務接口類的全名,包括包名和類名。

  • implemetationClass

    Web 服務實作類的全名,包括包名和類名。

更多 service 元素的子元素和它們的用法請參考 XFire 站點。

通過上面的三個步驟,我們已經将新建立的HelloWorldService釋出成了Web服務,我們可以使用下面的步驟測試一下建立的Web服務是否能夠正常運作:

  1. 編譯上面的步驟中建立的 Java 接口和類;
  2. 啟動 TOMCAT 伺服器。
  3. 等 TOMCAT 伺服器完全啟動後,打開浏覽器,在位址欄中輸入 http://localhost:8080/XFire/services/HelloWorldService?wsdl。

其中 HelloWorldServcie 是配置檔案中 service\name 元素所定義的内容,”wsdl”參數表示檢視該 Web 服務的 WSDL(Web服務描述語言)檔案。

如果浏覽器中出現如下圖所示類似的内容,表示 Web 服務釋出成功,我們可以編寫用戶端通路該 Web 服務從伺服器擷取傳回字元串,本文下載下傳資源中提供的下載下傳檔案中包含有可供參考的用戶端類 org.vivianj.xfire.pojo.client.HelloWorldServiceClient。

圖:浏覽器中通路效果
XFire 入門XFire 入門

如果浏覽器中出現錯誤提示,請按照上面的步驟和說明檢查已經完成的開發、配置過程是否完全正确。

回頁首

結束語

本文中作者首先講解了 XFire 架構的主要特性,XFire 架構的運作環境以及基于 XFire 架構開發 SOA 應用的基本步驟,并且借助于 SOA 環境下的 ”Hello World!”例子,詳細的講解和示範了如何基于 XFire 架構、經過簡單的開發、配置步驟就将一個 POJO 類中包含的方法釋出成Web服務。從 ”Hello World!”例子實作的過程中,我們可以發現 XFire 架構最大化的發揮了 POJO 的作用,減少了 SOA 實施時對架構本身的依賴,降低了 SOA 實施的難度,企業實施 SOA 時并不需要增加太多的投入就可以實作目标。

回頁首

下載下傳

名字 大小 下載下傳方法
xfire.war 6 KB HTTP

關于下載下傳方法的資訊

參考資料

學習
  • 通路 XFire 架構使用者指南 可以獲得更多關于 XFire 的使用幫助。
  • 通路 XFire 的 Eclipse 插件 可以獲得關于 XFire 提供的 Eclipse 插件的更多資訊。
獲得産品和技術
  • 通路 java.sun.com 獲得 JDK 各種版本二進制安裝包。
  • 通路 tomcat.apache.org 獲得 TOMCAT 伺服器各種版本二進制安裝包。
  • 通路 xml.apache.org 獲得 xalan 架構各種版本二進制安裝包。
  • 通路 XFire.codehaus.org 獲得 XFire 架構的二進制安裝包。

關于作者

肖菁是自由撰稿人,緻力于研究和推廣 JavaEE、Open Source、SOA 技術,發起了開源項目BuildFileDesigner(buildfiledesign.sourceforge.net)和 V-Security(v-security.sourceforge.net)。可以通過電子郵件[email protected] 和他取得聯系。

ws