当使用@Autowired进入自定义cxf拦截器时,我似乎遇到了一个小问题.
我的用例是我想记录soap消息并使用AMQP将它们发送到另一个系统.此过程适用于普通服务等.
但无论我做什么,所需的属性都不会自动装配并保持为空.
我的用例是我想记录soap消息并使用AMQP将它们发送到另一个系统.此过程适用于普通服务等.
但无论我做什么,所需的属性都不会自动装配并保持为空.
我检查了Spring DI日志,扫描并拾取了上下文,所以我缺少什么?
这在CXF拦截器中甚至可能吗?
@Component public class LogInInterceptor extends AbstractSoapInterceptor { private @Value("#{rabbitMQProperties['rabbitmq.binding.log.soap']}") String binding; @Autowired AmqpTemplate amqpTemplate; public LogInInterceptor() { super(Phase.RECEIVE); } @Override public void handleMessage(SoapMessage soapMessage) throws Fault { logIt(soapMessage); } private void logIt(SoapMessage message) throws Fault { // rest of the code omitted...!!! amqpTemplate.convertAndSend(binding,buffer.toString()); } }
解决方法
你不能混合使用@InInterceptors(一个CXF注释)和@Component(一个Spring注释).这将创建两个独立的拦截器实例:一个依赖于Spring注入的实例,一个由CXF创建的实例. (您在@InInterceptors注释中提供类名,而不是bean ID,因此CXF无法知道您已在Spring上下文中创建了实例.)
删除@InInterceptors注释,除了component scan之外:
<context:component-scan base-package="org.example.config"/>
您还需要在应用程序上下文中使用以下内容:
<jaxws:endpoint id="myWebService" address="/MyWebService"> <jaxws:inInterceptors> <ref bean="myInInterceptor" /> </jaxws:inInterceptors> </jaxws:endpoint>
原文地址:https://www.jb51.cc/html/231609.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。