折雨的天空
java调用php的webservice接口报错:faultString: org.xml.sax.SAXException: Bad envelope tag: definitions
2015-6-6 我好笨


没有了google的时候,遇到问题真的不好解决



以前一直用huhamhire-hosts改hosts挺好用了,但是重装系统后,这个也用不起了,没得谷歌了,还是要解决问题,将就用bing吧







这些都是题外话







说说经过:







我用php给别人提供了一个wsdl接口,php端,使用SoapDiscovery类自动生成的wsdl







测试用php调用接口,没有问题



第三方也有c#调用过,也没有任何问题,并且已上线运行







但是遇到一个使用Java的,调用这边的接口就报错:faultString: org.xml.sax.SAXException: Bad envelope tag:  definitions







由于我并不会java所以处理起来很困难,至少我要学会找段java代码来调用我的接口,才能调试吧







于是,下载安装java编辑器







因为之前已有Jdk这些了,还好







安装了java编辑器,网上找了段java调用webservice接口的代码







于是试着改一下,调用我的接口,出现了上面的错误







复现错误容易,要解决难了







用360,百度,Bing持续搜索,搜索关键字当然是上面那段,试了很多种方法,网上的办法基本都试了,没有任何效果







看到有一个人解决了问题,说是wsdl本身的问题







于是,我又想试着是不是自己的wsdl不符合规范







找了wsdl的语法,重新找了php生成wsdl的办法,包括nusoap类,重新生成wsdl







但是都没能解决







再试,wsdl本身,一段代码一段代码的删除,然后调试,获取结果







仍然无果,这当中,当然报错会不一样了







在各种办法都试完了以后,重新使用搜索引擎,改变了关键字







于是找到文章:







http://www.blogjava.net/mrcold/archive/2009/06/17/220044.html







这篇文章的报错是一样的,然后他也没能解决,但是在评论里,他又发了一个连接:







http://www.blogjava.net/mrcold/archive/2008/08/05/220121.html







通过这篇文章,顺利解决了问题








总结下来:








网上最多的解决办法把?wsdl去掉,这个是有道理的








因为我在调试使用php的nusoap的时候,它生成wsdl的时候,就不是一个真正的wsdl文件,而是一个php文件的输出,在Url最后就有一个?wsdl








如果去掉的话,那么这个java中的endpoint的地址,就正好变成了,webservice的执行地址了








上面两个链接里提到了wsdl 和 owl-s的区别








这些比较专业的,我不好描述,因为我也不熟悉他们








我只知道我的wsdl是程序生成的,而php和c#里调用也是指向wsdl文件本身的








最终的解决办法就是:








这个文件指向的问题,php和c#里,都是指向wsdl本身,而java里,这里用的axis,却要把地址指向php的soapserver声明,也就是wsdl中,soap:address的location属性








这里附上一些图:








QQ图片20150606195615.png








下面是wsdl中的soap:address







QQ图片20150606195615.png

发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容