2016-11-28 77 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

请分享您的整段代码。您可以更新您的问题以添加完整的代码。如果你有任何配置文件,那么也请分享一下。 –

相关问题