Spring 集成入站网关如何将 soap 请求保存到文件?
Spring Integration inbound-gateway how to save soap request to file?
在Spring集成中,使用入站网关,你知道如何将每个 SOAP WS 请求保存到单独的文件中吗?
目前,我停留在:
<!-- inbound -->
<ws:inbound-gateway id="inbound-gateway" request-channel="SOAPRequestChannel" reply-channel="SOAPResponseChannel"/>
<int:channel id="SOAPRequestChannel">
<int:interceptors>
<int:wire-tap channel="SOAPRequestChannelForLog"/>
</int:interceptors>
</int:channel>
<int:channel id="SOAPResponseChannel" />
<int:channel id="SOAPRequestChannelForLog" />
<int:logging-channel-adapter id="logger" expression="payload" level="INFO" channel="SOAPRequestChannelForLog"/>
但它只是将所有请求记录在 1 个文件中。
或者我必须编写另一个 class 之类的 LogToFile,它具有将该请求保存到文件的方法,将 int:logging-channel-adapter 替换为 int:service-activator ? Spring 是否支持开箱即用地记录每个 SOAP 请求?我阅读了参考文档,但找不到任何内容。
或者有更好的方法吗? ^_^
此致,
我最初通过阅读Spring Web Service 2 Cookbook 这本书发现Spring支持PayloadLoggingInterceptor & SoapEnvelopeLoggingInterceptor,然后查看参考文档。在那里^
我将结合如何将 log4j2 日志记录到单独的文件,如此处所述
Log4j2: How to write logs to separate files for each user?
首先,PayloadLoggingInterceptor
是基于 org.apache.commons.logging.Log
的,这已经是您的应用程序的责任,要使用哪个目标日志系统。是的,Log4j2 就是其中之一。只需要有一个从 Commons Logging 到目标 impl 的适当桥梁。看起来它是 out-of-the-box for Log4j...
如果您想将每个请求存储到其自己的文件中,请考虑为此目的使用 <int-file:outbound-channel-adapter>
。
您只需要根据传入的消息构建适当的内容:
Transformer transformer = createNonIndentingTransformer();
StringWriter writer = new StringWriter();
transformer.transform(source, new StreamResult(writer));
String message = writer.toString();
其中 source
是 <ws:inbound-gateway>
之后的消息的 payload
。
您只需要根据该消息或其他一些环境找出 file name
。
在Spring集成中,使用入站网关,你知道如何将每个 SOAP WS 请求保存到单独的文件中吗?
目前,我停留在:
<!-- inbound -->
<ws:inbound-gateway id="inbound-gateway" request-channel="SOAPRequestChannel" reply-channel="SOAPResponseChannel"/>
<int:channel id="SOAPRequestChannel">
<int:interceptors>
<int:wire-tap channel="SOAPRequestChannelForLog"/>
</int:interceptors>
</int:channel>
<int:channel id="SOAPResponseChannel" />
<int:channel id="SOAPRequestChannelForLog" />
<int:logging-channel-adapter id="logger" expression="payload" level="INFO" channel="SOAPRequestChannelForLog"/>
但它只是将所有请求记录在 1 个文件中。
或者我必须编写另一个 class 之类的 LogToFile,它具有将该请求保存到文件的方法,将 int:logging-channel-adapter 替换为 int:service-activator ? Spring 是否支持开箱即用地记录每个 SOAP 请求?我阅读了参考文档,但找不到任何内容。
或者有更好的方法吗? ^_^
此致,
我最初通过阅读Spring Web Service 2 Cookbook 这本书发现Spring支持PayloadLoggingInterceptor & SoapEnvelopeLoggingInterceptor,然后查看参考文档。在那里^
我将结合如何将 log4j2 日志记录到单独的文件,如此处所述 Log4j2: How to write logs to separate files for each user?
首先,PayloadLoggingInterceptor
是基于 org.apache.commons.logging.Log
的,这已经是您的应用程序的责任,要使用哪个目标日志系统。是的,Log4j2 就是其中之一。只需要有一个从 Commons Logging 到目标 impl 的适当桥梁。看起来它是 out-of-the-box for Log4j...
如果您想将每个请求存储到其自己的文件中,请考虑为此目的使用 <int-file:outbound-channel-adapter>
。
您只需要根据传入的消息构建适当的内容:
Transformer transformer = createNonIndentingTransformer();
StringWriter writer = new StringWriter();
transformer.transform(source, new StreamResult(writer));
String message = writer.toString();
其中 source
是 <ws:inbound-gateway>
之后的消息的 payload
。
您只需要根据该消息或其他一些环境找出 file name
。