【问题标题】:Spring Integration WS Response Soap HeadersSpring 集成 WS 响应 Soap 标头
【发布时间】:2019-03-16 14:21:29
【问题描述】:

我有以下用例。

  1. service1 的 ws-inbound 网关接收到请求。
  2. Service1 将请求传递给另一个 ws-outbound 网关 service2
  3. Service2 ws 入站网关配置了一个拦截器,它在响应中添加了一个自定义的 soap 标头
  4. 来自服务 2 的响应被传递到服务 1 的输出通道(最终响应)。

我可以看到通过在拦截器 (service2) 中打印soap 信封来添加soap 标头,但它不存在于最终响应中。任何解决此问题的建议都会有所帮助

【问题讨论】:

  • 如果您确实需要第一个服务的 SOAP 模型,请不要。也许只是原始的 HTTP 代理就足够了?我的意思是<int-http:inbound-gateway> -> <int-http:outbound-gateway>。第二个仍然是 WS Adapters 对。此外,请确认您在网络上看到了您的标头。
  • 嗨,是的,我也需要第一个服务的 SOAP 模型。这两项服务目前都部署在我的本地机器上。
  • 好的。所以,请给我一个确认,确认您的标头通过网络传输。您的服务在本地并不重要,您的<int-ws:outbound-gateway> 向某些http://localhost:9999 发送请求,因此涉及网络,您可以使用某些工具拦截该流量。
  • 您好,我尝试拦截 Service1 并添加响应标头。这次它工作正常。但是如果在Service2中添加,并且响应传递给service1,那就不行了

标签: spring-integration


【解决方案1】:

<int-ws:outbound-gateway> 默认使用DefaultSoapHeaderMapper。 以及填充source.getSoapAction(); 和source.getSoapHeader(); 的逻辑。但为此,您应该在<int-ws:outbound-gateway> 上为所需的标头配置mapped-reply-headers。

【讨论】:

  • 嗨,尝试了映射回复标题,但没有给出预期的结果。尝试使用 ClientInterceptor 拦截 int-ws:outbound-gateway。在 afterCompletion() 和 handleResponse() 方法中,我可以看到已添加的自定义响应标头。但是当它被传递到入站网关的响应通道时,它在某个地方迷路了。
  • 好的。因此,您应该通过DefaultSoapHeaderMapper 进行调试并找出它跳过您的标题的原因。
  • 我调试了同样的,发现它正在复制标题。标头的类型是 SaajSoapElement。它与复制逻辑有关吗?因为文件“DefaultSoapHeaderMapper”中的 cmets 表示它只复制纯文本标题。
  • 那么,你说它是因为SaajSoapElement 而不是SoapHeaderElement 而从extractUserDefinedHeaders() 中跳过的?
  • 它不会在任何地方跳过。 extractUserDefinedHeaders() 和 copyHeaders() 都成功运行。 toHeaders() 方法返回的地图也包含标题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多