最近在做一個項目時,需要使用.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);