背景
账管访问ESB的外部接口获取发票信息(发票代码A,发票号码B,发票册号C)。ESB返回了A,B,C组成的报文,但是账管只获取到B,C。而A数据为空。
形式:通过后台远程访问webservice
后台:c++ socket进程
数据解析:axis2/C解析库
本着开发怀疑的精神。
1、先确认了账管只是访问ESB获取参数,使用的也是ESB提供的wsdl,那么问题应该出现在ESB返回报文到账管的过程上
2、既然报文有了,那么问题就出现在报文解析上面,而这部分是隐藏在axis2库里面的。
3、而账管解析报文是根据wsdl文件中的参数来进行解析的,
4、从上面可以看出wsdl中的参数顺序与ESB返回报文中数据顺序不一致。本以为参数数据的解析应该与顺序无关,但事实却往往不是想象中的那样。
总结:
webservice +axis2 +wsdl形式的网络通信中,报文的解析参数顺序必须一致,以自动生成的wsdl为准。任何试图人为的修改wsdl都可能造成数据传输问题比如上面所示的例子。