<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 40, comments - 58, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    Web Services Xfire

    Posted on 2008-07-18 11:45 Astro.Qi 閱讀(238) 評論(0)  編輯  收藏 所屬分類: Java

    Web Services ---- XFire

    輕松將 POJO 發(fā)布成 Web 服務(wù)

    developerWorks
    文檔選項
    將此頁作為電子郵件發(fā)送

    將此頁作為電子郵件發(fā)送

    未顯示需要 JavaScript 的文檔選項

    樣例代碼


    2007 年 5 月 16 日

    Java 社區(qū)一直試圖將 POJO 的作用發(fā)揮到極致,降低 Java 應(yīng)用實現(xiàn)的難度,最近的嘗試是將 EJB3.0 建立在 POJO 之上;另一方面,SOA 是目前 Java 社區(qū)炙手可熱的名詞,非常多的企業(yè)都在努力應(yīng)用和實施 SOA;XFire 為這兩方面的需求提供了一種魔術(shù)般的解決方式,我們很快能夠發(fā)現(xiàn)使用 XFire 創(chuàng)建和發(fā)布 Web 服務(wù)可以直接基于 POJO,將煩人的繼承關(guān)系和一大堆其他可能的約束丟在一邊。

    POJO、SOA 概述

    被重新審視的 POJO

    POJO(Plain Old Java Object,簡單 Java 對象)是 Java 社區(qū)中最早的成員(回想您學(xué)習(xí) Java 時第一個興奮的時刻,那個簡單的 "Hello World!" 例子),也是最簡單、最容易實現(xiàn)的方式。

    然而現(xiàn)實中 Java 的發(fā)展已經(jīng)遠遠超越了 POJO 的范圍,成為面向?qū)ο蠹夹g(shù)應(yīng)用中最成功的編程語言,尤其是繼承、多態(tài)的應(yīng)用為我們造就了一大批開發(fā)框架(如 Struts)和標準(如 EJB),隨之而來的就是實現(xiàn)的復(fù)雜化,我們必須面對一大堆繼承關(guān)系的限制。比如說:要開發(fā)一個基于 Struts 的應(yīng)用,我們必須了解 Struts 特定的繼承關(guān)系如 ActionForm、ValidateActionForm;要開發(fā)一個 EJB 應(yīng)用,我們必須繼承 EJBObject、SessionEJB 等。

    為了拋開這些限制,降低 Java 應(yīng)用實現(xiàn)的難度,Java 社區(qū)開始重新審視 POJO 的價值,試圖將 POJO 的作用發(fā)揮到極致,最新的努力是 EJB3.0。Java 社區(qū)將 EJB3.0 設(shè)計為基于 POJO,而不是為他準備更多的繼承關(guān)系等限制。

    讓人愛恨交加的 SOA

    SOA 已經(jīng)成為了目前 Java 社區(qū)中炙手可熱的名詞,幾乎所有的軟件廠商都在討論它,為他提供解決方案和產(chǎn)品支持,大部分的企業(yè)也已經(jīng)在企業(yè)內(nèi)部實施或者正在考慮實施 SOA。

    然而 SOA 在企業(yè)內(nèi)的實施卻不是一項簡單的任務(wù),即使拋開新建系統(tǒng)直接基于 SOA 架構(gòu)實施的因素,要把企業(yè)已有系統(tǒng)納入 SOA 框架也不是一件容易的事情。企業(yè)必須在對當(dāng)前架構(gòu)深入了解的基礎(chǔ)上,對已有系統(tǒng)進行大規(guī)模的改造才能滿足新的要求。如何經(jīng)濟的從原有技術(shù)架構(gòu)切換到 SOA 架構(gòu)成為很多企業(yè)的難題。





    回頁首


    XFire 概述

    XFire 是 codeHaus 組織提供的一個開源框架,它構(gòu)建了 POJO 和 SOA 之間的橋梁,主要特性就是支持將 POJO 通過非常簡單的方式發(fā)布成 Web 服務(wù),這種處理方式不僅充分發(fā)揮了 POJO 的作用,簡化了 Java 應(yīng)用轉(zhuǎn)化為 Web 服務(wù)的步驟和過程,也直接降低了 SOA 的實現(xiàn)難度,為企業(yè)轉(zhuǎn)向 SOA 架構(gòu)提供了一種簡單可行的方式。

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

    • 支持將 Web 服務(wù)綁定到 POJO、XMLBeans、JAXB1.1、JAXB2.0 和 Castor;
    • 支持基于 HTTP、JMS、XMPP 等多種協(xié)議訪問 Web 服務(wù);
    • 支持多種 Web 服務(wù)業(yè)界重要標準如 SOAP、WSDL、Web 服務(wù)尋址(WS-Addressing)、Web 服務(wù)安全(WS-Security)等;
    • 支持 JSR181,可以通過 JDK5 配置 Web 服務(wù);
    • 高性能的 SOAP 實現(xiàn);
    • 服務(wù)器端、客戶端代碼輔助生成;
    • 對 Spring、Pico、Plexus 等項目的支持等。




    回頁首


    XFire 安裝包

    XFire 框架目前的最新版本是 1.2.6,可以訪問 xfire.codehaus.org 下載 XFire 框架的安裝包,下載時請選擇“全部二進制發(fā)布包(Binary Distribution in zip package)”,而不僅僅是“XFire jar 文件(Jar of all XFire modules)”。

    下載完成后,我們可以將下載的 .zip 文件解壓縮到任意的文件夾中(后面的章節(jié)中使用 % XFIRE_HOME % 表示 XFire 框架的安裝目錄),解壓縮后形成的文件目錄結(jié)構(gòu)如下:

    • api(目錄)

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

    • examples(目錄)

      examples 目錄中包含了所有隨 XFire 二進制包發(fā)布的實例,包括這些實例的源代碼和相關(guān) Web 應(yīng)用配置內(nèi)容。

    • lib(目錄)

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

    • manual(目錄)

      manual 目錄中包含有 XFire 框架的幫助文檔,開發(fā)者可以從這些幫助文檔中學(xué)習(xí)更多運用 XFire 框架實現(xiàn) SOA 的知識和技巧。

    • modules(目錄)

      modules 目錄中包含了 XFire 框架根據(jù)不同特性分別編譯的二進制包文件。發(fā)布基于 XFire 框架的 Web 項目時,可以選擇使用該目錄下的所有 .jar 文件,也可以選擇 XFire-all-1.2.6.jar 文件。

    • XFire-all-1.2.6.jar

      XFire 框架的二進制包文件,包含了全部的模塊(modules)。

    • LICENSE.txt

      LICENSE.txt 文件中包含了 XFire 框架的授權(quán)協(xié)議。

    • NOTICE.txt
    • README.txt

      這兩個文件中包含了 XFire 發(fā)布時的一些有用的信息。





    回頁首


    XFire 框架支撐環(huán)境

    XFire框架是一種基于Servlet技術(shù)的SOA應(yīng)用開發(fā)框架,要正常運行基于XFire應(yīng)用框架開發(fā)的企業(yè)應(yīng)用,除了XFire框架本身之外,還需要JDK和Servlet容器的支持。

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

    XFire 支持非常多的特性,其中不同的特性對 JDK 版本的要求有所不同,比如如果項目中選擇基于 JSR181 標準發(fā)布 Web 服務(wù),我們就需要選擇 JDK5 或者以上版本,如果僅僅選擇將 Web 服務(wù)綁定到最簡單的 POJO,我們只需要選擇 JDK1.4 版本即可。

    JDK 各版本均可以在 java.sun.com 網(wǎng)站上下載,如何安裝 JDK 請參考 SUN 公司的相關(guān)技術(shù)文檔和 JDK 的幫助文檔。

    2.Servlet 容器下載和安裝

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

    TOMCAT 各版本均可以在 tomcat.apache.org 網(wǎng)站上下載,如何正確安裝 TOMCAT 服務(wù)器請參考 TOMCAT 服務(wù)器的幫助文檔。

    3.xalan

    XFire 需要 xalan 項目的支持,然而 1.2.6 版本中并沒有帶有相應(yīng)的 jar 文件,因此請訪問 xml.apache.org,下載 xalan 項目的二進制包。





    回頁首


    XFire 應(yīng)用配置

    前面的章節(jié)中我們下載和安裝了 XFire 安裝包和所需要的支持環(huán)境,現(xiàn)在我們開始學(xué)習(xí)如何從零開始創(chuàng)建 XFire 應(yīng)用開發(fā)環(huán)境。下面的所有配置過程和發(fā)布步驟均針對 TOMCAT(版本5.0.30)服務(wù)器,如果選擇其它的 Servlet 容器,下面的配置過程和步驟可能需要做出調(diào)整,請讀者根據(jù)實際 Servlet 容器的幫助文檔進行相應(yīng)調(diào)整。

    1、創(chuàng)建 Web 應(yīng)用目錄和基本元素

    1. 在 %TOMCAT_HOME%/webapps 目錄下創(chuàng)建新的 Web 應(yīng)用目錄 “XFire”

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

    2. 在 ”XFire”目錄下創(chuàng)建 ”WEB-INF”目錄、
    3. 在 ” WEB-INF”目錄下創(chuàng)建 ”lib”目錄和 ”classes”目錄
    4. 在 ” WEB-INF”目錄下創(chuàng)建 Web 應(yīng)用描述文件 ”web.xml”, ”web.xml”文件的內(nèi)容見 清單 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框架發(fā)布Web服務(wù)的例子
    10、 </description>
    11、
    12、 </web-app>

    2、拷貝 XFire 所需的支持類包文件

    拷貝 %XFIRE_HOME%/lib 目錄下所有文件到 “1、創(chuàng)建 Web 應(yīng)用目錄和基本元素” 中所創(chuàng)建的 ”lib”目錄下,將 %XFIRE_HOME%/XFire-all-1.2.6.jar 文件也拷貝到 “1、創(chuàng)建 Web 應(yīng)用目錄和基本元素” 中所創(chuàng)建的 ”lib”目錄下。將 xalan 安裝包中的所有 jar 文件和所需要的支持 jar 文件拷貝到相同的 ”lib”目錄下。

    [注] 為了減少拷貝的 jar 文件的數(shù)目,開發(fā)者可以根據(jù)項目的需要選擇需要拷貝的 jar 文件,而不是全部拷貝,如何根據(jù)需要選擇拷貝合適的類包文件請訪問 XFire 站點

    3、配置 XFire 框架運行所需的 Servlet

    修改 web.xml 文件,在其中增加如下 Servlet 定義內(nèi)容。

    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、創(chuàng)建 XFire 框架的服務(wù)發(fā)布文件 services.xml

    1. “1、創(chuàng)建 Web 應(yīng)用目錄和基本元素” 中創(chuàng)建的 classes 目錄下新建目錄 ”META-INF\xfire”;
    2. 在步驟 a) 中新建的 ”xfire”文件目錄下創(chuàng)建新文件 services.xml,文件的默認內(nèi)容如 清單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 發(fā)布成 Web 服務(wù)

    XFire 框架中,我們有兩種方式將 POJO 發(fā)布成 Web 服務(wù):

    • 一種方式是直接使用 Web 服務(wù)接口和 Web 服務(wù)實現(xiàn)類(POJO)來發(fā)布;
    • 另一種方式是基于 JSR181 標準和注釋技術(shù)將被注釋的 POJO 發(fā)布成 Web 服務(wù);

    下面的章節(jié)中我們將學(xué)習(xí)使用第一種方式來完成 POJO 的 Web 服務(wù)發(fā)布。我們將使用經(jīng)典的 ”Hello World!”例子來演示將 POJO 發(fā)布成 Web 服務(wù)所需要的步驟,不過我們不再是簡單的訪問一個 Java 方法來輸出 ”Hello World!”字符串,而是轉(zhuǎn)為在 SOA 環(huán)境下實現(xiàn):Web 服務(wù)客戶端通過訪問服務(wù)器端發(fā)布成 Web 服務(wù)的 POJO 獲得返回的 ”Hello World!”字符串后輸出到客戶端的控制臺上。

    將 POJO 發(fā)布成 Web 服務(wù)的基本步驟如下:

    1. 創(chuàng)建 Web 服務(wù)接口,聲明該 Web 服務(wù)對外暴露的接口;
    2. 創(chuàng)建 Web 服務(wù)實現(xiàn)類,為 Web 服務(wù)接口提供實現(xiàn);
    3. 修改 XFire 框架的服務(wù)發(fā)布文件 ---- services.xml,將 POJO 發(fā)布成 Web 服務(wù)。

    下面我們通過創(chuàng)建 ”Hello World!”例子來具體說明如何實現(xiàn)這三個步驟。

    1.創(chuàng)建 Web 服務(wù)接口 ---- HelloWorldService

    要將 POJO 發(fā)布成 Web 服務(wù),首先需要創(chuàng)建 Web 服務(wù)接口,在接口中聲明該 Web 服務(wù)需要對外暴露的接口。

    我們根據(jù)需要創(chuàng)建 Web 服務(wù)接口 ” HelloWorldService”,在其中聲明一個 ”sayHello”方法,該方法返回 ”String ”類型的內(nèi)容。” HelloWorldService”接口對應(yīng)的 Java 文件代碼如 清單 1-3


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

    2.創(chuàng)建 Web 服務(wù)實現(xiàn)類 ”HelloWorldServiceImpl”

    創(chuàng)建 Web 服務(wù)實現(xiàn)類 ”HelloWorldServiceImpl”,它繼承 ”1、創(chuàng)建Web服務(wù)接口 ---- HelloWorldService” 中創(chuàng)建的 HelloWorldService 接口,并且為它聲明的 ”sayHello”方法提供具體實現(xiàn): 返回字符串”Hello World!”。 ”HelloWorldServiceImpl”類對應(yīng)的 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 服務(wù)接口中聲明的所有 Java 方法提供具體實現(xiàn)
    5. * HelloWorldServiceImpl 作為 Web 服務(wù)的實現(xiàn)類
    6. */
    7.public class HelloWorldServiceImpl implements HelloWorldService {
    8.
    9. /*
    10. * sayHello 方法為 HelloWorldService 服務(wù)接口定義的 sayHello 方法提供具體實現(xiàn)
    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 發(fā)布成 Web 服務(wù)

    我們可以在 WEB-INF\classes\META-INF\XFire\services.xml 文件中的 <beans …> 和 </beans> 元素中間加入如下的 xml 內(nèi)容將上面創(chuàng)建的 HelloWorldService 發(fā)布成 Web 服務(wù)。

    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 內(nèi)容為發(fā)布成 Web 服務(wù)的 POJO 提供完整的描述。

    • name

      Web 服務(wù)被發(fā)布時所采用的唯一名稱。

    • namespace

      Web 服務(wù)發(fā)布時所使用的命名空間。

    • serviceClass

      Web 服務(wù)接口類的全名,包括包名和類名。

    • implemetationClass

      Web 服務(wù)實現(xiàn)類的全名,包括包名和類名。

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

    通過上面的三個步驟,我們已經(jīng)將新創(chuàng)建的HelloWorldService發(fā)布成了Web服務(wù),我們可以使用下面的步驟測試一下創(chuàng)建的Web服務(wù)是否能夠正常運行:

    1. 編譯上面的步驟中創(chuàng)建的 Java 接口和類;
    2. 啟動 TOMCAT 服務(wù)器。
    3. 等 TOMCAT 服務(wù)器完全啟動后,打開瀏覽器,在地址欄中輸入 http://localhost:8080/XFire/services/HelloWorldService?wsdl。

    其中 HelloWorldServcie 是配置文件中 service\name 元素所定義的內(nèi)容,”wsdl”參數(shù)表示查看該 Web 服務(wù)的 WSDL(Web服務(wù)描述語言)文件。

    如果瀏覽器中出現(xiàn)如下圖所示類似的內(nèi)容,表示 Web 服務(wù)發(fā)布成功,我們可以編寫客戶端訪問該 Web 服務(wù)從服務(wù)器獲取返回字符串,本文下載資源中提供的下載文件中包含有可供參考的客戶端類 org.vivianj.xfire.pojo.client.HelloWorldServiceClient。


    圖:瀏覽器中訪問效果

    如果瀏覽器中出現(xiàn)錯誤提示,請按照上面的步驟和說明檢查已經(jīng)完成的開發(fā)、配置過程是否完全正確。





    回頁首


    結(jié)束語

    本文中作者首先講解了 XFire 框架的主要特性,XFire 框架的運行環(huán)境以及基于 XFire 框架開發(fā) SOA 應(yīng)用的基本步驟,并且借助于 SOA 環(huán)境下的 ”Hello World!”例子,詳細的講解和演示了如何基于 XFire 框架、經(jīng)過簡單的開發(fā)、配置步驟就將一個 POJO 類中包含的方法發(fā)布成Web服務(wù)。從 ”Hello World!”例子實現(xiàn)的過程中,我們可以發(fā)現(xiàn) XFire 框架最大化的發(fā)揮了 POJO 的作用,減少了 SOA 實施時對框架本身的依賴,降低了 SOA 實施的難度,企業(yè)實施 SOA 時并不需要增加太多的投入就可以實現(xiàn)目標。






    回頁首


    下載

    名字 大小 下載方法
    xfire.war 6 KB HTTP
    關(guān)于下載方法的信息


    參考資料

    學(xué)習(xí)

    獲得產(chǎn)品和技術(shù)
    主站蜘蛛池模板: 成人一a毛片免费视频| 久久夜色精品国产亚洲av| 人人狠狠综合久久亚洲| 国产成人精品曰本亚洲79ren| 搡女人免费免费视频观看| 久久精品国产亚洲av日韩| 国产中文字幕免费| 日本在线免费观看| 亚洲一区二区观看播放| 国产亚洲精品激情都市| 亚洲精品动漫免费二区| 久久国产精品免费| 亚洲国产系列一区二区三区| 日韩精品亚洲aⅴ在线影院| 99爱在线精品免费观看| 久久久精品视频免费观看| 亚洲免费闲人蜜桃| 亚洲午夜久久久久妓女影院| 免费看大黄高清网站视频在线| 在线观看免费视频网站色| 亚洲精品无码专区在线| 亚洲另类激情综合偷自拍| 免费乱理伦在线播放| 91频在线观看免费大全| 国产精品无码永久免费888| 亚洲国产成人精品激情| 亚洲成av人影院| 亚洲成A人片77777国产| 亚洲AV无码久久寂寞少妇| 国产免费女女脚奴视频网| 久久精品成人免费观看97| 亚洲av永久中文无码精品| 亚洲天堂男人天堂| 亚洲乱亚洲乱妇无码麻豆| 免费观看国产小粉嫩喷水| 无码国产精品一区二区免费式直播 | 国产亚洲精品影视在线产品 | 亚洲人色婷婷成人网站在线观看| 在线观看成人免费视频| 91香蕉在线观看免费高清| 中文字幕免费播放|