Я пытаюсь внедрить демонстрационную веб-службу, но я борюсь с 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);
}
}
аннотировать вебсервис как '' '@ Stateless''', чтобы сделать его EJB компонент, так что он может быть зарегистрирован КДИ как EJB компонент. Кроме того, вы вызываете main, из webservice. Это не то, как веб-службы предназначены для работы. Это должно управляться сервером приложений с контейнерами EJB и CDI. – maress
@maress добавляет '@ Stateless' результаты в _Exception при загрузке приложения: Ошибка развертывания CDI: WELD-001408: Неудовлетворительные зависимости для типа FooFinder с квалификаторами @Default_ 'main()' часть взята из примера кода Idea WebServices. –
Убедитесь, что аннотация '' '@ RequestScoped''' '' javax.enterprise.context.RequestScoped''' не '' '' javax.faces.bean.RequestScoped''' – maress