2016-11-28 2 views
1

Я звоню мой боб EJB из моего тестового класса Test класса я использую статическое ключевое слово перед здесь UserService, потому что я имею доступ к UserService из статического контекстаПочему интерфейс Ejb бросает NullPointerException?

Примечания (от основного метода.): Кроме того, если я donot использует статическое ключевое слово перед 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"); 
    } 

} 

I установка интерфейс 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, используя интерфейс из моего тестового класса. Это дает мне такую ​​ошибку.

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

Вы получаете исключение Null pointer, потому что userService в классе Test является статическим. Инъекция не работает для статических полей. Удалить статическое ключевое слово из поля 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

Пожалуйста, поделитесь всей своей частью кода. Вы можете обновить свой вопрос, чтобы добавить весь код. Если у вас есть файл конфигурации, тогда также сообщайте об этом. –

Смежные вопросы