版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、中文原文tenn.javaeye./blog/100736英文原文/axis2/1_0/userguide.html概述這個(gè)說明文檔涉及以下容:如何使用axis2創(chuàng)建webservice和客戶端程序如何定制一個(gè)模塊(Module)并在webservice中使用它SamplesdiscussionAdvancedTopics第一部分:簡介Axis2是重新設(shè)計(jì)的一個(gè)架構(gòu),它沒有基于Axis1.*的結(jié)構(gòu),這種新的架構(gòu)muchmoreflexible,efficientandconfigurable。Axis2的特性有:Speed:采用自己的對(duì)象模型,利用StAX解析Lowm
2、emoryfootprint:Axis2在設(shè)計(jì)過程中一直遵循lowmemorycost的理念A(yù)XIOM采用自己的輕量級(jí)的對(duì)象模型,使得消息處理過程可擴(kuò)展、性能高,對(duì)開發(fā)者來說更加簡單。HotDeployment:Axis2裝備了在系統(tǒng)運(yùn)行時(shí)部署服務(wù)和處理器的能力。也就是說,新的服務(wù)新服務(wù)的添加不再需要重啟服務(wù)器。將服務(wù)的發(fā)布包放在服務(wù)部屬文件夾中,部署模型將自動(dòng)部署該服務(wù)。AsynchronousWebServices:Axis2現(xiàn)在可以通過non-blockingclientsandtransports支持異步的服務(wù)和異步的服務(wù)調(diào)用。(?什么是異步的服務(wù)?)MEPSupport:Axis2具
3、備良好的伸縮性來支持MEPs,因?yàn)樗昧藢?duì)WSDL2.0中MEPs的支持。Flexibility:Axis2的架構(gòu)使得程序員能自由的對(duì)Axis添加擴(kuò)展,這些擴(kuò)展包括對(duì)自定義Header的處理,系統(tǒng)管理,甚至是任何一件你可以想象的到的事情Stability:Axis2定義了一套公共接口,這些接口相對(duì)于其他代碼而言改動(dòng)很小Component-orientedDeployment:你可以自定義一些在處理過程中常用的可重用的處理器,并可以將這些處理器發(fā)布出來供其它人使用TransportFramework:定義了一個(gè)干凈、簡單的抽象作品來集成任意的傳輸協(xié)議,引擎的核心部分的實(shí)現(xiàn)是與傳輸協(xié)議無關(guān)的Add
4、-ons:一些webservice相關(guān)的協(xié)議也合并了進(jìn)來。如安全方面的WSS4J(Rampart),可靠消息傳輸?shù)腟andesha,封裝了WS-Coordination,WS-AtomicTransaction和WS-BusinessActivity的Kandula。CompositionandExtensibility:模塊和層支持可擴(kuò)展性和可組合性(composability)。模塊支持可組合性,對(duì)添加新的webservice規(guī)的支持的方式非常簡單和干凈。但是他們并不是熱部署的,因?yàn)樗麄冇绊懻麄€(gè)系統(tǒng)的功能。Tips:WSS4J:/wss4j/ApacheWSS4J
5、sanimplementationoftheOASISWebServicesSecurity(WS-Security)fromOASISWebServicesSecurityTC.WSS4JisaprimarilyaJavalibrarythatcanbeusedtosignandverifySOAPMessageswithWS-Securityinformation.WSS4JwilluseApacheAxisandApacheXML-SecurityprojectsandwillbeinteroperablewithJAX-RPCbasedserver/clientsand.NETserv
6、er/clients.這個(gè)項(xiàng)目提供了在Axis上部署的幫助文檔和例子Rampart這是Axis2的一個(gè)Module(現(xiàn)在Axis2有兩個(gè)可選的Module,分別是Addressing和Security,Addressing包含在Standard版本中,但是Rampart需要單獨(dú)下載),目前作用不詳,猜測(cè)是與WSS4J合作完成WS-SecuritySendesha:/sandesha/Sandesha2isanimplementationofWS-ReliableMessagingspecificationpublishedbyIBM,Microsoft,BEAandT
7、IBCO.Sandesha2wasbuiltontopofAxis2.ThereforebyusingSandesha2youcanaddreliablemessagingcapabilitytothewebserviceshostedusingAxis2.Sandesha2canalsobeusedwithAxis2clienttointeractwithalreadyhostedwebservicesinareliablemanner.Pleaseseesandesha2userguideformoreinformationonusingSandesha2.Kandula:ws.apach
8、/kandula/2/index.htmlKandulawillprovideanopen-sourceimplementationofWS-Coordination,WS-AtomicTransactionandWS-BusinessActivitybasedonAxis.TheinitialimplementationwillbeinJavausingAxis/Java.Inadditiontoprovidinganimplementation,amajorfocusofthisprojectwouldbetoensureinteroperabilitywithotherimpl
9、ementationsofabovespecifications,particularlythosebyMicrosoft(.NET)andIBM.首先你需要在Servlet容器中部署axis2.war可以通過兩種方式來創(chuàng)建webservices1. 使用Axis2的API,實(shí)現(xiàn)業(yè)務(wù)代碼2. 從WSDL開始,生成代碼框架,然后實(shí)現(xiàn)業(yè)務(wù)邏輯1 )使用Axis2的API首先,計(jì)劃生成一個(gè)服務(wù)MyService,它有兩個(gè)方法:publicvoidping(OMElementelement)。/IN-ONLYoperation,justacceptstheOMElementanddosomeproce
10、ssing.publicOMElementecho(OMElementelement)/IN-OUToperation,acceptsanOMElementandsendsbackthesameagain從例子里找到實(shí)現(xiàn)的代碼:"Axis2Home/samples/userguide/src"中的"userguide/example1"創(chuàng)建一個(gè)服務(wù)分4個(gè)步驟a. 編寫實(shí)現(xiàn)代碼b. 用service.xml來解釋這個(gè)服務(wù)c. 創(chuàng)建一個(gè)*.aar的服務(wù)部署包d. 發(fā)布服務(wù)Step1:實(shí)現(xiàn)代碼publicclassMyServicepublicvoidping
11、(OMElementelement)publicOMElementecho(OMElementelement)ThisisasampleWebServicewithtwooperations,echoandping.userguide.examplel.MyServiceurn:echourn:ping說明:Forthe"echo"operationwehaveusedaRawXMLINOutMessageReceiversinceitisanIN-OUToperation.ForIN-ONLYoperation"ping",wehaveusedRawX
12、MLINOnlyMessageReceiverasthemessagereceiver.TheactionMappingisrequiredonlyifyouwanttoenableWS-Addressing.ServiceGroupContext還可以用這個(gè)文件來描述一組服務(wù),這組服務(wù)之間可以共享<!-detailsforService1-><!-detailsforService2->value1Step3:創(chuàng)建服務(wù)發(fā)布包這個(gè)服務(wù)發(fā)布包的結(jié)構(gòu)如圖所示。將這些文件按照?qǐng)D中的結(jié)構(gòu)組織好,然后打包成jar或者rar,然后修改后綴名為aar即可。WMIIIMWIIMlI-M
13、ETA-INF共5已FviB.xnnl®MyServiceStep4:部屬服務(wù)將服務(wù)發(fā)布包放到"/webapps/axis2/WEB-INF"中的"services”文件夾下,然后在Axis2的首頁(localhost:8080/axis2/index.jsp)的'services'連接下察看上 9 L Serwicm Mazilla 4 ire#cm服務(wù)發(fā)布情況ApacheSoftwareFoundationhttp:/www.apactie.crg/AvailableservicesmEPRi*1:fIccilhMt和時(shí)川咬Sv.ic
14、eS*nic«DotcnplieknTNiatATHpieWtbS«rvicawithoppatio*echo*pirgversionEm同Mlp"a浦3*1i0S0<'iMts2-s*r.ic0i-.«iiiiQn&ervice.吞cmpLi口riThiswrwice%IogettherunnimgA.mk»verssoliTbtAkIw的*w»FwndMiQfi2 )用服務(wù)代碼生成的方式創(chuàng)建服務(wù)首先要寫好服務(wù)的wsdl然后利用WSDL2Java工具該工具的命令有:UsageWSDL2Code-uri:WSDL
15、filelocation- o:outputfilelocation- a:Generateasyncstylecodeonly.Defaultisoff- s:Generatesyncstylecodeonly.Defaultisoff.takesprecedenceover-a- p:setcustompackagename- l:validlanguagesarejavaandcsharp.Defaultisjava- t:GenerateTestCasetotestthegeneratedcode- ss:Generateserversidecode(i.e.skeletons).De
16、faultisoff- sd:Generateservicedescriptor(i.e.services.xml).Defaultisoff.Validwith-ss- d:validdatabinding(s)areadb,xmlbeansandjaxme.Defaultisadb- gGeneratesalltheclasses.validonlywiththe-ss- pn:nameofportinthepresenceofmultipleports- sn:nameofserviceinthepresenceofmultipleservices- u:unpacksthedatabi
17、ndingclasses- r:pathoftherepositoryagainstwhichcodeisgenerated在windows平臺(tái)下可以用WSDL2Java-uri./samples/wsdl/Axis2SampleDocLit.wsdl-ss-sd-dxmlbeans- o./samples-porg.apache.axis2.userguide在Linux平臺(tái)下可以用WSDL2Java-uri./samples/wsdl/Axis2SampleDocLit.wsdl-ss-sd-dxmlbeans- o./samples-porg.apache.axis2.userguide
18、于是生成了服務(wù)的代碼框架,在代碼框架中填入代碼第三部分:用Axis2創(chuàng)建服務(wù)客戶端服務(wù)可以完成各種各樣的功能,有的簡單,時(shí)間消費(fèi)比較低,有的復(fù)雜,時(shí)間消費(fèi)比較高。我們不能采用一個(gè)統(tǒng)一的機(jī)制來調(diào)用這些時(shí)間消費(fèi)區(qū)別很大的服務(wù)。例如:我們用HTTP協(xié)議來帶調(diào)用一個(gè)IN-OUT類型的服務(wù),而這個(gè)服務(wù)的執(zhí)行時(shí)間很長,于是我們可能得到一個(gè)connectiontimeout的結(jié)果。而且,在一個(gè)客戶端同時(shí)發(fā)出兩個(gè)服務(wù)調(diào)用請(qǐng)求的情況下,使用blocking'的客戶端API將降低客戶端程序的性能。類似的,當(dāng)我們使用One-Way傳輸?shù)臅r(shí)候還可能有很多其他的后果產(chǎn)生。BlockingAPI:當(dāng)服務(wù)調(diào)用請(qǐng)求發(fā)
19、出后,客戶端等待服務(wù)結(jié)果的返回,這期間不能再發(fā)出服務(wù)調(diào)用請(qǐng)求。Non-BlockingAPI:這是一個(gè)基于callback或者polling的API,讓客戶端發(fā)出服務(wù)調(diào)用請(qǐng)求的時(shí)候,客戶端程序立刻得到控制權(quán),服務(wù)的調(diào)用結(jié)果由callback對(duì)象來接收。這樣,客戶端就可以同時(shí)調(diào)用多個(gè)服務(wù)而不進(jìn)行阻止。Axis將利用Non-BlockingAPI方式的異步叫做APILevelAsynchrony前面提到的兩個(gè)機(jī)制在Request和Response上使用了一個(gè)的傳輸連接,他們限制了服務(wù)調(diào)用在請(qǐng)求與結(jié)果返回使用兩個(gè)傳輸連接的情況(eitherOne-WayorTwo-Way)。所以這兩種機(jī)制都無法解決
20、在長時(shí)間運(yùn)行的事務(wù)中的尋址問題(傳輸連接可能在操作結(jié)束前就已經(jīng)timeout了)。一種解決方案是在request和response中使用兩個(gè)不同的傳輸連接。在這個(gè)級(jí)別上得到的異步屬性,稱為TransportLevelAsynchrony將前面的2種異步結(jié)合起來,就有了四種不同的調(diào)用模式服務(wù)的調(diào)用代碼:blockinginvocationtryOMElementpayload=ClientUtil.getEchoOMElement();Optionsoptions=newOptions。;options.setTo(targetEPR);thissetsthelocationofMyServic
21、eserviceServiceClientserviceClient=newServiceClient();serviceClient.setOptions(options);OMElementresult=sender.sendReceive(payload);System.out.println(result);catch(AxisFaultaxisFault)axisFault.printStackTrace();IN-ONLYtryOMElementpayload=ClientUtil.getPingOMElement();Optionsoptions=newOptions。;opti
22、ons.setTo(targetEPR);ServiceClientserviceClient=newServiceClient();serviceClient.setOptions(options);serviceClient.fireAndForget(payload);/*Wehavetoblockthisthreaduntillwesendtherequest,theproblemisifwegooutofthe*mainthread,thenrequestwontsend,soyouhavetowaitsometime:)*/Thread.sleep(500);catch(AxisF
23、aultaxisFault)axisFault.printStackTrace();Youcantestthisclientbyrunningthetarget"testPingClient"oftheantbuildfileat"Axis2Home/samples/userguide".EchoBlockingClient將第一段代碼的調(diào)用代碼改為serviceClient.sendReceiveNonblocking(payload,callback);具體的例子在"Axis2Home/samples/userguide/src/userg
24、uide/clients"中Axis提供三個(gè)方法來接收callback對(duì)象publicabstractvoidonComplete(AsyncResultresult);publicabstractvoidonError(Exceptione);publicbooleanisComplete()其中,前面兩個(gè)是需要用戶來實(shí)現(xiàn)的EchoNonBlockingDualClienttryOMElementpayload=ClientUtil.getEchoOMElement();Optionsoptions=newOptions。;options.setTo(targetEPR);opti
25、ons.setTransportInProtocol(Constants.TRANSPORT_HTTP);options.setUseSeparateListener(true);options.setAction("urn:echo"); this is the action mapping we put within theservice.xml/CallbacktohandletheresponseCallbackcallback=newCallback。publicvoidonComplete(AsyncResultresult)System.out.println
26、(result.getResponseEnvelope();publicvoidonError(Exceptione)e.printStackTrace();/Non-BlockingInvocationsender=newServiceClient();sender.engageModule(newQName(Constants.MODULE_ADDRESSING);sender.setOptions(options);sender.sendReceiveNonBlocking(payload,callback);/Waittillthecallbackreceivestheresponse
27、.while(!callback.isComplete()Thread.sleep(1000);/NeedtoclosetheClientSideListener.catch(AxisFaultaxisFault)axisFault.printStackTrace();catch(Exceptionex)ex.printStackTrace();finallytrysender.finalizeInvoke();catch(AxisFaultaxisFault)/havetoignorethis在Server端添加Addressing支持的方式是,在AddressingModule中,將Han
28、dlers的描述放在"pre-dispatch”語句中,那么它的加載則需要通過在"/webapps/axis2/WEB-INF"文件夾下的axis2.xml中增加一句話來完成:客戶端支持Addressing的方式,種是將addressing-.mar放在classpath中,另一種就是根據(jù)給定的庫位置創(chuàng)建一個(gè)ConfigurationContext具體的做法是在sender=newServiceClient();之前加上ConfigurationContextconfigContext=ConfigurationContextFactory.createConfi
29、gurationContextFromFileSystem(<Axis2RepositoryLocation>,null);然后將"sender=newServiceClient();"改為"sender=newServiceClient(configContext,null);"EchoBlockingDualClient示例代碼可以在"Axis2Home/samples/userguide/src/userguide/clients/"中找到,它與EchoNonBlockingDualClient相似,在這種情況下不再
30、需要callback來處理response。這個(gè)機(jī)制非常適用于處理IN-OUT類型的調(diào)用,而傳輸協(xié)議卻是One-Way(SMTP)的情況。我們可以用"Axis2Home/samples/userguide"中的"echoBlockingDualClient"來測(cè)試第四部分:Module構(gòu)造和部署Module分為以下幾個(gè)步驟:a. 創(chuàng)建Module的實(shí)現(xiàn)b. 創(chuàng)建Handlersc. 創(chuàng)建module.xmld. 修改axis2.xml(如果你需要定制的語句)e. 修改services.xml在Axis部署的時(shí)候使用這些Modulesf. 在Axis2中部
31、署這些Modules現(xiàn)在來創(chuàng)建一個(gè)簡單的LoggingModule,這個(gè)Module包含一個(gè)Hander,它的作用就是紀(jì)錄通過它的消息。Axis通過*.mar來部署Modules,下圖就是這個(gè)部署包的結(jié)構(gòu)畝.ioggingmodiile;工,rrria!,miliMETA-INF5岫MIFE3RMFx|modiJlB.xmll-uLogingModuleG由LogHandlarStep1:創(chuàng)建LoggingModuleClassLoggingModule是Axis2Module的實(shí)現(xiàn),它必須實(shí)現(xiàn)org.apache.axis2.modules.Module接口:Step2:創(chuàng)建LogHandl
32、er將處Axis的一個(gè)Module可以包含一個(gè)或者多個(gè)Handler。這些Handler理Soap頭文件中的不同phases。一個(gè)Handler必須實(shí)現(xiàn)org.apache.axis2.engine.Handler接口,或者通過另一種簡單方式,繼承org.apache.axis2.handlers.AbstractHandler類publicclassLogHandlerextendsAbstractHandlerimplementsHandlerprivateLoglog=LogFactory.getLog(getClass();privateQNamename;publicQNamegetName()returnname;publicvoidinvoke(MessageContextmsgContext)thr
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年1月南京市雨花臺(tái)區(qū)所屬單位公開招聘編外教師53人筆試備考題庫及答案解析
- 2026年池州現(xiàn)代報(bào)業(yè)出版發(fā)行有限公司公開招聘印刷操作工1名考試備考題庫及答案解析
- 2026年上半年合肥高新區(qū)管委會(huì)公開招聘工作人員45名筆試備考試題及答案解析
- 2026年度馬鞍山市博望區(qū)事業(yè)單位公開招聘工作人員21名考試備考試題及答案解析
- 2026天津市中心婦產(chǎn)科醫(yī)院招錄專職總會(huì)計(jì)師1人考試備考題庫及答案解析
- 2026年甘肅水文地質(zhì)工程地質(zhì)勘察院有限責(zé)任公司面向社會(huì)招聘18人筆試備考試題及答案解析
- 2026年風(fēng)力發(fā)電場布局的流體力學(xué)分析
- 2026年《商務(wù)工作成長與藍(lán)色扁平化啟示》
- 2025年濰坊體育單招學(xué)校筆試及答案
- 2025年教師事業(yè)編無筆試及答案
- 西南交通大學(xué)本科畢業(yè)設(shè)計(jì)(論文)撰寫規(guī)范
- 七上歷史期中??夹≌撐挠^點(diǎn)+范文
- 2025年高中語文必修上冊(cè)《赤壁賦》文言文對(duì)比閱讀訓(xùn)練含答案
- DB31-T 977-2023 戶外招牌設(shè)置技術(shù)規(guī)范
- 國家安全生產(chǎn)十五五規(guī)劃
- 醫(yī)院培訓(xùn)課件:《醫(yī)務(wù)人員不良執(zhí)業(yè)行為記分管理辦法》
- 電力施工流程七步驟電力
- 內(nèi)校員培訓(xùn)課件
- 污水處理廠設(shè)備安裝與調(diào)試方案
- 物體打擊事故培訓(xùn)課件
- 豬場產(chǎn)房技術(shù)員述職報(bào)告
評(píng)論
0/150
提交評(píng)論