2

我正在努力从 TomEE 中的 JAX-RS 消息正文处理程序访问 CDI 托管 bean。

我的处理程序类 ( implements MessageBodyWriter<Object>, MessageBodyReader<Object>) 是通过 中的cxf.jaxrs.providers属性注册的openejb-jar.xml。当我@Inject在构造函数上使用注释时,处理程序被静默忽略(因为它缺少无参数构造函数)。改为使用字段注入时,该字段保持为空。显然,消息体处理程序在 TomEE (CXF) 中完全不受管理。

我尝试通过 JNDI 获取 BeanManager,但是没有记录异常就失败了。

有没有其他方法可以做到这一点,或者我做错了什么?或者,我当然希望有一种方法可以使处理程序本身受到管理,并以某种方式以编程方式注册它。

4

1 回答 1

4

在 CXF >= 2.7 的版本中,注入应该可以正常工作。以前的版本使用 JAX-RS 1.x,它没有与 CDI 紧密集成。特别是,JAX-RS 1.x 提供程序,即使存在 CDI 容器,也由 JAX-RS 运行时(不是 CDI 运行时)管理,并且支持以下注入注释:

  • @资源
  • @资源
  • @EJB
  • @EJBs
  • @WebServiceRef
  • @WebServiceRefs
  • @PersistenceContext
  • @PersistenceContexts
  • @PersistenceUnit
  • @PersistenceUnits

参考:

于 2013-04-09T13:44:49.720 回答