最近在做一个项目时,需要使用.net 的soap服务,但是根据wsdl 生成的客户端一直都无法调用成功,提示: Data type 'soapenc:Array' mismatch in element 'stParameters'。其中stParameters在wsdl 中描述为数组类型,soap sytle为RPC,java生成客户端对应的参数为Object[]。
在调用的时候,如果不传数组参数,接口收发正常,一旦带了数组参数,就会出现上面的异常。后来找了很多资料,基本上是说服务端wsdl样式问题。在对方服务端不会因我们接入方而改变情况下,我们只能采取无奈的手段,使用JAXM 来发送和接受SOAP消息。
具体使用可以参考:http://www.ibm.com/developerworks/cn/xml/tips/x-jaxmsoap/
对于接受的SOAP消息,可以直接加载成xml进行解析,如下:
SOAPMessage reply = connection.call(message, urlEndpoint);
ByteArrayOutputStream respbty = new ByteArrayOutputStream();
reply.writeTo(respbty);
String respstr = new String(respbty.toByteArray());
logger.info("接收SOAP消息包:"+respstr);