我在一个项目中使用Spring,该项目集成(成功)了各种ReST/JSON和SOAP端点。现在,我需要调用一个BusinessWorks实例,该实例被配置为接受平原-over。从“”中,我得到了一个提示,即我应该使用int-ws:outbound gateway来实现这一点。此配置生成正确的请求,但在SOAP中:
<int-ws:outbound-gateway
uri="..."
request-channel="request" reply-channel="reply"
marshaller="marshaller" unmarshaller="unmarshaller"/>我不知道如何将它配置为将负载中的对象发送为POX (没有SOAP信封)。我试过这个:
<int-ws:outbound-gateway
uri="..."
request-channel="request" reply-channel="reply"
marshaller="marshaller" unmarshaller="unmarshaller"
message-factory="poxMessageFactory"/>
<bean id="poxMessageFactory"
class="org.springframework.ws.pox.dom.DomPoxMessageFactory"/>请求似乎只正确地切换到XML,但是请求的主体是空的(有效负载中没有对象的跟踪)。有人能告诉我我做错了什么,或者如何实现我想做的事情吗?
发布于 2017-10-05 18:58:26
我认为这是AbstractWebServiceOutboundGateway中的一个遗漏
public void doWithMessage(WebServiceMessage message) throws IOException, TransformerException {
Object payload = this.requestMessage.getPayload();
if (message instanceof SoapMessage) {
this.doWithMessageInternal(message, payload);
AbstractWebServiceOutboundGateway.this.headerMapper
.fromHeadersToRequest(this.requestMessage.getHeaders(), (SoapMessage) message);
if (this.requestCallback != null) {
this.requestCallback.doWithMessage(message);
}
}
}注意if (message instanceof SoapMessage) {。
因此,我们确实忽略了这样一个事实,即消息可以是不同的类型。
请打开JIRA虫关于这件事。
同时,作为解决办法,我建议您直接使用WebServiceTemplate而不是<int-ws:outbound-gateway>,您可以使用marshalSendAndReceive()方法从<service-activator>调用它进行交互。
https://stackoverflow.com/questions/46592176
复制相似问题