




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、使用 XFire 開發(fā) webservice 服務(wù)和客戶端全攻略收藏XFire 是與 Axis2 并列的新一代 WebService 框架,通過提供簡單的 API 支持 WebService 各項標準協(xié)議,幫助你方便快速地開發(fā) WebService 應(yīng)用。相對于 Axis 來說,目前 XFire 相對受歡迎,加上其提供了和 Spring 集成的支持,在目前的 WebService開源社區(qū)擁有眾多的追隨者。并且因為 XFire 為 Spring 提供的支持,使得我們可以很容易在 Spring 中使用 XFire 構(gòu)建 WebService 應(yīng)用。XFire 與 Axis2 相比具有如下特征:l
2、支持一系列 WebService 的新標準-JSR181、WSDL2.0、JAXB2、WS-Security等;l 使用 Stax 解釋 XML,性能有了質(zhì)的提高。XFire 采用 Woodstox 作 Stax 實現(xiàn);l 容易上手,可以方便快速地從 pojo 發(fā)布服務(wù);l 支持 SpringPico、Plexus、Loom 等容器;l 靈活的 Binding 機制,包括默認的 Aegis,xmlbeans,jaxb2,castor;l 高性能的 SOAP 棧設(shè)計;l 支持 SpringPico、Plexus、Loom 等容器。XFire 與 Axis1 性能的比較如下:lXFire 比 Ax
3、is1.3 快 2-6 倍;lXFire 的響應(yīng)時間是 Axis1.3 的 1/2 至 U1/5。XFire 在 WebService 框架中開始較晚,它從現(xiàn)有的框架中借鑒了許多優(yōu)秀的理念,力爭將WebService 的應(yīng)用開發(fā)難度降到最低。此外,還提供了各種綁定技術(shù)、支持多種傳輸協(xié)議,對WebService 體系中許多新的規(guī)范提供了支持。下面讓我們來看一個 XFire 于 Spring 集成的 helloWorld 的簡單例子。一.實現(xiàn)的功能和特點本例具有如下功能和特點:1)基于 J2EE 平臺的 WebService 服務(wù);2)開發(fā)方便,配置簡單;3)與 spring 無縫集成。XFire
4、 是完全基于流數(shù)據(jù)處理進行工作的系統(tǒng),這意味著 XFire 不是將整個 SOAP 文檔緩存在內(nèi)存中,而是以管道的方式接收 SOAP 流數(shù)據(jù)。這種工作方式的轉(zhuǎn)變帶來了可觀的性能回報,同時節(jié)省了內(nèi)存的占用。XFire 從管道中接收一個 SOAP 請求到返回一個 SOAP 響應(yīng),會經(jīng)歷一系列的階段。在管道調(diào)用的任何一個階段,XFire 都可以添加一些額外的 Handler,在對消息進行加工處理后再傳入到下一個階段中。在 SOAP 請求消息對 WebService 發(fā)起真正調(diào)用之前,分別會經(jīng)過傳輸、預(yù)轉(zhuǎn)發(fā)、轉(zhuǎn)發(fā)、策略實施、用戶信息處理、預(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。選擇該工程后,點擊右鍵選擇MyEclipse-AddWebServiceCapabilities,彈出 AddWebServiceCapabilities 對話框,點擊Next,彈出 ProjectLibraryConfiguration對話框, 默認選擇 CoreLibraries,點擊“Finish”按鈕, 完成 XFire核心包的添加。為了后續(xù)的客戶端的測試,還需讀者加
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為了后續(xù)的
8、開發(fā)和測試,在 src 目錄下分別建立 test 和 webservice 目錄,分別用于存放測試文件和webservice 的相關(guān)類。2 .WebService 實現(xiàn)的編寫在本例中,我們只是做一個 helloWorld 的簡單例子。WebService 服務(wù)端提供一個根據(jù)輸入的名字信息回復(fù)相應(yīng)的 helloWorld 信息的。例如,當名字為“阿蜜果”時,恢復(fù)信息為“hello,阿蜜果。下面讓我們一步一步來開始進行編碼。1)web.xml 的配置一般情況下,我們通過 HTTP 作為 WebService 的傳輸協(xié)議,這樣我們只需啟動一個 Web 服務(wù)器(如Tomcat,在本例中使用的是 Tom
9、cat5.5.20) ,這樣客戶端就可以通過 HTTP 訪問到 WebService 服務(wù)。 為了集成 Spring 容器,XFire 專門提供一個 XFireSpringServlet,我們可以在 web.xml 中配置該 Servlet,將Spring 容器中定義的 WebService 在某個 URI 下發(fā)布。為了能正確使用 XFire,需在 web.xml 中進行相應(yīng)配置,在該文件中配置 XFire 的 servlet 和servlet-mapping。同時因為本實例需要將 XFire 集成到 Spring 中,因而需要在 web.xml 文件中加載Spring 的相應(yīng)配置文件。在本實
10、例中,我們首先在 WEB-INF 下建立兩個配置Spring 配置文件,一個為 applicationContext.xml,該文件用來定義本工程的 bean,一個為 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 和對應(yīng)實現(xiàn)類 HelloWorldImpl.java為了用 WebService 完成 HelloWorld 功能,我們首先在 src/webservice 目錄下
12、建立接口類HelloWold.java。它僅包含一個 sayHelloWorld(Stringname)的方法,其詳細內(nèi)容如下:packagewebservice;/*/*HelloWorld 的接口類.*/publicinterfaceHelloWorld/*/*對名字為 name 的人打招呼.paramname 名字return 返回打招呼的字符串*/StringsayHelloWorld(Stringname);我 們 還 需 要 建 立 一 個 對 應(yīng) 的 實 現(xiàn) 類 , 來 實 現(xiàn)HelloWorldImpl.java。該 類 的 詳 細 內(nèi) 容 如下:packagewebservi
13、ce;/*/*HelloWorld 的實現(xiàn)類.*/publicclassHelloWorldImplimplementsHelloWorldpublicStringsayHelloWorld(Stringname)StringhelloWorld=hello,+name;returnhelloWorld;3)Spring 配置文件 applicationContext.xml 和 xfire-servlet.xml 的配置首先我們在 applicationContext.xml 文件中配置對應(yīng)的 beanHelloWorldBean,該xml 文件的內(nèi)容如下:sayHelloWorld 的功能
14、,該實現(xiàn)類即為這個配置文件很簡單,在此不詳述。XFire 為 Spring 提供了方便易用的導(dǎo)出器 XFireExporter,借助該導(dǎo)出器的支持,我們可以在 Spring 容器中將一個 POJO 導(dǎo)出為 WebServiceoHelloWorld 是業(yè)務(wù)服務(wù)類,在此擁有一個sayHelloWorld 的方法,我們希望將此方法開放為 WebServiceo在實際應(yīng)用中,如果某個類具有眾多的方法,而其中的某些方法不需要開放為 WebService 的情況下,我們可以定義一個窄接口,該接口中只需定義那些開放為 WebService 的業(yè)務(wù)方法。將一個業(yè)務(wù)類所有需要開放為 WebService 的方
15、法通過一個窄接口來描述是值得推薦的作法,這讓 WebService 的接口顯得很“干凈”。其次,XFire 的導(dǎo)出器也需要服務(wù)接口的支持,因為它采用基于接口的動態(tài)代理技術(shù)。窄接口中的方法在真實的系統(tǒng)中可能需要引用其它的業(yè)務(wù)類或 DAO 獲取數(shù)據(jù)庫中的真實數(shù)據(jù),為了簡化實例,我們在此簡化了實例。下面讓我們看看在 xfire-servlet.xml 文件中導(dǎo)出器的設(shè)置,該文件內(nèi)容如下:在上面的配置中,我們可以看到,在該配置文件中引入了 xfire.xml 這個 Spring 配置文件。它是在 XFire 核心 JAR 包中擁有一個預(yù)定義的 Spring 配置文件,它定義了 XFire 在 Spri
16、ng中必須用到的一些 Bean 和資源,需要引入這個預(yù)定義的配置文件。從該配置文件中可以看出,我們通過 XFireExporter 將業(yè)務(wù)類導(dǎo)出為 WebService,對于任何導(dǎo)出器,我們都需要引入 XFire 環(huán)境, 即 serviceFactory 和 xfire,這是標準的配置。 ServiceFactory 是 XFire 的核心類, 它可以將一個 POJO生成為一個 WebServiceo在本實例中,我們通過定義一個 baseWebService,其余的 webService 配置都將該 bean 作為父 bean,這樣可以簡化 Spring 的配置,不需要多次引入 service
17、Factory 和 xfire。3.WebService 的測試在上一步操作完成之后,我們的這個簡單的 WebService 已經(jīng)編寫完畢,下面讓我們來看看自己的勞動成果吧。在瀏覽器中輸入地址:http:/localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl,我們可以看至UHelloWorldService對應(yīng)的WSDL信息, 閱讀這個WSDL文檔, 我們可以知道HelloWorld的 sayHelloWorld 方法已經(jīng)被成功地發(fā)布為 WebService 了。只要拿到這個 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、此時測試類 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;/對應(yīng)的 WSDL 文件Resourceresource=newClassPathResource(wsdl);Clientclient=newClient(resource.getInputStream(),null);/根據(jù) WSDL 創(chuàng)建客戶實例objArray0=阿蜜果;/調(diào)用特定的 WebService 方法ObjectobjArraynewObject1;Objectresults=client.invoke(sayHelloWorld,objArray);System.out.println(result:+results0);運行該類,可得到如下輸出結(jié)果:result:he
22、llo,阿蜜果可看出運行結(jié)果正確。2)根據(jù)服務(wù)地址創(chuàng)建客戶端調(diào)用程序接著讓我們來看一個根據(jù)服務(wù)地址創(chuàng)建客戶端調(diào)用程序的例子。我們可以通過測試類來測試 WebService 的正確性,下面讓我們來看一個簡單的測試類,首先我們在 src/test 目錄建立 WebServiceClientTest.java 文件,并在 src 目錄下建立客戶端調(diào)用的 Spring 配置文件client.xml。在 client.xml 配置文件中我們定義了一個 testWebService 的 bean,該 bean 訪問 wsdlDocumentUrl 為http:/localhost:8080/webserv
23、ice_helloworld/HelloWorldService.ws?wsdl 的 WSDL。 該 xml 文件的詳細內(nèi)容如下:webservice.HelloWorldhttp:/localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl在 WebServiceClientTest.java 文件中獲得 HelloWorld,并調(diào)用它的 sayHelloWorld 方法來完成測試,該類的詳細內(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等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 代寫課題申報書多少錢
- 成囊材料市場分析及競爭策略分析報告
- 企業(yè)生產(chǎn)線用工合同范本
- 中國傳統(tǒng)文化學(xué)習(xí)心得體會
- 廠家求購鋼材合同范本
- 臨床護理習(xí)題(附答案)
- 機械制造基礎(chǔ)模擬試題含答案
- 代理經(jīng)營承包協(xié)議合同范本
- 箱包維修合同范本
- 流體力學(xué)復(fù)習(xí)題(含答案)
- 廣東省廣州市2025屆高三下學(xué)期一??荚嚁?shù)學(xué)試題含解析
- 環(huán)衛(wèi)車輛操作及維護培訓(xùn)方案
- 醫(yī)療器械質(zhì)量負責(zé)人崗位職責(zé)
- 湘陰縣易聚餐飲有限公司部門備用金業(yè)務(wù)財務(wù)融合流程設(shè)計
- 第十七屆山東省職業(yè)院校技能大賽機器人系統(tǒng)集成應(yīng)用技術(shù)樣題1學(xué)生賽
- 血管通路的介入治療
- 臨床三基考試題庫(附答案)
- 2024年浙江省杭州市拱墅區(qū)中考語文一模試卷
- 蘇科版八年級物理上冊同步學(xué)與練第14課光的反射(原卷版+解析)
- 2024年上海市中考語文真題卷及答案解析
- 校園直飲水機供貨安裝及售后服務(wù)方案
評論
0/150
提交評論