java - 如何从 JAX-RS MessageBodyWriter 访问 CDI 托管 bean?

标签 java jax-rs cdi apache-tomee

我正在努力从 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/

相关文章:

cxf - 没有消息正文作者/JAX-RS/CXF

java - 替代 CDI 注入(inject)未按预期工作

jakarta-ee - 使用 CDI 注入(inject)非托管类?

java - Weblogic 12.1.3,Jersey 2.5.1,如何启用MultiPartFeature : WELD-001408 Unsatisfied dependencies for type [Providers]

java - 如何在Java中创建临时文件时删除ip和其他数值

java - JAXB minOccurs 当需要设置为 true 时消失

java - Amazon S3 Java API 仅下载 50 个对象

java - 将附加参数传递给 HTTP @DELETE 方法的正确方法是什么

java - 验证库设计模式选择

java - 缺少 @RequestParam 变量的映射