【问题标题】:simple Servlet CDI generating NullPointerException生成 NullPointerException 的简单 Servlet CDI
【发布时间】:2012-07-07 20:16:12
【问题描述】:

我正在开发一个名为 bookstore 的示例应用程序,我在其中使用了依赖注入。非常简单的应用程序。我正在使用 JavaEE 6、GlassFish 3.1.2、类中的静态数据(无 db)、Eclipse Juno。

如果需要,我可以提供更多信息。

我得到的错误:

WARNING: StandardWrapperValve[com.bookstore.web.BookListServlet]: PWC1406: Servlet.service() for servlet com.bookstore.web.BookListServlet threw exception
java.lang.NullPointerException
    at com.bookstore.web.BookListServlet.doGet(BookListServlet.java:29)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:668)

我知道这是没有注入依赖项。没有创建类实例来使用它。如果我删除 @Inject 并创建了一个类的实例,那么页面加载正常。

Servlet 代码生成错误:见粗体 cmets

package com.bookstore.web;

import java.io.IOException;

import javax.inject.Inject;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.bookstore.BookRepositoryImp;

@WebServlet("/book/")
public class BookListServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Inject
    private BookRepositoryImp bookRepo;

    public BookListServlet() {
        super();
    }

    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,
            IOException {

                **//bookRepo = new BookRepositoryImp(); If uncommect this code and remove @Inject than page working fine**
        req.setAttribute("books", bookRepo.listBooks());
        String path = "/WEB-INF/pages/book-list.jsp";
        getServletContext().getRequestDispatcher(path).forward(req, res);
    }

    protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException,
            IOException {

    }

}

项目结构:

【问题讨论】:

  • 第29行是哪一行?您是否尝试过将 beans.xml 文件移动到 web.xml 所在的 WEB-INF 文件夹中,可能由于某种原因,您的 beans.xml 文件未正确复制到生成的 war 文件中。
  • @kris,这行得通。我将文件移动到 WEB-INF 并且它工作正常。谢谢
  • 如果您将问题标记为已解决,那就太好了
  • 我已经添加了答案,因此您可以将其标记为已接受;)

标签: servlets java-ee-6 glassfish-3 cdi


【解决方案1】:

您是否尝试过将 beans.xml 文件移动到 web.xml 所在的 WEB-INF 文件夹中,可能由于某种原因,您的 beans.xml 文件没有正确复制到生成的 war 文件中。

【讨论】:

    猜你喜欢
    • 2017-11-08
    • 1970-01-01
    • 2011-11-27
    • 1970-01-01
    • 2013-03-16
    • 2011-08-24
    • 2013-02-28
    • 2012-08-20
    • 1970-01-01
    相关资源
    最近更新 更多