在CXF SoapHeaderInterceptor中注入单例ejb

每个人。 我正在尝试使用遵循DAO模式的单例EJB的功能。我的应用程序公开了两种(2)服务:

  • 一个是RESTful Web服务(JAX-RS)
  • 第二个是SOAPful Web服务(JAX-WS)

在这两种情况下,我都对使用此DAO模式bean感兴趣,该DAO模式bean已成功部署到我的App服务器(Wildfly 17.0.1)中。再说一遍:我的DAO模式类是带有@Startup批注的单例ejb。

RESTful:完全没有问题。我使用了一个拦截器(javax.interceptor.Interceptors),所以我只使用了以下代码片段,一切正常。

@EJB
MyDao dao;

然后:

@AroundInvoke
proteced object audit(invocationContext ctx) {
...
dao.isValidUser();
}

我正在尝试对SOAPful Web服务执行相同的操作,但是Wildfly使用CXF进行此操作,而CXF是Spirng的基础(据我所读,可以认为是结论,也许我是错的,但是...)事情是使用相同的方法是不行的。经过一些研究,我在一周前发现CXF具有自己的拦截器家族(org.apache.cxf.interceptor.InInterceptors),并且具有其阶段和特殊性。没有任何指导,通过扩展SoapHeaderInterceptor来使用我的新拦截器似乎合乎逻辑。部署还可以。当我尝试使用DAO类时出现问题:它总是为null,就像我的单例ejb对象(带有@Startup注释)不是在EJB容器中创建的。

到目前为止,我已经尝试了许多想法,例如在部署中包括一个beans.xml文件,还包括我的Idea项目的Spirng方面,一个带有CXF拦截器标记的cxf-servlet.xml,...

然后,我对其进行了更改,以扩展在示例中找到的唯一类:AbstractPhaseInterceptor,具有super()调用和参数Phase.RECEIVE。尽管部署成功,但是我什至无法从给定的URI中检索wsdl文件。将其更改为Phase.POST_LOGICAL,wsdl检索正常,dao仍然为空。

经过更多研究后,我发现一些变通办法使我的单例ejb bean不能成为单例ejb:我应该使用@Stateless和@ApplicationScoped批注,但是RESTful方式将走向地狱,而SOAPful中的dao仍然为空。

有人可以向我解释一下吗?除了Wildfly文档外,其他文档也可以执行此工作,因为目前看来,在不影响我的应用程序的逻辑和体系结构的情况下,是无法执行此操作的。

先谢谢了。 最好的祝福 豪尔赫·奥尔梅多。

gaoyangqusi 回答:在CXF SoapHeaderInterceptor中注入单例ejb

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3163439.html

大家都在问