调试青海联通VAC接口,根据VAC SP接口规范1212中的wsdl文件,采用axis生成WebService服务,调试时发现青海联通VAC发送的请求解析老是出错:
2010-07-09 13:52:44,627[DEBUG]org.apache.axis.enterprise(325) - Mapping Exception to AxisFault
org.xml.sax.SAXException: Invalid element in com.unicom.vac.bossagent.soap.sync.req.OrderRelationUpdateNotifyRequest - userIdType
at org.apache.axis.encoding.ser.BeanDeserializer.onStartChild(BeanDeserializer.java:258)
at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1035)
at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
at org.apache.axis.encoding.DeserializerImpl.startElement(DeserializerImpl.java:369)
at org.apache.axis.encoding.ser.BeanDeserializer.startElement(BeanDeserializer.java:154)
at org.apache.axis.encoding.DeserializationContext.startElement(DeserializationContext.java:1048)
at org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.java:165)
at org.apache.axis.message.MessageElement.publishToHandler(MessageElement.java:1141)
at org.apache.axis.message.RPCElement.deserialize(RPCElement.java:236)
at org.apache.axis.message.RPCElement.getParams(RPCElement.java:384)
..............
后来通过axis的SOAPMonitor,发现联通给过来的VAC同步请求消息和规范中的wsdl定义不一样,修改了wsdl文件,重新生成WebService代码,再次测试成功。
修改后的wsdl如下:
规范中的wsdl文件如下:
联通VAC接口发过来的WebService请求消息如下:
问了一下青海联通,他们的VAC是华为做的,而且很多业务已经在跑了,真的搞不明白他们怎么调试通过的?
也许是我拿到的wsdl文件就不对,或是他们按照http+xml去自行解析了?
当然这个问题没出去说,也找不到华为的兄弟来讨论,既然已经有那么多业务在跑了,即使是他们未按照正确的规范来做现在也不能改了。只不过希望使用WebService来做规范的开发人员以后一定要按照规范来做,否则还采用WebService干嘛呢,徒增许多麻烦。