2016-11-28 5 views
1

ich von My Test class.In Testklasse meiner Ejb Bohne nenne ich vor hier Userservice Schlüsselwort static verwenden, weil ich den Userservice aus dem statischen Kontext am Zugriff aufWarum Ejb Interface NullPointerException wirft?

Note (aus dem Hauptverfahren.): Wenn ich nicht das statische Schlüsselwort vor userService verwende, dann habe ich auch denselben Fehler.

public class Test { 

    @Inject 
    private static UserService userService; 

    public Test() { 
     // TODO Auto-generated constructor stub 
    } 

    public static void main(String args[]){ 
     userService.doSomething("hello"); 
    } 

} 

ich Setup eine EJB-3-Schnittstelle/Umsetzung wie folgt aussehen ...

Userservice (Schnittstelle)

package business; 

public interface UserService { 

    public String doSomething(); 

} 

UserServiceBean (Implementierung)

@Stateless 
@Local 
public class UserServiceBean implements UserService{ 

    public UserServiceBean() { 
    } 

    @Override 
    public String doSomething() { 
     return "Work done!"; 
    } 

} 

W Hen ich rufe doSomething Methode der UserServiceBean Klasse mit Schnittstelle von meiner Test-Klasse. Es gibt mir so einen Fehler.

Exception in thread "main" java.lang.NullPointerException 
    at test.Test.main(Test.java:17) 

Bitte erläutern Sie mir, warum dieser Fehler kommt.

+0

'userService' ist null, und nichts wird sie einen Wert zuweisen. Ich nehme an, dass Sie von der '@ Inject'-Annotation * erwartet * haben, etwas zu tun, aber es ist mir nicht klar, dass Sie ein solches Verhalten tatsächlich konfiguriert haben. Ich würde beispielsweise nicht erwarten, dass ein "statisches" Feld injizierbar ist. – dimo414

+0

Ich habe hier statisch verwendet, weil ich aus dem statischen Kontext auf den userService zugreife. Oder der Zweck des Injizierens des UserService besteht nur darin, die Ausgabe von EJB-Bean (UserServiceBean) durch Aufrufen zu erhalten. Meine Frage ist sehr klar. –

+0

Welchen Container benutzen Sie? – HRgiger

Antwort

0

Sie erhalten eine Nullzeigerausnahme, weil userService in der Klasse Test statisch ist. Die Injektion funktioniert nicht für statische Felder. Entfernen Sie das statische Schlüsselwort aus dem Feld userService. definieren es wie

@Inject 
private UserService userService; 

Referenz: https://blogs.oracle.com/chengfang/entry/do_s_and_don_ts

diesen Link finden Sie, wie Sie den Service-Methode aufzurufen: http://www.coderpanda.com/ejb-stateless-session-bean-example/

+0

Nach dem Entfernen des statischen Schlüsselwortes gibt es auch einen NullPointer-Fehler. –

+0

können Sie mir ein Beispiel für mehr Erklärung geben. –

+0

Bitte teilen Sie Ihr gesamtes Stück Code. Sie können Ihre Frage aktualisieren, um den gesamten Code hinzuzufügen. Wenn Sie eine Konfigurationsdatei haben, dann teilen Sie das auch. –

Verwandte Themen