XFire開發webservice服務和客戶端全攻略_第1頁
XFire開發webservice服務和客戶端全攻略_第2頁
XFire開發webservice服務和客戶端全攻略_第3頁
XFire開發webservice服務和客戶端全攻略_第4頁
XFire開發webservice服務和客戶端全攻略_第5頁
已閱讀5頁,還剩4頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、使用 XFire 開發 webservice 服務和客戶端全攻略收藏XFire 是與 Axis2 并列的新一代 WebService 框架,通過提供簡單的 API 支持 WebService 各項標準協議,幫助你方便快速地開發 WebService 應用。相對于 Axis 來說,目前 XFire 相對受歡迎,加上其提供了和 Spring 集成的支持,在目前的 WebService開源社區擁有眾多的追隨者。并且因為 XFire 為 Spring 提供的支持,使得我們可以很容易在 Spring 中使用 XFire 構建 WebService 應用。XFire 與 Axis2 相比具有如下特征:l

2、支持一系列 WebService 的新標準-JSR181、WSDL2.0、JAXB2、WS-Security等;l 使用 Stax 解釋 XML,性能有了質的提高。XFire 采用 Woodstox 作 Stax 實現;l 容易上手,可以方便快速地從 pojo 發布服務;l 支持 SpringPico、Plexus、Loom 等容器;l 靈活的 Binding 機制,包括默認的 Aegis,xmlbeans,jaxb2,castor;l 高性能的 SOAP 棧設計;l 支持 SpringPico、Plexus、Loom 等容器。XFire 與 Axis1 性能的比較如下:lXFire 比 Ax

3、is1.3 快 2-6 倍;lXFire 的響應時間是 Axis1.3 的 1/2 至 U1/5。XFire 在 WebService 框架中開始較晚,它從現有的框架中借鑒了許多優秀的理念,力爭將WebService 的應用開發難度降到最低。此外,還提供了各種綁定技術、支持多種傳輸協議,對WebService 體系中許多新的規范提供了支持。下面讓我們來看一個 XFire 于 Spring 集成的 helloWorld 的簡單例子。一.實現的功能和特點本例具有如下功能和特點:1)基于 J2EE 平臺的 WebService 服務;2)開發方便,配置簡單;3)與 spring 無縫集成。XFire

4、 是完全基于流數據處理進行工作的系統,這意味著 XFire 不是將整個 SOAP 文檔緩存在內存中,而是以管道的方式接收 SOAP 流數據。這種工作方式的轉變帶來了可觀的性能回報,同時節省了內存的占用。XFire 從管道中接收一個 SOAP 請求到返回一個 SOAP 響應,會經歷一系列的階段。在管道調用的任何一個階段,XFire 都可以添加一些額外的 Handler,在對消息進行加工處理后再傳入到下一個階段中。在 SOAP 請求消息對 WebService 發起真正調用之前,分別會經過傳輸、預轉發、轉發、策略實施、用戶信息處理、預調用、服務調用等階段。二.開發環境筆者的開發環境描述如下:1)j

5、dk:1.5 版本;2)Tomcat:5.5.20;3)MyEclipse:5.1.1GA。三.開發步驟1 .工程與環境的建立在 MyEclipse 中新建 Web 工程,名為 webservice_helloworld。選擇該工程后,點擊右鍵選擇MyEclipse-AddWebServiceCapabilities,彈出 AddWebServiceCapabilities 對話框,點擊Next,彈出 ProjectLibraryConfiguration對話框, 默認選擇 CoreLibraries,點擊“Finish”按鈕, 完成 XFire核心包的添加。為了后續的客戶端的測試,還需讀者加

6、入 commons-httpclient.jar 包到 WEB-INF/lib 下。部署后可看到此時 WEB-INF/lib 的 jar 包列表如下:activation-1.1.jar、commons-beanutils-1.7.0.jar、commons-codec-1.3.jar、commons-httpclient.jar、commons-logging-1.0.4.jar、jaxen-1.1-beta-9.jar、jaxws-api-2.0.jar、jdom-1.0.jar、jsr173_api-1.0.jar、mail-1.4.jar、saaj-api-1.3.jar、saaj-i

7、mpl-1.3.jar、spring-1.2.6.jar、stax-api-1.0.1.jarwsdl4j-1.5.2.jarwstx-asl-3.0.1.jarxbean-2.1.0.jarxbean-spring-2.5.jarxfire-aegis-1.2.2.jarxfire-annotations-1.2.2.jarxfire-core-1.2.2.jarxfire-java5-1.2.2.jarxfire-jaxws-1.2.2.jar、xfire-jsr181-api-1.0-M1.jar、xfire-spring-1.2.2.jar、XmlSchema-1.1.jar為了后續的

8、開發和測試,在 src 目錄下分別建立 test 和 webservice 目錄,分別用于存放測試文件和webservice 的相關類。2 .WebService 實現的編寫在本例中,我們只是做一個 helloWorld 的簡單例子。WebService 服務端提供一個根據輸入的名字信息回復相應的 helloWorld 信息的。例如,當名字為“阿蜜果”時,恢復信息為“hello,阿蜜果。下面讓我們一步一步來開始進行編碼。1)web.xml 的配置一般情況下,我們通過 HTTP 作為 WebService 的傳輸協議,這樣我們只需啟動一個 Web 服務器(如Tomcat,在本例中使用的是 Tom

9、cat5.5.20) ,這樣客戶端就可以通過 HTTP 訪問到 WebService 服務。 為了集成 Spring 容器,XFire 專門提供一個 XFireSpringServlet,我們可以在 web.xml 中配置該 Servlet,將Spring 容器中定義的 WebService 在某個 URI 下發布。為了能正確使用 XFire,需在 web.xml 中進行相應配置,在該文件中配置 XFire 的 servlet 和servlet-mapping。同時因為本實例需要將 XFire 集成到 Spring 中,因而需要在 web.xml 文件中加載Spring 的相應配置文件。在本實

10、例中,我們首先在 WEB-INF 下建立兩個配置Spring 配置文件,一個為 applicationContext.xml,該文件用來定義本工程的 bean,一個為 xfire-servlet.xml,用來配置 XFire 的相關 bean。修改后的 web.xml 的內容如下所示:XFireServicecontextConfigLocation/WEB-INF/applicationContext.xml,/WEB-INF/xfire-servlet.xmlorg.springframework.web.context.ContextLoaderListenerorg.springfra

11、mework.web.util.IntrospectorCleanupListenerxfireorg.springframework.web.servlet.DispatcherServletxfire*.wsxfireServletorg.codehaus.xfire.spring.XFireSpringServletxfireServlet/service/*2)WebService 的接口類 HelloWorld.java 和對應實現類 HelloWorldImpl.java為了用 WebService 完成 HelloWorld 功能,我們首先在 src/webservice 目錄下

12、建立接口類HelloWold.java。它僅包含一個 sayHelloWorld(Stringname)的方法,其詳細內容如下:packagewebservice;/*/*HelloWorld 的接口類.*/publicinterfaceHelloWorld/*/*對名字為 name 的人打招呼.paramname 名字return 返回打招呼的字符串*/StringsayHelloWorld(Stringname);我 們 還 需 要 建 立 一 個 對 應 的 實 現 類 , 來 實 現HelloWorldImpl.java。該 類 的 詳 細 內 容 如下:packagewebservi

13、ce;/*/*HelloWorld 的實現類.*/publicclassHelloWorldImplimplementsHelloWorldpublicStringsayHelloWorld(Stringname)StringhelloWorld=hello,+name;returnhelloWorld;3)Spring 配置文件 applicationContext.xml 和 xfire-servlet.xml 的配置首先我們在 applicationContext.xml 文件中配置對應的 beanHelloWorldBean,該xml 文件的內容如下:sayHelloWorld 的功能

14、,該實現類即為這個配置文件很簡單,在此不詳述。XFire 為 Spring 提供了方便易用的導出器 XFireExporter,借助該導出器的支持,我們可以在 Spring 容器中將一個 POJO 導出為 WebServiceoHelloWorld 是業務服務類,在此擁有一個sayHelloWorld 的方法,我們希望將此方法開放為 WebServiceo在實際應用中,如果某個類具有眾多的方法,而其中的某些方法不需要開放為 WebService 的情況下,我們可以定義一個窄接口,該接口中只需定義那些開放為 WebService 的業務方法。將一個業務類所有需要開放為 WebService 的方

15、法通過一個窄接口來描述是值得推薦的作法,這讓 WebService 的接口顯得很“干凈”。其次,XFire 的導出器也需要服務接口的支持,因為它采用基于接口的動態代理技術。窄接口中的方法在真實的系統中可能需要引用其它的業務類或 DAO 獲取數據庫中的真實數據,為了簡化實例,我們在此簡化了實例。下面讓我們看看在 xfire-servlet.xml 文件中導出器的設置,該文件內容如下:在上面的配置中,我們可以看到,在該配置文件中引入了 xfire.xml 這個 Spring 配置文件。它是在 XFire 核心 JAR 包中擁有一個預定義的 Spring 配置文件,它定義了 XFire 在 Spri

16、ng中必須用到的一些 Bean 和資源,需要引入這個預定義的配置文件。從該配置文件中可以看出,我們通過 XFireExporter 將業務類導出為 WebService,對于任何導出器,我們都需要引入 XFire 環境, 即 serviceFactory 和 xfire,這是標準的配置。 ServiceFactory 是 XFire 的核心類, 它可以將一個 POJO生成為一個 WebServiceo在本實例中,我們通過定義一個 baseWebService,其余的 webService 配置都將該 bean 作為父 bean,這樣可以簡化 Spring 的配置,不需要多次引入 service

17、Factory 和 xfire。3.WebService 的測試在上一步操作完成之后,我們的這個簡單的 WebService 已經編寫完畢,下面讓我們來看看自己的勞動成果吧。在瀏覽器中輸入地址:http:/localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl,我們可以看至UHelloWorldService對應的WSDL信息, 閱讀這個WSDL文檔, 我們可以知道HelloWorld的 sayHelloWorld 方法已經被成功地發布為 WebService 了。只要拿到這個 WSDL 就可以開發相應的客戶端調用程序了。X

18、Fire 為訪問服務端 WebService 提供了各種方便的方式:我們一般根據服務地址和窄接口類創建客戶調用程序。在不能獲得服務窄接口類的情況下,XFire 允許我們通過 WSDL 文件生成客戶端調用程序,通過指定服務接口的方式調用服務。1)通過 WSDL 文件生成客戶端調用程序首先我們通過 http:/localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl 我們可以獲得WSDL 文件 HelloWorldService.wsdl,并將其放在 src 目錄下面, 接著我們通過程序訪問該 WSDL 文件,并調用需測試的方法。

19、此時測試類 WebServiceClientTest.java 的內容如下所示:packagetest;importorg.codehaus.xfire.client.Client;importorg.springframework.core.io.ClassPathResource;importorg.springframework.core.io.Resource;importwebservice.HelloWorld;/*/*Copyright2007GuangZhouAmigo.*Allrightreserved.*HelloWorld 的 webservice 的測試類.*autho

20、rAmigoXie*version1.0*Creationdate:2007-9-16-下午 05:36:05*/publicclassWebServiceClientTestHelloWorldhelloWorld=null;publicstaticvoidmain(Stringargs)throwsExceptionWebServiceClientTesttest=newWebServiceClientTest();test.testClient();)publicvoidtestClient()throwsExceptionStringwsdl=HelloWorldService.wsd

21、l;/對應的 WSDL 文件Resourceresource=newClassPathResource(wsdl);Clientclient=newClient(resource.getInputStream(),null);/根據 WSDL 創建客戶實例objArray0=阿蜜果;/調用特定的 WebService 方法ObjectobjArraynewObject1;Objectresults=client.invoke(sayHelloWorld,objArray);System.out.println(result:+results0);運行該類,可得到如下輸出結果:result:he

22、llo,阿蜜果可看出運行結果正確。2)根據服務地址創建客戶端調用程序接著讓我們來看一個根據服務地址創建客戶端調用程序的例子。我們可以通過測試類來測試 WebService 的正確性,下面讓我們來看一個簡單的測試類,首先我們在 src/test 目錄建立 WebServiceClientTest.java 文件,并在 src 目錄下建立客戶端調用的 Spring 配置文件client.xml。在 client.xml 配置文件中我們定義了一個 testWebService 的 bean,該 bean 訪問 wsdlDocumentUrl 為http:/localhost:8080/webserv

23、ice_helloworld/HelloWorldService.ws?wsdl 的 WSDL。 該 xml 文件的詳細內容如下:webservice.HelloWorldhttp:/localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl在 WebServiceClientTest.java 文件中獲得 HelloWorld,并調用它的 sayHelloWorld 方法來完成測試,該類的詳細內容如下所示:packagetest;importorg.springframework.context.ApplicationCont

24、ext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importwebservice.HelloWorld;/*/*HelloWorld 的 webservice 的測試類.*/publicclassWebServiceClientTestHelloWorldhelloWorld=null;publicstaticvoidmain(Stringargs)WebServiceClientTesttest=newWebServiceClientTest();test.testClient();publicvoidtestClient()ApplicationContextctx=newClassPathXmlApplicationContext(clie

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論