我使用ws:outbound-gateway来调用soap服务。我也添加了拦截器。
<int-ws:outbound-gateway id="wsOutboundGateway"
request-channel="requestChannel"
uri="{soapURI}"
message-sender="httpMessageSender"
message-factory="messageFactory"
interceptor="myInterceptor"
marshaller="jaxbMarshaller" unmarshaller="jaxbMarshaller">
<int-ws:uri-variable name="soapURI" expression="headers.soapURI"/>
</int-ws:outbound-gateway>
myInterceptor是一个实现ClientInterceptor的类。
查询:我在消息头中有需要截取的信息。有没有办法在拦截器中接收消息头。
注意:我在线程局部设置标头值并立即返回拦截器。
任何更好的解决方案,请建议。
答案 0 :(得分:1)
这取决于前提和背景。
抱歉,您必须分享更多信息。标题是什么?你怎么用的?也许没有必要在ClientInterceptor
中拦截它,但在<int-ws:outbound-gateway>
之前会更好吗?
<强>更新强>
我在邮件头中有信息,我必须在soap标头中传递它。
实际上ClientInterceptor
完全用于不同目的,其意图不会修改消息。
发送前有消息修改WebServiceMessageCallback
抽象。
但是有了像SOAP标头这样的要求我可以建议你去研究像DefaultSoapHeaderMapper
这样的开箱即用的组件。只有populateStandardHeaders
和SoapAction
的{{1}}交易仅填充为populateUserDefinedHeader
。因此,请考虑该类的一些扩展,以将自定义标记插入soapHeader.addAttribute()
。已经没有任何soapHeader
黑客了。