2016-06-06 4 views
0

Я пытаюсь внедрить демонстрационную веб-службу, но я борюсь с CDI. Я хочу ввести FooFinder в FooBooker, но вместо этого получаю null (при вызове FooResponse существует исключение NullPointerException, поскольку fooFinder равно null).Java EE NullPointerException с CDI и веб-сервисом

меня есть интерфейс

@RequestScoped 
@Named 
public interface FooFinder { 

    FooResponse getReply(String origin, String destination); 
} 

Реализовано как

@RequestScoped 
@Named 
public class MockedFoo implements FooFinder { 

    @Override 
    public FooResponse getReply(String origin, String destination) { 
     String s = "SuperFoo"; 
     Double d = 123.45; 
    return new FooResponse(origin, destination, s, d); 
    } 
} 

в веб-службы

@WebService 
public class FooBooker { 
    @Inject 
    FooFinder fooFinder; 

    @WebMethod 
    public FooResponse getReply(String origin, String destination) { 
     return fooFinder.getReply(origin, destination); 
    } 

    public static void main(String[] argv) { 
     Object implementor = new FooBooker(); 
     String address = "http://localhost:9000/FooBooker"; 
     Endpoint.publish(address, implementor); 
    } 
} 
+0

аннотировать вебсервис как '' '@ Stateless''', чтобы сделать его EJB компонент, так что он может быть зарегистрирован КДИ как EJB компонент. Кроме того, вы вызываете main, из webservice. Это не то, как веб-службы предназначены для работы. Это должно управляться сервером приложений с контейнерами EJB и CDI. – maress

+0

@maress добавляет '@ Stateless' результаты в _Exception при загрузке приложения: Ошибка развертывания CDI: WELD-001408: Неудовлетворительные зависимости для типа FooFinder с квалификаторами @Default_ 'main()' часть взята из примера кода Idea WebServices. –

+0

Убедитесь, что аннотация '' '@ RequestScoped''' '' javax.enterprise.context.RequestScoped''' не '' '' javax.faces.bean.RequestScoped''' – maress

ответ

0

Оказалось, что возникла проблема с установкой КДИ библиотек. Я использую IntelliJ IDEA, и я включил поддержку CDI в диалоге конфигурации GlassFish.

GlassFish configuration

Инъекции, однако, не работать, пока я не добавил поддержку CDI в конфигурации модулей.

Modules configuration

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