如何在Spring-Integration中的拦截器中获取消息头

时间:2020-09-23 07:56:17

标签: spring-integration spring-ws

我正在使用Spring-Integration代理SOAP Web服务。我使用一些入站网关收到请求,经过一些转换后,消息通过了Date Time Action。我扩展了ws:outbound-gateway并定义了一个名称为ClientInterceptor的自定义名称,该名称记录了XML请求和响应并将其添加到我的WSLoggingInterceptor中。

我想在日志中添加一个标识符,以便在同一消息流中关联发送请求和接收响应的日志。我在消息流开始时的集成头中定义了一些名为ws:outbound-gateway的{​​{1}}。我的问题是如何在此类拦截器中使用集成消息的UUID或其他集成头?有什么办法吗?

谢谢。

下面是我的拦截器类。

messageId

1 个答案:

答案 0 :(得分:1)

首先,请看一下消息历史记录,并在监听通道适配器中进行全局窃听。这样,您将能够跟踪消息流通过消息流的所有路径,包括标题和有效负载。

有关更多信息,请参阅文档:

https://docs.spring.io/spring-integration/docs/5.3.2.RELEASE/reference/html/system-management.html#message-history

https://docs.spring.io/spring-integration/docs/5.3.2.RELEASE/reference/html/core.html#channel-wiretap

在特定于WS的拦截器中获取请求的信息的另一种方法(也是唯一的方法)仅通过ThreadLocal变量进行。您可以在调用ThreadLocal之前将该信息存储在共享的ws:outbound-gateway中,然后从拦截器中的此变量中获取该信息。可能您知道记录器中的MDC或Spring Security中的SecurityContextHolder

您可能可以将自定义标头映射到SOAP请求中,但是从业务角度来看,将信息通过网络传送到Web服务显然不是什么好事。