【问题标题】:why can i not get the injection to work?为什么我不能让注射起作用?
【发布时间】:2013-08-06 09:15:21
【问题描述】:

我有一个项目,我正在尝试注入我的服务,但我不断收到注入 UserService 的空指针异常。而且我无法弄清楚我错过了什么。

我将项目添加到我的 github,https://github.com/JohnnyBekkestad/demo,请注意,为了专注于问题,我删除了很多代码来清理它。

如果有人能看到我缺少的东西,我将不胜感激。

最好的问候 强尼

【问题讨论】:

  • 如果您不发布源代码并指出错误发生的类/行,就没有机会得到答案。
  • 是的,请至少发布您的堆栈跟踪。
  • UserController.java 中 Line27 中的 NullPointer 异常

标签: java maven jakarta-ee dependency-injection cdi


【解决方案1】:

【讨论】:

  • 这是正确的,我试图注入 UserController.java,但是当我添加 beans.xml 时它没有工作
  • 跟进这一点,因为您正在做一个多模块项目,除了 WAR 的 WEB-INF 中的 beans.xml 之外,您还需要 META-INF/beans.xml。
  • @BeauJohnnyBekkestad 请发布您的堆栈跟踪。 LightGuard 绝对不是必需的,但可能取决于您的应用服务器。
  • 将堆栈跟踪添加到 github github.com/JohnnyBekkestad/demo/blob/master/stacktrace.txt 观察代码行会有所不同,因为我删除了相当多的代码以使其更具可读性。问题出在 UserController.java 的 Line27
  • 尝试注释您的 REST 类 @RequestScoped,而不是 @ManagedBean。另外,您使用的是什么应用程序服务器(名称和版本)。
【解决方案2】:

如果使用 Tomcat,请查看此 tutorial 并记住添加 beans.xml,以更改 web.xml 并包含/排除不必要的依赖项 (weld)。此外,没有这样的注释对

@Path 
@ManagedBean

记住:JAX-RS(或者在你的情况下是 Jersey)告诉你,当它找到任何实现时,这意味着 @Path 就足够了:

INFO: Root resource classes found:
   class com.bekkestad.demo.web.rest.UserController

首先:Tomcat 不是 Java EE 容器。如果使用 GlassFish 4,请先熟悉 Java EE(@EJB > @Stateless),然后添加 CDI 功能 - 但是您不必添加任何依赖项,因为焊接已经可用(= 没有 context.xml 或 web.xml 中的更改需要,只是 WEB-INF 和所有其他项目 META-INF 目录中的 beans.xml。

【讨论】:

    猜你喜欢
    • 2014-05-27
    • 1970-01-01
    • 2016-04-05
    • 2020-06-11
    • 1970-01-01
    • 2019-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多