2016-11-28 72 views
1

我從我的測試class.In測試類我使用static關鍵字在這裏userService的前面,因爲我是從訪問靜態上下文的userService打電話給我的EJB bean爲什麼Ejb接口拋出NullPointerException?

注(從主要方法。):另外如果我不使用userService前面的靜態關鍵字,那麼我也得到了同樣的錯誤。

public class Test { 

    @Inject 
    private static UserService userService; 

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

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

} 

我設置的EJB 3接口/實現這樣看...

UserService(接口)

package business; 

public interface UserService { 

    public String doSomething(); 

} 

UserServiceBean(實現)

@Stateless 
@Local 
public class UserServiceBean implements UserService{ 

    public UserServiceBean() { 
    } 

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

} 

W我打電話doSomething方法 UserServiceBean類使用我的Test類的接口。它給了我這樣的錯誤。

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

請解釋爲什麼會出現此錯誤。

+0

'userService'爲空,並沒有被分配一個值。從'@ Inject'註釋中,我認爲你*期望有這樣做的事情,但是我不清楚你實際上是否配置了這樣的行爲。例如,我不希望「靜態」字段是可注射的。 – dimo414

+0

我在這裏使用靜態,因爲我從靜態上下文訪問userService。或者注入UserService的目的只是通過調用EJB bean(UserServiceBean)來獲取輸出。我的問題很清楚。 –

+0

你正在使用什麼容器? – HRgiger

回答

0

您正在獲取空指針異常,因爲類Test中的userService是靜態的。注入不適用於靜態字段。從字段userService中刪除靜態關鍵字。定義它像

@Inject 
private UserService userService; 

參考:https://blogs.oracle.com/chengfang/entry/do_s_and_don_ts

請參閱此鏈接瞭解如何調用該服務的方法: http://www.coderpanda.com/ejb-stateless-session-bean-example/

+0

刪除靜態關鍵字後,它也給予nullPointer錯誤。 –

+0

你能舉個更多解釋的例子嗎? –

+0

請分享您的整段代碼。您可以更新您的問題以添加完整的代碼。如果你有任何配置文件,那麼也請分享一下。 –

相關問題