joesid
joesid

Reputation: 681

Google guice injector for Servlets returns 500 error

Here is My Servlet

@WebServlet("/UserServlet")
public class UserServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    @Inject IUserBusiness userBusiness;


protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // TODO Auto-generated method stub
    List<UserBean> usersList=new ArrayList<UserBean>();
    usersList=userBusiness.getAllUsers();
    usersList.size();
}

And I have next interface and implementations

public interface IUserBusiness {
    List<UserBean> getAllUsers();
}

public class UserBusiness implements IUserBusiness{

    public List<UserBean>userList;
    public UserBusiness() {
        userList=new ArrayList<UserBean>();
    }
    public List<UserBean> getAllUsers(){
        UserBean user=new UserBean();
        user.setAge(44);
        user.setEmail("fgdfg");
        user.setPassword("dfgdfgf");
        userList.add(user);
        return this.userList;
    }
}

And then I configure the injector like this

public class Listener extends GuiceServletContextListener {

@Override
protected com.google.inject.Injector getInjector() {
    return Guice.createInjector(
            new ServletModule() {
                @Override protected void configureServlets() {
                    serve("/index.html").with(UserServlet.class);
                }
            },
            new Configure());
}

and

public class Configure extends com.google.inject.AbstractModule{

    @Override
    protected void configure() {
        bind(IUserBusiness.class).to(UserBusiness.class);
    }

}

But I get a 500 error (nullPointer Exception at userBusiness in servlet)

Servlet.service() for servlet [dynamic.UserServlet] in context with path [/dynamic] threw exception
java.lang.NullPointerException
    at dynamic.UserServlet.doGet(UserServlet.java:36)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:622)

Upvotes: 1

Views: 166

Answers (1)

Jeff Bowman
Jeff Bowman

Reputation: 95614

If you're using Guice, why do you have @WebServlet("/UserServlet") set? An extra annotation won't do any harm, except that it may mask a separate misconfiguration.

Make sure you're accessing the servlet through your Guice bindings, because if you're accessing it through some other configuration, your @Inject fields will not be set and you'll get an NPE when trying to access them.

Upvotes: 1

Related Questions