




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、使用 XFire 開(kāi)發(fā) webservice 服務(wù)和客戶(hù)端全攻略收藏XFire 是與 Axis2 并列的新一代 WebService 框架,通過(guò)提供簡(jiǎn)單的 API 支持 WebService 各項(xiàng)標(biāo)準(zhǔn)協(xié)議,幫助你方便快速地開(kāi)發(fā) WebService 應(yīng)用。相對(duì)于 Axis 來(lái)說(shuō),目前 XFire 相對(duì)受歡迎,加上其提供了和 Spring 集成的支持,在目前的 WebService開(kāi)源社區(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 框架中開(kāi)始較晚,它從現(xiàn)有的框架中借鑒了許多優(yōu)秀的理念,力爭(zhēng)將WebService 的應(yīng)用開(kāi)發(fā)難度降到最低。此外,還提供了各種綁定技術(shù)、支持多種傳輸協(xié)議,對(duì)WebService 體系中許多新的規(guī)范提供了支持。下面讓我們來(lái)看一個(gè) XFire 于 Spring 集成的 helloWorld 的簡(jiǎn)單例子。一.實(shí)現(xiàn)的功能和特點(diǎn)本例具有如下功能和特點(diǎn):1)基于 J2EE 平臺(tái)的 WebService 服務(wù);2)開(kāi)發(fā)方便,配置簡(jiǎn)單;3)與 spring 無(wú)縫集成。XFire
4、 是完全基于流數(shù)據(jù)處理進(jìn)行工作的系統(tǒng),這意味著 XFire 不是將整個(gè) SOAP 文檔緩存在內(nèi)存中,而是以管道的方式接收 SOAP 流數(shù)據(jù)。這種工作方式的轉(zhuǎn)變帶來(lái)了可觀的性能回報(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)過(guò)傳輸、預(yù)轉(zhuǎn)發(fā)、轉(zhuǎn)發(fā)、策略實(shí)施、用戶(hù)信息處理、預(yù)調(diào)用、服務(wù)調(diào)用等階段。二.開(kāi)發(fā)環(huán)境筆者的開(kāi)發(fā)環(huán)境描述如下:1)j
5、dk:1.5 版本;2)Tomcat:5.5.20;3)MyEclipse:5.1.1GA。三.開(kāi)發(fā)步驟1 .工程與環(huán)境的建立在 MyEclipse 中新建 Web 工程,名為 webservice_helloworld。選擇該工程后,點(diǎn)擊右鍵選擇MyEclipse-AddWebServiceCapabilities,彈出 AddWebServiceCapabilities 對(duì)話(huà)框,點(diǎn)擊Next,彈出 ProjectLibraryConfiguration對(duì)話(huà)框, 默認(rèn)選擇 CoreLibraries,點(diǎn)擊“Finish”按鈕, 完成 XFire核心包的添加。為了后續(xù)的客戶(hù)端的測(cè)試,還需讀者加
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、開(kāi)發(fā)和測(cè)試,在 src 目錄下分別建立 test 和 webservice 目錄,分別用于存放測(cè)試文件和webservice 的相關(guān)類(lèi)。2 .WebService 實(shí)現(xiàn)的編寫(xiě)在本例中,我們只是做一個(gè) helloWorld 的簡(jiǎn)單例子。WebService 服務(wù)端提供一個(gè)根據(jù)輸入的名字信息回復(fù)相應(yīng)的 helloWorld 信息的。例如,當(dāng)名字為“阿蜜果”時(shí),恢復(fù)信息為“hello,阿蜜果。下面讓我們一步一步來(lái)開(kāi)始進(jìn)行編碼。1)web.xml 的配置一般情況下,我們通過(guò) HTTP 作為 WebService 的傳輸協(xié)議,這樣我們只需啟動(dòng)一個(gè) Web 服務(wù)器(如Tomcat,在本例中使用的是 Tom
9、cat5.5.20) ,這樣客戶(hù)端就可以通過(guò) HTTP 訪(fǎng)問(wèn)到 WebService 服務(wù)。 為了集成 Spring 容器,XFire 專(zhuān)門(mén)提供一個(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,該文件用來(lái)定義本工程的 bean,一個(gè)為 xfire-servlet.xml,用來(lái)配置 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 的接口類(lèi) HelloWorld.java 和對(duì)應(yīng)實(shí)現(xiàn)類(lèi) HelloWorldImpl.java為了用 WebService 完成 HelloWorld 功能,我們首先在 src/webservice 目錄下
12、建立接口類(lèi)HelloWold.java。它僅包含一個(gè) sayHelloWorld(Stringname)的方法,其詳細(xì)內(nèi)容如下:packagewebservice;/*/*HelloWorld 的接口類(lèi).*/publicinterfaceHelloWorld/*/*對(duì)名字為 name 的人打招呼.paramname 名字return 返回打招呼的字符串*/StringsayHelloWorld(Stringname);我 們 還 需 要 建 立 一 個(gè) 對(duì) 應(yīng) 的 實(shí) 現(xiàn) 類(lèi) , 來(lái) 實(shí) 現(xiàn)HelloWorldImpl.java。該 類(lèi) 的 詳 細(xì) 內(nèi) 容 如下:packagewebservi
13、ce;/*/*HelloWorld 的實(shí)現(xiàn)類(lèi).*/publicclassHelloWorldImplimplementsHelloWorldpublicStringsayHelloWorld(Stringname)StringhelloWorld=hello,+name;returnhelloWorld;3)Spring 配置文件 applicationContext.xml 和 xfire-servlet.xml 的配置首先我們?cè)?applicationContext.xml 文件中配置對(duì)應(yīng)的 beanHelloWorldBean,該xml 文件的內(nèi)容如下:sayHelloWorld 的功能
14、,該實(shí)現(xiàn)類(lèi)即為這個(gè)配置文件很簡(jiǎn)單,在此不詳述。XFire 為 Spring 提供了方便易用的導(dǎo)出器 XFireExporter,借助該導(dǎo)出器的支持,我們可以在 Spring 容器中將一個(gè) POJO 導(dǎo)出為 WebServiceoHelloWorld 是業(yè)務(wù)服務(wù)類(lèi),在此擁有一個(gè)sayHelloWorld 的方法,我們希望將此方法開(kāi)放為 WebServiceo在實(shí)際應(yīng)用中,如果某個(gè)類(lèi)具有眾多的方法,而其中的某些方法不需要開(kāi)放為 WebService 的情況下,我們可以定義一個(gè)窄接口,該接口中只需定義那些開(kāi)放為 WebService 的業(yè)務(wù)方法。將一個(gè)業(yè)務(wù)類(lèi)所有需要開(kāi)放為 WebService 的方
15、法通過(guò)一個(gè)窄接口來(lái)描述是值得推薦的作法,這讓 WebService 的接口顯得很“干凈”。其次,XFire 的導(dǎo)出器也需要服務(wù)接口的支持,因?yàn)樗捎没诮涌诘膭?dòng)態(tài)代理技術(shù)。窄接口中的方法在真實(shí)的系統(tǒng)中可能需要引用其它的業(yè)務(wù)類(lèi)或 DAO 獲取數(shù)據(jù)庫(kù)中的真實(shí)數(shù)據(jù),為了簡(jiǎn)化實(shí)例,我們?cè)诖撕?jiǎn)化了實(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ù)定義的配置文件。從該配置文件中可以看出,我們通過(guò) XFireExporter 將業(yè)務(wù)類(lèi)導(dǎo)出為 WebService,對(duì)于任何導(dǎo)出器,我們都需要引入 XFire 環(huán)境, 即 serviceFactory 和 xfire,這是標(biāo)準(zhǔn)的配置。 ServiceFactory 是 XFire 的核心類(lèi), 它可以將一個(gè) POJO生成為一個(gè) WebServiceo在本實(shí)例中,我們通過(guò)定義一個(gè) baseWebService,其余的 webService 配置都將該 bean 作為父 bean,這樣可以簡(jiǎn)化 Spring 的配置,不需要多次引入 service
17、Factory 和 xfire。3.WebService 的測(cè)試在上一步操作完成之后,我們的這個(gè)簡(jiǎn)單的 WebService 已經(jīng)編寫(xiě)完畢,下面讓我們來(lái)看看自己的勞動(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 就可以開(kāi)發(fā)相應(yīng)的客戶(hù)端調(diào)用程序了。X
18、Fire 為訪(fǎng)問(wèn)服務(wù)端 WebService 提供了各種方便的方式:我們一般根據(jù)服務(wù)地址和窄接口類(lèi)創(chuàng)建客戶(hù)調(diào)用程序。在不能獲得服務(wù)窄接口類(lèi)的情況下,XFire 允許我們通過(guò) WSDL 文件生成客戶(hù)端調(diào)用程序,通過(guò)指定服務(wù)接口的方式調(diào)用服務(wù)。1)通過(guò) WSDL 文件生成客戶(hù)端調(diào)用程序首先我們通過(guò) http:/localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl 我們可以獲得WSDL 文件 HelloWorldService.wsdl,并將其放在 src 目錄下面, 接著我們通過(guò)程序訪(fǎng)問(wèn)該 WSDL 文件,并調(diào)用需測(cè)試的方法。
19、此時(shí)測(cè)試類(lèi) 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 的測(cè)試類(lèi).*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)建客戶(hù)實(shí)例objArray0=阿蜜果;/調(diào)用特定的 WebService 方法ObjectobjArraynewObject1;Objectresults=client.invoke(sayHelloWorld,objArray);System.out.println(result:+results0);運(yùn)行該類(lèi),可得到如下輸出結(jié)果:result:he
22、llo,阿蜜果可看出運(yùn)行結(jié)果正確。2)根據(jù)服務(wù)地址創(chuàng)建客戶(hù)端調(diào)用程序接著讓我們來(lái)看一個(gè)根據(jù)服務(wù)地址創(chuàng)建客戶(hù)端調(diào)用程序的例子。我們可以通過(guò)測(cè)試類(lèi)來(lái)測(cè)試 WebService 的正確性,下面讓我們來(lái)看一個(gè)簡(jiǎn)單的測(cè)試類(lèi),首先我們?cè)?src/test 目錄建立 WebServiceClientTest.java 文件,并在 src 目錄下建立客戶(hù)端調(diào)用的 Spring 配置文件client.xml。在 client.xml 配置文件中我們定義了一個(gè) testWebService 的 bean,該 bean 訪(fǎng)問(wèn) 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 方法來(lái)完成測(cè)試,該類(lèi)的詳細(xì)內(nèi)容如下所示:packagetest;importorg.springframework.context.ApplicationCont
24、ext;importorg.springframework.context.support.ClassPathXmlApplicationContext;importwebservice.HelloWorld;/*/*HelloWorld 的 webservice 的測(cè)試類(lèi).*/publicclassWebServiceClientTestHelloWorldhelloWorld=null;publicstaticvoidmain(Stringargs)WebServiceClientTesttest=newWebServiceClientTest();test.testClient();publicvoidtestClient()ApplicationContextctx=newClassPathXmlApplicationContext(clie
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司每月生日會(huì)策劃方案
- 2025年職業(yè)教育與成人繼續(xù)教育專(zhuān)業(yè)能力考核試題及答案
- 2025年醫(yī)學(xué)影像技術(shù)考試試卷及答案
- 2025年社會(huì)保障與就業(yè)考試題及答案
- 畜禽糞污資源化技術(shù)-洞察及研究
- 2025年教育信息化與學(xué)習(xí)平臺(tái)構(gòu)建考試試卷及答案
- 2025年環(huán)境工程師資格考試試卷及答案
- 2025年廣告與傳播專(zhuān)業(yè)考試試題及答案
- 2024年度浙江省二級(jí)造價(jià)工程師之建設(shè)工程造價(jià)管理基礎(chǔ)知識(shí)提升訓(xùn)練試卷B卷附答案
- 2024年度浙江省二級(jí)注冊(cè)建筑師之法律法規(guī)經(jīng)濟(jì)與施工題庫(kù)附答案(基礎(chǔ)題)
- (完整版)傳熱學(xué)期末考試試題
- JCT587-2012 玻璃纖維纏繞增強(qiáng)熱固性樹(shù)脂耐腐蝕立式貯罐
- Python數(shù)據(jù)分析與數(shù)據(jù)挖掘 課件 第6、7章 Pandas基礎(chǔ)與應(yīng)用、Matplotlib
- 玻璃體手術(shù)并發(fā)癥的預(yù)防及處理
- 2023年醫(yī)學(xué)高級(jí)職稱(chēng)-中醫(yī)肛腸(醫(yī)學(xué)高級(jí))考試歷年高頻考點(diǎn)試題含答案
- 爬架拆除技術(shù)交底
- pergeos軟件教程評(píng)價(jià)許可介紹
- 密封條范文模板(A4打印版)
- 出租車(chē) 專(zhuān)業(yè)部分考核試題 城市客運(yùn)企業(yè)主要負(fù)責(zé)人和安全生產(chǎn)管理人員安全考核基礎(chǔ)題庫(kù)
- GB/T 9634.3-2002鐵氧體磁心表面缺陷極限導(dǎo)則第3部分:ETD和E形磁心
- GB/T 8478-2008鋁合金門(mén)窗
評(píng)論
0/150
提交評(píng)論