前幾天公司要接入國外公司的一個業務功能,對方是提供的net產生的webservice,阿堂在用cxf的wsdl2java命令生成客戶端的測試代碼時,出現了以下故障
WSDLToJava Error: Thrown by JAXB: undefined element declaration 's:schema'java
因而阿堂(網絡時空)在網上查詢大量資料和不斷實踐摸索後,最後發現了以下兩種解決方法,但願阿堂(網絡時空)的解決過程和總結,能對其它網友解決相似問題,提供借籤和參考做用。web
第一種方式(仍用cxf 解決)網絡
step1框架
將 http://test.payserv.net/Paygate/ccservice.asmx?WSDL 對應的內容另存爲 ccservice.wsdl測試
這裏要特別說明的是,只能經過網頁中另存爲ccservice.wsdl,不能簡單的將網頁中的複製後,再粘貼到一個文本文件中,另存爲 ccservice.wsdl,這樣即便通過下述的 step2後,仍然會報錯spa
step2.net
首先將 ccservice.wsdl文件中的以下內容進行以下替換orm
即將 <s:element ref="s:schema" /><s:any /> 替換成 <s:any minOccurs="2" maxOccurs="2"/>ci
這樣處理後,再次運行wsdl2java又報了以下錯誤element
阿堂通過仔細查看和分析,原來在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,...);