我正在努力从 TomEE 中的 JAX-RS 消息正文处理程序访问 CDI 托管 bean。
我的处理程序类 ( implements MessageBodyWriter<Object>, MessageBodyReader<Object>
) 是通过 cxf.jaxrs.providers
注册的属性(property) openejb-jar.xml
。当我使用@Inject
时构造函数上的注释,处理程序将被默默地忽略(因为它缺少无参数构造函数)。当使用字段注入(inject)时,该字段保持为空。显然,消息正文处理程序在 TomEE (CXF) 中完全不受管理。
我尝试通过 JNDI 获取 BeanManager,但是失败且没有记录异常。
还有其他方法可以做到这一点,还是我做错了什么?或者,我当然希望有一种方法可以让处理程序本身得到管理,并以某种方式以编程方式注册它。
最佳答案
注入(inject)在 CXF >= 2.7 的版本中应该可以正常工作。之前的版本使用 JAX-RS 1.x,它没有与 CDI 紧密集成。特别是,即使存在 CDI 容器,JAX-RS 1.x 提供程序也由 JAX-RS 运行时(而不是 CDI 运行时)管理,并且仅支持以下注入(inject)注释:
- @资源
- @资源
- @EJB
- @EJB
- @WebServiceRef
- @WebServiceRefs
- @PersistenceContext
- @PersistenceContexts
- @PersistenceUnit
- @PersistenceUnits
引用文献:
关于java - 如何从 JAX-RS MessageBodyWriter 访问 CDI 托管 bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15902889/