没有了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属性
这里附上一些图:
下面是wsdl中的soap:address
------------正 文 已 结 束, 感 谢 您 的 阅 读 (折雨的天空)--------------------
转载请注明本文标题和链接:《java调用php的webservice接口报错:faultString: org.xml.sax.SAXException: Bad envelope tag: definitions》
发表评论