从Spring Integration调用POX Web服务 [英] Call POX web service from Spring Integration

查看:22
本文介绍了从Spring Integration调用POX Web服务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在一个项目中使用了Spring Integration,该项目集成(成功)了各种睡觉/JSON和SOAP端点。 现在我需要调用一个配置为通过HTTP接受Plain-Old-XML-over-HTTP的BusinessWorks实例。 从"Spring Integration in Action"一书中,我得到了一个提示,我应该为此使用int-ws:outbound-ateway。 此配置生成正确的请求,但使用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,但是请求的主体是空的(Spring Integration有效负载中没有对象的踪迹)。 有人能告诉我我做错了什么吗?或者如何实现我想要做的事情?

推荐答案

我认为这是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 bug

同时,作为一种解决办法,我建议您直接使用WebServiceTemplate而不是<int-ws:outbound-gateway>,您可以使用marshalSendAndReceive()方法从<service-activator>调用它进行交互。

这篇关于从Spring Integration调用POX Web服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆