使用WebServiceTemplate以多个部分调用Web Service Operation

时间:2014-04-02 22:10:48

标签: spring web-services jaxb wsdl webservicetemplate

我有一个由两部分组成的WSDL消息:

<wsdl:message name="GenericWebServiceOperationRequestMessage">
    <wsdl:part name="Body" element="ns:MyRequest"/>
    <wsdl:part name="Security" element="ns:Security"/>
</wsdl:message>

我正在使用的工作流是在wsdl上运行xjc.exe以生成JAXB工件,然后使用它们来调用Web服务。嗯,这一切都很好,除了我无法弄清楚正确的工作流程是使用Spring WebServiceTemplate调用具有多个部分的消息。我可以创建MyRequest和Security对象(它们是复杂类型),但函数:

WebServiceTemplate()。marshalSendAndReceive(Object requestPayload);只需要一个对象。不是部分......调用这种类型的Web服务操作的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

我想我没有得到答案的原因是因为这是不可能的。如果我错了,请纠正我,但似乎WebServiceTemplate仅支持包装 Web服务调用。也就是说,仅发送单个输入并接收单个输出对象的操作。

对于这样的情况,你有两个或多个对象对齐,我能看到的唯一解决方案是创建最复杂的对象,并在调用中使用Webservice回调函数,根据需要在body或header上手动创建SOAP元素

marshalSendAndReceive()调用中使用 WebServiceMessageCallback ,在 doWithMessage(WebServiceMessage message) 函数中,我使用

SOAPMessage soapMessage = ((SaajSoapMessage)message).getSaajMessage();

获取并修改肥皂信息。