2017-01-30 27 views
0

私はnetbeansでderbyのサンプルデータベースを作成しました。複数の注入エラーまたはnullpointerException

私はpersistence.xmlを生成しました

データベースからエンティティクラスを生成しました。

私はそれ

@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); 
    } 
} 
の世話をする必要があります

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(); 
    } 
} 

とルートを作成

私はプロジェクトを実行し、ルート上の要求を得る作成するときに、まだそれは

javax.servlet.ServletExceptionスロー:MultiExceptionは1つの例外がありますが。 これらは次のとおりです。 1. org.glassfish.hk2.api.UnsatisfiedDependencyException: のSystemInjecteeImpl(requiredType = courseFactory、parent = courseRoute、修飾子= {}、position = -1、optional = false、 self = false、unqualified = null、6181406) 根本原因

マルチ例外には1つの例外があります。それらは次のとおりです。 1. org.glassfish.hk2.api.UnsatisfiedDependencyException: のSystemInjecteeImpl(requiredType = courseFactory、parent = courseRoute、修飾子= {}、位置= -1、オプション= false、self)には、 = FALSE、修飾されていない=ヌル、6181406)を 根本原因

org.glassfish.hk2.api.UnsatisfiedDependencyException:注射のために利用可能な オブジェクトがSystemInjecteeImpl(requiredType = courseFactory、親= courseRoute、修飾子= {}でありませんでした、位置= -1、オプション= false、自己= false、非修飾= null、6181406)

ただし、 courseFactoryからatelessとcourseRoute例えば

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

でそのインスタンスを作成するには、それは、NullPointerExceptionがスローされます。

私はこれを修正しようとしていますが、別のバグを作成するたびに、どのように修正するのが正しいですか?

+0

thats typo、指摘ありがとう – Darlyn

+0

これは問題ありません。 – atiqkhaled

答えて

0

私はあなたがこのようなあなたのDAO内の属性を宣言することとします

private List<Course> courses; 

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

したがって、このようなあなたのリストを初期化するために、あなたがしなければならないこの問題を解決するために:

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

EDIT

またはgetterで初期化リストを返します。

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

これはあなたに役立つと思います。

+0

クラスは文字通り私が投稿したものと同じです – Darlyn

+0

あなたの属性をチェックすることができます。もしそうなら、私の最初の解決策を実行してください。getterのチェックでそれを初期化する必要があります。 'course.getCourses()= new ArrayList <> ; ' –

+0

編集した答えが構文エラーをスローします。 – Darlyn