webservice四種發(fā)布方式及客戶端調(diào)用_第1頁
webservice四種發(fā)布方式及客戶端調(diào)用_第2頁
webservice四種發(fā)布方式及客戶端調(diào)用_第3頁
webservice四種發(fā)布方式及客戶端調(diào)用_第4頁
webservice四種發(fā)布方式及客戶端調(diào)用_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、WebService 四種發(fā)布方式總結(jié)Author:yczhang1. CXF 方式CXF與spring搭建webservice是目前最流行的方式,但是傳聞cxf與jdk1.5有些不兼容,我沒有遇到過,我遇到的問題是cxf與was6.1.1不兼容,表現(xiàn)在cxf必須的jar包“wsdl4j-1.6.2.jar”報錯,報的錯為:java.lang.IncompatibleClassChangeError,明顯的jar包不兼容問題,很是頭痛,后來查找資料找到解決辦法是,將上述jar包新建一個was共享庫,可以解決,但是客戶周經(jīng)理不想用此種方式,因為需要修改was,于是改用了axis2方式,下文會介紹

2、。該問題在此處做個記錄,以后使用cxf與was的時候需要注意!使用cxf+spring搭建WebService:第一步, 添加jar包。 此處需要注意, 不同環(huán)境 (tomcat、was) jar也不一定相同, 例如我本地cxf+spring只需要如下jar包:出W311L處4,的丫生ins-1iL.1.1.jaiEO,出ad5S.jarLOS也TH目.gDCLd訕71f3i20至91%叮-3.d6MLEASEjir整:L$窗jb-iag-n-3.D.GULEMEjuS3,032匡產(chǎn)primg-kML10BHfcLK謔工jtr的電5如|&ipiidgrEvNext30-S.RELZAE

3、.jstG70之5。匡取1!熹rQhULEE)*382,184區(qū)i=式*T.0.G.MLIATE.jaira.T52iprifttlbi-S-06kSL&AS良j*r曳&*工過廿75.2,140.4.29mls5h.Mii4-eor*-?D3.jtr162,818而泰康的was環(huán)境則需要如下jar包:dVli-5AEL-*j!Jfib.(|JA*卻止他聲J,:柏AitJurJi醯srf-221.J4T篁餒IXKJ*r38軟叵TnilnffT.jiwriKlIW,艇IJ;*T&Jir通唐W-Qp.|irib-njut1nn1LLmi”面*2n:四TwnB?14ABgwui

4、|nEr,ju3j2013/0*22iq*ExkrmtAZT題4T即ErauiiriC!O_w|s!=L1,.2013/0122I9:SBHxitdralIIXJIBJ-rLSHEL*jfctb-jKT2013/eSi;我:三工K工gjTS3,E2jixb-iviL-.1.9ju式II二也TE213:EEHxa.co.tLZLHJU.容3TEEj-2.J.jKE19:%ZjLR.cm.1LnJr一MJ%jfcwj_3.3jr33M,出毛岫:搏包i/eHdl-Ju-ZJ匹J0*,RlLfl曬r&HFE/5作:反虐)Jr3L;J處L66EE0FREL7E.j-u-201%也巧15:2Bic

5、處SffT即乎一5t*H-i!LpL1.01J-4J20婚俄代作:樂Eiscxit-sj:1e址30EEwE.J14J-L也dJUT14:22ZJIvtHJ.1KJML峪kLBi*0JKTAjr+diibl+Ja-bM3的 對過皿那LL ?Jii4斌111,叼王IT3事C3 JMrL貼部load-on-startupCXFServlet/servlet-name/webservice/*/url-pattern上述標(biāo)記的地方,第一處是spring配置文件路徑;第二出是wsdl地址內(nèi)容;第三步,編寫接口類與實現(xiàn)類,注意注解接口類WebServicepublicinterfaceSendServi

6、cepublicbooleansendOA(WebParam(name=param)Stringparam);publicbooleansendOrg(OrgEntityorg);明顯的多了很多,原因應(yīng)該是服務(wù)器jar包池的不同。根據(jù)錯誤提示缺什么補(bǔ)什么就可以了,注意jar包勿重復(fù)。第二步,配置web.xml文件,如下(重要的地方已標(biāo)記)param-nameparam-value/context-paramcontextConfigLocationclasspath:/applicationContext.xmlparam-valueorg.springframework.web.contex

7、t.ContextLoaderListener/listener-classfilter-namefilter-classterencodingFilterorg.springframework.web.filter.CharacterEncodingFilencodingUTF-8filter-mappingfilter-nameurl-pattern/filter-mappingencodingFilter/*/url-patternCXFServlet/servlet-nameorg.apache.cxf.transport.servlet.CXFServlet1servlet-name

8、實現(xiàn)類WebService(endpointInterface=com.service.SendService,serviceName=sendService)publicclassSendServiceImplimplementsSendServicepublicbooleansendOA(Stringparam)System.out.println(sendOAparam:+param);if(param.equals(zhoujian)returntrue;returnfalse;publicbooleansendOrg(OrgEntityorg)System.out.println(s

9、endOrg-begin);returntrue;第四步,Spring配置文件!-“jaxws:client”該標(biāo)簽可以不必寫,訪問時可以手動拼接該url第五步,發(fā)布,直接部署到服務(wù)器,訪問:1:9080/Wb/webservice/sendServie?wsdl2. Xfire 方式據(jù)說xfire方式已經(jīng)很老了,但個人感覺,xfire方式很簡單且容易配置,不知為啥過時了,也沒感覺cxf、axis2哪里先進(jìn),我當(dāng)時卡在cxf與was搞不定時想嘗試xfire方式被周經(jīng)理給拒絕了。Xfire方式發(fā)布webservice:第一步,添加jar包,如下:=activa

10、tion_1.L:jar巴.3.jarcommons!oggingrl口4jar4jaKivsiqpi-2.0,jarjsr173_4pi-L.jrjsaij-api-1,3.jarspring_1.2.6.jxr”4:一:E】i=if2.0jarIIBxEirei-tgis-lu2.6.jarjxfi1B2.6Pjar但戶Eirij2.6.jar81 airspri1.2.B.jar,LXmlSchems&l.1.jar第二步,修改web.xml文件XFireServletorg.codehaus.xfire.transport.http.XFireConfigurableServl

11、et0XFireServlet/services/*第三步,編寫接口類接口類:publicabstractinterfaceIBankingServicepublicabstractStringtransferFunds(StringparamString1);實現(xiàn)類:publicclassBankingServiceimplementsIBankingServicepublicStringtransferFunds(StringfromAccount)(returnfromAccount+:ok;)第四步,編寫services.xml配置文件ons-teanuti1歹1.7,mipcl1電力

12、上=3.0.jarjjaxwi-!.jartofcijdm-L0.jar一面鼻il-1.4.jartsaaj-iiipl-!B3-jarstau-api-l.0.1.jit智匕七K-asl-2.0.jarJxbean-spring_2.8.jarxirs-anznotitifrns-1.2.6.jsr_stfirej6.jfiaraijtfire-jsrl81-ap.i-l,0-N1,jirmfire-xmlbe-ans-l,2.6.jar在WEB-INF目錄下新建目錄META-INF在該目錄下新建文件夾xfire,該目錄下新建文件services.xmlBankingnamespacemyb

13、ankcom.mybank.xfire.example.IBankingServicecom.mybank.xfire.impl.BankingService第五步,發(fā)布,部署到服務(wù)器,訪問url:http:/localhost:9080/Xfire/services/Banking?wsdl3. AXIS2 方式Axis2發(fā)布WebService有兩種方式,其一是利用axis2插件打成aar包放到axis_war里面部署到服務(wù)器發(fā)布;其二是不打包發(fā)布(本例);我不清楚打包發(fā)布有什么好處,感覺很麻煩項目外還得部署一個war,現(xiàn)在介紹第二種不打包的方式,類似xfire,同時由于cxf與was不兼

14、容導(dǎo)致wsdl.jar報錯,但是xfire與axis2也用到wsdl.jar卻不報錯,我個人也是很費解,泰康項目目前使用的就是axis2方式。Axis2發(fā)布WebService:第一步,添加jar包,如下:很多是吧,不過都是從axis.war里面WEB-INF下白lib目錄復(fù)制來的。第二步,修改web.xml文件AxisServletorg.apache.axis2.transport.http.AxisServletlass1AxisServlet/services/*in一曲.1.0jaf一a-btlr-2T.T-jiu-mon-L_1E7jsroxiicrrf.-7.jisa-n-4X:

15、l史, 中看$/4電鼬=LI.L.事4J.ju,_網(wǎng)rbsrL.】明修口色1.4LJU_4.L.肛OotasE-jucbru_L4.Ltz/z-l.-fl.1jarIHJ金.jam-即174.【.jr_4L.jurai33Z_jEMi-J.4-L.jariZi-sS-jjE-ji-14JiT士awLs2-tErz.el-l.L.JOT工ULbtwdwt-A.-!dLj拉wIsZrig-1.-L.L.jsHaj-lA1j-sr34L,jr1Kls苫jirin丁14jIT4L,j=“出皿 7jw產(chǎn)iS.ji*F二,,CUInuJWiLltpiEl.LSiht1( (LJMJMrMKilTLlV.j

16、trBccrficais-lTiEiJiic-L1jar.2.4r*hiriP-MtintiCLL.jir:erwnri0-mnoitati.nn_tJ_sc-5CJ1jarjAraniiiia-ail_t曰二曰二Lp由由12jir3?er*n3rip_*lar-ai:i._l.0_Ept_1J.1jtrbi-4D-LalA!jirjt,Jkitpzore-jiiiv-l.D-btts.jartrijwEfc-spi-fi-L.jir出I二ait-iTFIT.1.6.jar二穌&-1產(chǎn)-2L6.jsrjJjiggErl-1J.jaT0-寓2jw311b.jwrL.&.ju目Wi

17、 isisaQnail4.1riwjnvX11.41ELtplJ4f當(dāng)*啟小飛.OL4.他JBSrcavticnjnt-4.L.J上iYnikn-ifi-J.。帕.juurodjtji-anpL-口出jariaw-aO4j12.jiriiizerctsInpl-Z.B.JL.jKJI3ril-ApL%-1.主況jarXTill:60=.5.3.D.j-ttrril-relTr-ltjwZrilch.-aiinl.441/servlet-c第三步,編寫實現(xiàn)類publicclassServicelmplpublicStringsayHello(Stringname)System.out.print

18、ln(=);returnhello:+name;第四步,增加WEN-INF內(nèi)容將axis.war解壓下的WEN-INF文件夾內(nèi)的conf、modules復(fù)制到項目WEB-INF下曰工5A-Kis2Tet白國src國田+1JKESystemLibrary:J:距市匚I由一JavaEE5Libraries翱H.bApplibru-iE+已META-IMF目號1+113conf+10lit+1(_ngdulsHservices|-:予AxLsETest面JMETA-I1WII.mHservices.xmljx,web.xmljJindcn.jap第五步,在WEB-INF下創(chuàng)建文件夾services(

19、名字不可改),在該目錄下創(chuàng)建文件夾(名稱隨意),在該目錄下創(chuàng)建文件夾META-INF(名稱不可改),在該目錄下創(chuàng)建文件services.xml(名稱不可改),該文件內(nèi)容為:WebService 例子com.ServiceImpl第六步,部署到服務(wù)器,發(fā)布URL為:http:/localhost:9080/Axis2Test/services/axisDemo?wsdl恤一工皿4. AXIS1 方式同上,不知道AXIS1哪里不好,配置也很簡單,如下:第一步,添加jar包Mi activation.jir2015/2/101041EKScutable45KE,I_JaxiE.jar2006/4/2

20、210:56ExecutableJar.1,563KBpjant.jar2006/V2213:56EicecutabLf Jar33KJCpmmdiscovery-Qsjar2006/4/2213:56ExetqtableJsr-,rTOKBMiSTIS-1oggi元1.4.2006/4/2218.56J&F.38KBHjaxrpc.jur2006/4/22ie:5fiExecutableJar.31KB回log4j_1.2.8.jar2C06/4/22ExecutableJsr.345KB畫mi&il.jar2015/2/101041mutableJAF347KBsaaij,

21、jar2006/4/2213:56EKecutableJsr一19KBd wsd14jl.5.1.jar2006/4/2218:56ExtentableJH.-124KD第二步,修改web.xmlAxisServletorg.apache.axis.transport.http.AxisServletAxisServlet/services/*第三步,實現(xiàn)類與實體類實現(xiàn)類:packagecom;publicclassAxispublicStringsayHello(Stringname)System.out.println(=:+name);returnhi:+name;publicStrin

22、gsayHelloToUser(Useru)System.out .println(一:+u.getId();System.out .println(-:+u.getPath();System.out .println(-:+u.getAdd();returnhi:+u.getName();)實體類:packagecom;publicclassUserprivateStringid;privateStringname;privateStringadd;privateStringpath;gettersetter方法第四步,創(chuàng)建配置文件:在WEB-INF下新建文件“server-config.w

23、sdd!-globalConfiguration標(biāo)簽內(nèi)容為系統(tǒng)默認(rèn)無需更改!-service標(biāo)簽是需要配置的-!-name 是 url 中需要的參數(shù)-!三 llowedMethods 的 value 值是方法名可以寫*-!-className 的 value 值是類路徑-!wsdlTargetNamespace 的 wsdl 文件中 TargetNamespace 的值-!T 匕處很重要,若方法需要傳實體類,則配置此處-!認(rèn)-第五步,部署,同上。5. AXIS1 客戶端調(diào)用此處調(diào)用方式為axisl的調(diào)用,需要傳遞的參數(shù)可以是字符串或?qū)嶓w類,字符串方式:Serviceservice=newSer

24、vice();Callcall=(Call)service.createCall();/wsdl 地址call.setTargetEndpointAddress(newURL(wsdlUrl);/設(shè)定調(diào)用 3 分鐘不返回則超時call.setTimeout(newInteger(180000);/命名空間(wsdl 文件中的 targetNameSpace 屬性值)以及方法名call.setOperationName(newQName(http:/com,sayHello);/參數(shù)類型call.addParameter(name,XMLType.XSD_STRING,ParameterMode

25、.IN);/返回值類型call.setReturnType(XMLType.XSD_STRING);/參數(shù)值StringretXML2=(String)call.invoke(newObjectyczhang);System.out.println(retXML2);實體類方式(調(diào)用axis2的接口有點問題):UserEntityuserEntry=newUserEntity();userEntry.setId(yczhang);userEntry.setName(yczhang);Serviceservice=newService();Callcall=(Call)service.creat

26、eCall();/wsdl 地址call.setTargetEndpointAddress(/設(shè)定調(diào)用 3 分鐘不返回則超時/命名空間(wsdl 文件中的 targetNameSpace 屬性值)以及方法名call.setOperationName(newQName(http:/com,sayHelloToUser/注冊 SimpleObject 的序列化類型QNameqn=newQName(urn:BeanService,UserEntity);call.registerTypeMapping(UserEntity.BeanSerializerFactory(UserEntity.BeanD

27、eserializerFactory(UserEntity./參數(shù)類型(可省略)call.addParameter(requestParamorg.apache.axis.encoding.XMLType/返回值類型call.setReturnType(XMLType.XSD_BOOLEAN);BooleanretXML1=(Boolean)call.invoke(newObjectSystem.out.println(retXML1);newURL(wsdlUrl);call.setTimeout(newInteger(180000););class,qn,newclass,qn),newc

28、lass,qn);,.XSD_ANYTYPE,ParameterMode.IN);userEntry);注意,實體類方式,當(dāng)調(diào)用的是由axis2方式所發(fā)布的接口時,容易出現(xiàn)問題,表現(xiàn)在所傳遞的實體類的屬性內(nèi)容為null,但在該實體類內(nèi)新建一屬性傳如該值時,卻有值。應(yīng)該是axisl對axis2的不兼容問題。并且調(diào)用axis2的接口時,需要在客戶端寫出namespace,即:/call.setOperationName(newQName(http:/localhost:9080/WS_Axis/services/axisTest,sayHelloToUser);該種調(diào)用方式對于axis1的接口沒問

29、題。泰康項目最終使用的是axis1發(fā)布的接口,并使用該種方式調(diào)用的。publicstaticvoidmain(String口args)throwsServiceException,MalformedURLException,RemoteExceptionStringwsdlUrl=http:/localhost:9080/WS_Axis/services/axisTest?wsdl;/實體類Useruser=newUser();user.setId(1);user.setAdd(test);user.setName(test);user.setPath(test);Serviceservice

30、=newService。;Callcall=(Call)service.createCall();call.setTargetEndpointAddress(newURL(wsdlUrl);/設(shè)定調(diào)用 3 分鐘不返回則超時 call.setTimeout(newInteger(180000);/call.setOperationName(newQName(http:/localhost:9080/WS_Axis/services/axisTest,sayHelloToUser);/注冊 SimpleObject 的序列化類型(urn:BeanService 在 wsdd 文件內(nèi)有配置)QNam

31、eqn=newQName(urn:BeanService,User);call.registerTypeMapping(User.class,qn,newSystem.out.println(call.invoke(6. AXIS2 客戶端調(diào)用所需jar包:BeanSerializerFactory(User.BeanDeserializerFactory(User./方法名call.setOperationName(class,qn),newclass,qn);sayHelloToUser);/“user”是接口服務(wù)端方法體中的實體類所聲明的變量名(call.addParameter(use

32、r,say(Useruser)”)org.apache.axis.encoding.XMLType./返回值類型call.setReturnType(XMLType.XSD_ANYTYPE,ParameterMode.IN);XSD_STRING);newObjectuser);叵amwgenrOL1.09jar2D15/2/610:01EsecutableJar.,2曲KB2.7.jar2015/2/610:01EsecutableJar.195KB|IA|=ipl-l,2,jar2035/2/610-01EKJar.124KBiIaxi玄dbL4.1.jar201S/2/610/1Exec

33、utableJax.TSOKB產(chǎn);axi.4-1sj2015/2/61O:D1EKautablJw-lf283KB巴ba-ckfiort-ntilcoTicnrrent_3.1.jar2015/2/610:01EMScutalbl咆Jar.一五4KB巴conwnons-coe1.3Sjar2015/2/61001Esieut&bl*JftT.46KB回Ljar2015/1/6to-oiE桀電uutbd世J紅298KBoggiri,015/2/610:01IsiecutableJ虹一SOKB0.4.jarXiB/i/Am;otEsctcutJar.33KB6.2jar2C1

34、5/2/610.01EKecutaibleJar.14SKB三Jwi*sl-3a2.4.jar2035/2/61001Extentable114r.5比KB國XmlScheiia-!.4.2.jar2015W610:01EsecutableJar.一137KB具體代碼:publicclassRPClientpublicstaticvoidmain(String口args)throwsAxisFaulttry/實體類UserEntityue=newUserEntity();ue.setId(123);ue.setAddress(test);ue.setMail(123);ue.setName(y

35、czhang);RPCServiceClientclient=newRPCServiceClient();Optionsoptions=client.getOptions();Stringurl=http:/localhost:9080/WS_Axis2/services/axisDemo?wsdlEndpointReferenceend=newEndpointReference(url);options.setTo(end);Object口obj=newObjectue;Class口classes=newClassBoolean.class;/命名空間方法名QNameqname=newQNa

36、me(http:/com,sayHelloToUser);System.out.println(client.invokeBlocking(qname,obj,classes)0);catch(AxisFaulte)e.printStackTrace();)注意該種方式缺點是客戶端實體類路徑即包名必須與服務(wù)端實體類路徑相同!!但該方式可以調(diào)任何方式編寫的接口!7. CXF 客戶端調(diào)用使用axis、axis2客戶端調(diào)用cxf接口會有問題,建議使用cxf自身客戶端調(diào)用或者使用webserviceClient自動生成客戶端方式所需的jar包:匚comiftons-logsiiis:.jar2015/2/514:39ExecutableJar.36KB-,CKf-2.2.1.jar2013/3722 1956Ex&cutbleJ虹.一435&KB_i2,Ljar2013/3/2219:58ExtestableJar.aaKB-Jjaxb_impl_2.1.9.jar2013/9722 19:58

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論