我必须用Java编写SOAP Web服务的客户端。最初我在wsdl上使用wsimport来生成代理类,一切都很顺利。 但是,如果wsdl中有类似添加的更改,则我的代理类崩溃。
所以我尝试切换到不需要预编译存根的spring-ws。
soap请求应如下所示:
<soapenv:Body>
<ws:command>
<requestName>?</requestName>
<paramCount>?</paramCount>
<paramList>
<item>?</item>
</paramList>
</ws:command>
</soapenv:Body>
我正在使用WebServiceTemplate发出请求:
import org.springframework.ws.client.core.WebServiceTemplate;
webServiceTemplate.marshalSendAndReceive(url, request);
以下是问题。我如何设法告诉spring-ws(或者我猜marshaller)我只想要一个没有任何包装器的元素列表添加到soap body中传递一个对象?
修改 正文和命令在wsdl中指定,我无法控制它们。我所拥有的是参数的列表:requestName,paramCount .. 此参数列表未包含在 commandParams 之类的元素中,但我必须将单个参数传递给marshalSendAndReceive()方法。如果我传递一个包装元素,那么该元素被序列化到正文中也违反了webservice契约。