多次注入错误或nullpointerException

时间:2017-01-30 18:22:06

标签: java netbeans glassfish

我在netbeans中用derby创建了示例数据库。

我生成了persistence.xml

我从数据库生成了实体类。

我创建了

courseDAO

@Stateless
public class courseDAO {
    @PersistenceContext
    EntityManager em;

    public courseDAO(){}
    public List<Course> getCourses(){
        return em.createNativeQuery("Select * From Course", Course.class).getResultList();
    }
}

工厂类

@Stateless
public class courseFactory {

   @Inject
   courseDAO course;

    public courseFactory() {
    }

    public List<Course> getCourses(){
        return course.getCourses();
    }
}

和应该照顾它的路线

@Path("course")
public class courseRoute {

    @Inject
    courseFactory courseFactory;
    @GET
    public String hi(){

        List<Course> l = courseFactory.getCourses();
        GsonBuilder builder = new GsonBuilder();
        Gson gson = builder.create();
        return gson.toJson(l);
    }
}

然而,当我在路线上运行项目并创建获取请求时,它会抛出

  

javax.servlet.ServletException:MultiException有1个例外。   他们是:   1. org.glassfish.hk2.api.UnsatisfiedDependencyException:没有可用于注射的对象   SystemInjecteeImpl(requiredType = courseFactory,父= courseRoute,限定符= {},位置= -1,可选=假,自我=假,不合格= NULL,6181406)   根本原因

     

MultiException有1个例外。他们是:   1. org.glassfish.hk2.api.UnsatisfiedDependencyException:没有可用于注射的对象   SystemInjecteeImpl(requiredType = courseFactory,父= courseRoute,限定符= {},位置= -1,可选=假,自我=假,不合格= NULL,6181406)   根本原因

     

org.glassfish.hk2.api.UnsatisfiedDependencyException:没有   可用于注射的物体   SystemInjecteeImpl(requiredType = courseFactory,父= courseRoute,限定符= {},位置= -1,可选=假,自我=假,不合格= NULL,6181406)

然而,当我从courseFactory中移除无状态并在courseRoute中创建其实例时,例如

courseFactory c = new courseFactory()
List<Course> l = c.getCourses();

抛出nullpointerException。

我一直在努力解决这个问题,但每当我创建另一个错误时,修复它的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

我想您在DAO中声明了一个属性,如下所示:

private List<Course> courses;

public List<Course> getCourses(){
    return course.getCourses();
}

所以要解决这个问题,你应该像这样初始化你的列表:

private List<Course> courses = new ArrayList<>();

修改

或者在你的getter中返回一个初始化List:

public List<Course> getCourses(){
    course.getCourses() = new ArrayList<>();
    return course.getCourses();
}

希望这可以帮到你。