Axis2返回报文解析丢失参数

来源:互联网 发布:海岛奇兵钻石辅助软件 编辑:程序博客网 时间:2024/06/14 12:40

背景

账管访问ESB的外部接口获取发票信息(发票代码A,发票号码B,发票册号C)。ESB返回了A,B,C组成的报文,但是账管只获取到B,C。而A数据为空。

形式:通过后台远程访问webservice
后台:c++ socket进程
数据解析:axis2/C解析库
本着开发怀疑的精神。
1、先确认了账管只是访问ESB获取参数,使用的也是ESB提供的wsdl,那么问题应该出现在ESB返回报文到账管的过程上
调用接口返回的报文

图 1 ESB返回的报文

2、既然报文有了,那么问题就出现在报文解析上面,而这部分是隐藏在axis2库里面的。
这里写图片描述
图 2 账管接收到的报文

3、而账管解析报文是根据wsdl文件中的参数来进行解析的,
这里写图片描述
图3 ESB提供的wsdl

4、从上面可以看出wsdl中的参数顺序与ESB返回报文中数据顺序不一致。本以为参数数据的解析应该与顺序无关,但事实却往往不是想象中的那样。
这里写图片描述
图4 修改后的wsdl

总结:
webservice +axis2 +wsdl形式的网络通信中,报文的解析参数顺序必须一致,以自动生成的wsdl为准。任何试图人为的修改wsdl都可能造成数据传输问题比如上面所示的例子。

0 0
原创粉丝点击