【问题标题】:Spring-WS: how to use WebserviceTemplate with pre-generated SOAP-envelopeSpring-WS:如何将 WebserviceTemplate 与预先生成的 SOAP 信封一起使用
【发布时间】:2008-12-11 14:56:13
【问题描述】:

您能否使用 Spring-WS WebserviceTemplate 来调用 Web 服务并避免它生成 SOAP 信封?也就是说,消息已经包含一个 SOAP 信封,我不希望 WebserviceTemplate 将另一个包裹在它周围。 :-)

我想要这个的原因是我想调用一个使用 ws-security 的 web 服务,并且不想将 ws-security 的东西放入 WebserviceTemplate,而只是想给它一个预先生成的消息SOAP 信封中的 ws-security 信息。我尝试调用 sendSourceAndReceiveToResult 方法,其中 Source 已经包含一个带有 WS-Security 内容的 Soap-Envelope,并且 Web 服务模板环绕另一个 Soap-Envelope 并因此破坏了消息。

【问题讨论】:

    标签: java web-services spring ws-security spring-ws


    【解决方案1】:

    您正在以一种奇怪的方式使用 ws-security... 我猜您正试图通过使用预先生成的消息来避免 ws-security 依赖 - 因为简单的客户端可能是有道理的,尽管它绝对不是 -书。

    您可以通过将 WebServiceTemplate 上的 messageFactory 设置为此 bean,将 WebServiceTemplate 配置为使用没有 SOAP 的纯 XML:

    <bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate">
        <property name="messageFactory" ref="poxMessageFactory" />
    </bean>    
    
    <bean id="poxMessageFactory" class="org.springframework.ws.pox.dom.DomPoxMessageFactory" />
    

    【讨论】:

      【解决方案2】:

      拦截器可以为您尝试做的事情派上用场。在此处查看拦截器层次结构:http://static.springframework.org/spring-ws/docs/1.0-m1/api/org/springframework/ws/EndpointInterceptor.html 您可以使用 spring-ws 注册 EndpointInterceptor 并根据自己的喜好操作响应。

      【讨论】:

      • 是的,但我的意思是:我根本不想操纵请求和响应!如何避免 Webservice-Template 对它做任何事情?我的问题是它在现有的周围包裹了另一个肥皂信封。
      • 你不能那样做。 Web 服务模板以 SOAP 为中心——它假定您希望将响应包装在一个肥皂信封中。但在你的情况下,你的回复似乎已经装在一个肥皂信封里了。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多