XFire開發(fā)webservice服務(wù)和客戶端全攻略_第1頁
XFire開發(fā)webservice服務(wù)和客戶端全攻略_第2頁
XFire開發(fā)webservice服務(wù)和客戶端全攻略_第3頁
XFire開發(fā)webservice服務(wù)和客戶端全攻略_第4頁
XFire開發(fā)webservice服務(wù)和客戶端全攻略_第5頁
已閱讀5頁,還剩4頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

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

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

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

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

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

6、入 commons-httpclient.jar 包到 WEB-INF/lib 下。部署后可看到此時(shí) 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為了后續(xù)的

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

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

10、例中,我們首先在 WEB-INF 下建立兩個(gè)配置Spring 配置文件,一個(gè)為 applicationContext.xml,該文件用來定義本工程的 bean,一個(gè)為 xfire-servlet.xml,用來配置 XFire 的相關(guān) bean。修改后的 web.xml 的內(nèi)容如下所示: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 和對(duì)應(yīng)實(shí)現(xiàn)類 HelloWorldImpl.java為了用 WebService 完成 HelloWorld 功能,我們首先在 src/webservice 目錄下

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

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

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

15、法通過一個(gè)窄接口來描述是值得推薦的作法,這讓 WebService 的接口顯得很“干凈”。其次,XFire 的導(dǎo)出器也需要服務(wù)接口的支持,因?yàn)樗捎没诮涌诘膭?dòng)態(tài)代理技術(shù)。窄接口中的方法在真實(shí)的系統(tǒng)中可能需要引用其它的業(yè)務(wù)類或 DAO 獲取數(shù)據(jù)庫中的真實(shí)數(shù)據(jù),為了簡化實(shí)例,我們在此簡化了實(shí)例。下面讓我們看看在 xfire-servlet.xml 文件中導(dǎo)出器的設(shè)置,該文件內(nèi)容如下:在上面的配置中,我們可以看到,在該配置文件中引入了 xfire.xml 這個(gè) Spring 配置文件。它是在 XFire 核心 JAR 包中擁有一個(gè)預(yù)定義的 Spring 配置文件,它定義了 XFire 在 Spri

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

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

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

19、此時(shí)測試類 WebServiceClientTest.java 的內(nèi)容如下所示: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;/對(duì)應(yīng)的 WSDL 文件Resourceresource=newClassPathResource(wsdl);Clientclient=newClient(resource.getInputStream(),null);/根據(jù) WSDL 創(chuàng)建客戶實(shí)例objArray0=阿蜜果;/調(diào)用特定的 WebService 方法ObjectobjArraynewObject1;Objectresults=client.invoke(sayHelloWorld,objArray);System.out.println(result:+results0);運(yùn)行該類,可得到如下輸出結(jié)果:result:he

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

23、ice_helloworld/HelloWorldService.ws?wsdl 的 WSDL。 該 xml 文件的詳細(xì)內(nèi)容如下:webservice.HelloWorldhttp:/localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl在 WebServiceClientTest.java 文件中獲得 HelloWorld,并調(diào)用它的 sayHelloWorld 方法來完成測試,該類的詳細(xì)內(nèi)容如下所示: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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論