最近在做一個(gè)項(xiàng)目時(shí),需要使用.net 的soap服務(wù),但是根據(jù)wsdl 生成的客戶端一直都無(wú)法調(diào)用成功,提示: Data type 'soapenc:Array' mismatch in element 'stParameters'。其中stParameters在wsdl 中描述為數(shù)組類型,soap sytle為RPC,java生成客戶端對(duì)應(yīng)的參數(shù)為Object[]。
在調(diào)用的時(shí)候,如果不傳數(shù)組參數(shù),接口收發(fā)正常,一旦帶了數(shù)組參數(shù),就會(huì)出現(xiàn)上面的異常。后來(lái)找了很多資料,基本上是說(shuō)服務(wù)端wsdl樣式問(wèn)題。在對(duì)方服務(wù)端不會(huì)因我們接入方而改變情況下,我們只能采取無(wú)奈的手段,使用JAXM 來(lái)發(fā)送和接受SOAP消息。
具體使用可以參考:http://www.ibm.com/developerworks/cn/xml/tips/x-jaxmsoap/
對(duì)于接受的SOAP消息,可以直接加載成xml進(jìn)行解析,如下:
SOAPMessage reply = connection.call(message, urlEndpoint);
ByteArrayOutputStream respbty = new ByteArrayOutputStream();
reply.writeTo(respbty);
String respstr = new String(respbty.toByteArray());
logger.info("接收SOAP消息包:"+respstr);