Java调用net的webservice故障排除实战分享
2015-07-03 11:16
295 查看
前几天公司要接入国外公司的一个业务功能,对方是提供的net产生的webservice,阿堂在用cxf的wsdl2java命令生成客户端的测试代码时,出现了如下故障
WSDLToJava Error: Thrown by JAXB: undefined element declaration 's:schema'
![](http://s2.sinaimg.cn/middle/4c925dcagc43f9cca9681&690)
于是阿堂(网络时空)在网上查询大量资料和不断实践摸索后,最后发现了如下两种解决方法,希望阿堂(网络时空)的解决过程和总结,能对其它网友解决类似问题,提供借签和参考作用。
第一种方式(仍用cxf 解决)
step1
将 http://test.payserv.net/Paygate/ccservice.asmx?WSDL 对应的内容另存为 ccservice.wsdl
![](http://s7.sinaimg.cn/middle/4c925dcagc43f9dda2e56&690)
这里要特别说明的是,只能通过网页中另存为ccservice.wsdl,不能简单的将网页中的复制后,再粘贴到一个文本文件中,另存为 ccservice.wsdl,这样即使经过下述的
step2后,仍然会报错
![](http://s2.sinaimg.cn/middle/4c925dcagc43f9ef57041&690)
step2
首先将 ccservice.wsdl文件中的如下内容进行如下替换
即将 <s:element ref="s:schema" /><s:any /> 替换成 <s:any minOccurs="2" maxOccurs="2"/>
![](http://s5.sinaimg.cn/middle/4c925dcag7a065cc70114&690)
这样处理后,再次运行wsdl2java又报了如下错误
![](http://s4.sinaimg.cn/middle/4c925dcagc43fa0980fb3&690)
阿堂经过仔细查看和分析,原来在ccservice.wsdl文件中,有queryResponse 和 QueryResponse 两个名字的定义,可能在
net中webservice是不区分大小写的,但是在java中生成webservice的客户端时,又是区分大小写的,所以会报上述错误。针对此,阿堂(网络时空)于时将其中的QueryResponse的名字改为了QueryResponse1,且在ccservice.wsdl文件中将所有引用QueryResponse的地方也改成了QueryResponse1。。然后再将运行就一切ok啦
![](http://s8.sinaimg.cn/middle/4c925dcagc43fa1841f57&690)
![](http://s10.sinaimg.cn/middle/4c925dcagc43fa2183a39&690)
阿堂总结一下
在用cxf的wsdl2java命令处理net或其它语言产生的webservice时,如出现报错,要仔细观察报错信息的描述,通过自己思考和查询网络资源,有针对性的修改,一定是可以解决的。
第二种方式(用axis的webservice框架 解决)
从阿堂(网络时空)的测试来看,不需要任何修改即可生成websercie的客户端
![](http://s4.sinaimg.cn/middle/4c925dcagc43fa349f363&690)
不过,要需要axis如下一些jar包才能保证axis产生的webservice的客户端代码正常运行
![](http://s6.sinaimg.cn/middle/4c925dcagc43fa4043595&690)
阿堂总结一下
如果用时候发现用cxf的 wsdl2java命令不能正常执行时,不妨考用axix之类的其它webservice框架来解决问题,换一个角度去解决问题。
调用方式
Ccservice ccservice = new Ccservice();
CcserviceSoap ccserviceSoap = ccservice.getCcserviceSoap();
ccserviceSoap.query(参数1,参数2,...);
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,...);
相关文章推荐
- Java NIO原理图文分析及代码实现
- 在eclipse中android private libraries中关联javadoc
- drools的JavaDialect异常
- drools的JavaDialect异常
- Javaweb引入讯飞语音合成so库
- Spring注解@Component、@Repository、@Service、@Controller区别
- java 参数传递
- struts2学习笔记(四)--获取Session和request方法
- java解释XML
- java中的引用类型概念
- Selenium_WebDriver自动登录BBS找到特定帖子回复指定内容领铜钱(xpath初练手)_Java
- Gson转换Json串为对象报java.lang.NoClassDefFoundError
- Java定时器的使用(Timer)
- java链接Hive与Impala经验总结
- java中如何判断一个字符是中文字符
- Java集合总结(二)
- Java Web返回JSON
- java中的引用类型概念
- Spring AOP切面
- Java学习遇到的问题