我们有什么方法可以使用文件出站适配器将整个SOAP信封写入文件而不仅仅是有效负载? (我能够将有效负载写入文件中。)
答案 0 :(得分:0)
假设您使用<int-ws:inbound-gateway>
。或者它对目标解决方案并不重要......
您应该实施一些EndpointInterceptor
将其添加到UriEndpointMapping
。通过handleRequest
实施,您可以访问整个MessageContext
,您可以执行以下操作:
((SoapMessage) messageContext.getRequest()).getEnvelope()
并将此对象发送到outbound-channel-adapter
到stream
Source
到该文件的频道。
从网关的角度来看,您无法再访问messageContext
。
<强>更新强>
根据您在下面的评论(请考虑将来直接在问题中提供相似信息),我可以建议headers
诀窍:
您实施自定义SoapHeaderMapper
(extends 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