Java調用ASP.NET的webservice故障排除


Java調用ASP.NET的webservice故障排除

 

公司要接入其它公司的一個業務功能,對方是提供的 .net產生的webservice,在用cxf的wsdl2java命令生成客戶端的測試代碼時,出現了如下故障
WSDLToJava Error: Thrown by JAXB: undefined element declaration 's:schema'

於是在網上查詢大量資料和不斷實踐摸索后,最后發現了如下兩種解決方法,希望我的解決過程和總結,能對其它網友解決類似問題,提供借簽和參考作用。
第一種方式(仍用cxf 解決)
step1
將 http://test.payserv.net/Paygate/ccservice.asmx?WSDL 對應的內容另存為 ccservice.wsdl
 

這里要特別說明的是,只能通過網頁中另存為ccservice.wsdl,不能簡單的將網頁中的復制后,再粘貼到一個文本文件中,另存為 ccservice.wsdl,這樣即使經過下述的 step2后,仍然會報錯

 

step2
首先將 ccservice.wsdl文件中的如下內容進行如下替換
即將 <s:element ref="s:schema" /><s:any /> 替換成 <s:any minOccurs="2" maxOccurs="2"/>
這樣處理后,再次運行wsdl2java又報了如下錯誤
經過仔細查看和分析,原來在 ccservice.wsdl文件中,有queryResponse 和 QueryResponse 兩個名字的定義,可能在.net中webservice是不區分大小寫的,但是在java中生成webservice的客戶端時,又是區分大小寫的,所以會報上述錯誤。針對此,於是將其中的QueryResponse的名字改為了 QueryResponse1,且ccservice.wsdl文件中將所有引用QueryResponse的地方也改成了QueryResponse1。。然后再將運行就一切ok啦

總結一下

在用cxf的wsdl2java命令處理net或其它語言產生的webservice時,如出現報錯,要仔細觀察報錯信息的描述,通過自己思考和查詢網絡資源,有針對性的修改,一定是可以解決的。

 

 

第二種方式(用axis的webservice框架 解決)

從我測試來看,不需要任何修改即可生成websercie的客戶端

不過,要需要axis如下一些jar包才能保證axis產生的webservice的客戶端代碼正常運行

總結一下

如果用時候發現用cxf的 wsdl2java命令不能正常執行時,不妨考用axix之類的其它webservice框架來解決問題,換一個角度去解決問題。

 

調用方式
Ccservice ccservice = new Ccservice();
CcserviceSoap ccserviceSoap = ccservice.getCcserviceSoap();
ccserviceSoap.query(參數1,參數2,...);

 

原文:http://www.cnblogs.com/wqsbk/p/5297589.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM