由于开发webservice的框架越来越多,在跟各系统做接口时难免碰到麻烦的接口调试问题,最近的项目中已经碰到好几次了,每次都花费了大量时间,在这里记录下一些过程,以便参考。
调用别的系统发布的webservice接口,如果发现自己用Webservice开发框架写出来的代码没办法用时就只能用工具去生成代码了。
这里我使用的soapUI-x32-4.5.1,这工具用来测试对方webservice是否能正常访问和返回数据是比较容易操作的,如果能用工具测通,证明对方webservice基本上问题不大,接下来就要生成相应的客户端代码了。
soapUI生成代码的步骤可参考:http://wenku.baidu.com/view/2c1c32144431b90d6c85c709.html
生成完以后可以直接在eclipse里面跑测试类测试。
一般情况下用它生成的代码是能成功运行的,最近就碰一次不能成功运行的,老是报错,客户端代码一开始是用axis2生成的,后面换了很多三方包来生成不同的代码,发现都会报同样一个错误:org.codehaus.xfire.fault.XFireFault: 请求必须包含head信息!
类似这样的信息在网上是搜不到东西的,后来想想应该是自定义的异常,因为抛出了中文信息,但接口提供方也没有明确说明要怎么调用,尝试了一下增加<head>节点,居然就成功了。增加head节点在axis2生成的代码当中比较简单:emptyEnvelope.getHeader().setText("aaa"); 类似这样就行。
另外 ,推荐一个工具用来查看发送和返回的具体报文的工具(抓包工具)smsniff,在我的下载里面可以找到的。