Spring集成文件出站适配器

时间:2016-01-14 19:12:45

标签: spring-integration

我们有什么方法可以使用文件出站适配器将整个SOAP信封写入文件而不仅仅是有效负载? (我能够将有效负载写入文件中。)

1 个答案:

答案 0 :(得分:0)

假设您使用<int-ws:inbound-gateway>。或者它对目标解决方案并不重要......

您应该实施一些EndpointInterceptor将其添加到UriEndpointMapping。通过handleRequest实施,您可以访问整个MessageContext,您可以执行以下操作:

((SoapMessage) messageContext.getRequest()).getEnvelope()

并将此对象发送到outbound-channel-adapterstream Source到该文件的频道。

从网关的角度来看,您无法再访问messageContext

<强>更新

根据您在下面的评论(请考虑将来直接在问题中提供相似信息),我可以建议headers诀窍:

您实施自定义SoapHeaderMapperextends DefaultSoapHeaderMapper)并覆盖toHeadersFromRequest()传递给{won}标头的商店,并使用与SoapMessage中讨论的相同方式1}}案例。从EndpointInterceptor角度来看,您应该查阅该标头,以提取<int-file:outbound-channel-adapter>及其Source以存储在文件中。

更新2

InputStream

您应该将其作为public class MySoapHeaderMapper extends DefaultSoapHeaderMapper { @Override public Map<String, Object> toHeadersFromRequest(SoapMessage source) { Map<String, Object> headers = super.toHeadersFromRequest(source); headers.put("soapMessage", source); return headers; } } 注入<int-ws:inbound-gateway>。之后,header-mapper标头将在任何下游组件中可用。 E.g。

soapMessage