如果与RestEasy结合使用,焊接CDI不会注入

时间:2014-11-06 15:00:46

标签: jboss jax-rs cdi resteasy weld

我正在尝试在JBoss 7.1.1上的Jax-RS(RestEasy)服务中使用CDI(Weld)。 如果我在例如使用它,注射工作正常一个简单的servlet,但只要我在Jax-RS服务中执行相同的操作,它仍然是null。没有错误,只是没有注射。阅读the JBoss RestEasy CDI Integration page时,一切看起来都很简单。

我尝试过的一些事情:

  1. 使用具有编译依赖性的RestEasy 3.0.9.Final
  2. 使用RestEasy 2.3.2.Final提供依赖
  3. 将RestEasy 3.0.9.Final添加为JBoss模块并使用它代替原来的2.3.2.Final
  4. 添加对resteasy-cdi.jar的依赖(在编译和提供的变体中)
  5. 按说明here
  6. 添加清单依赖项
  7. 将web.xml和一个填充的simular清空到this one
  8. @RequestScoped@Named添加到REST服务中,以便Weld选择
  9. 以上(以及其他一些狂野尝试)不会导致任何事情。 有什么建议吗?

1 个答案:

答案 0 :(得分:4)

我自己找到了这个问题的解决方案。知道解决方案,结果证明我没有在我的问题中显示完整的图片。

在我的XxxApplication(扩展javax.ws.rs.core.Application)中,我在单例列表中添加了一个新的XxxService实例(!!)。

在我的XxxService中,我做了一个new B(),其中B类的@Inject C是剩下的null

事实证明,实例化XxxService和B类都会导致问题。

将XxxService.class添加到XxxApplication中的类列表(而不是将new XxxService()添加到单例列表中)并在XxxService中使用@Inject B时,所有注入都能正常工作,包括{{1}在B。