【问题标题】:How to access CDI managed bean from JAX-RS MessageBodyWriter?如何从 JAX-RS MessageBodyWriter 访问 CDI 托管 bean?
【发布时间】:2013-03-31 22:32:22
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: java jax-rs cdi apache-tomee


    【解决方案1】:

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

    • @Resource
    • @Resources
    • @EJB
    • @EJBs
    • @WebServiceRef
    • @WebServiceRefs
    • @PersistenceContext
    • @PersistenceContexts
    • @PersistenceUnit
    • @PersistenceUnits

    参考资料:

    【讨论】:

      猜你喜欢
      • 2013-12-07
      • 1970-01-01
      • 2018-12-11
      • 2015-05-05
      • 2012-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多