Внедрение управляемого компонента в веб-сервис

Я пытаюсь внедрить управляемый компонент в Web-сервис, но введенный компонент всегда пуст. Кто-нибудь знает, почему, и если да, то можете ли вы дать некоторые подсказки или обходной путь?

@WebService(targetNamespace = "http://impl.soap.valueservice.drivelog.com/", endpointInterface = "com.drivelog.valueservice.soap.impl.ValueService", portName = "ValueServiceImplPort", serviceName = "ValueServiceImplService")
public class ValueServiceImpl implements ValueService {

    @Inject
    private ValueServiceFacade valueBean;

...
}

@ManagedBean
public class ValueServiceFacadeImpl implements ValueServiceFacade {
...
}

1 ответ

Решение

Это действительно неловко.

Согласно этому сообщению в блоге ( https://weblogs.java.net/blog/jitu/archive/2010/02/19/jax-ws-cdi-java-ee-6-0) и этому сообщению ( https://blogs.oracle.com/arungupta/entry/totd_124_using_cdi_jpa), это должно работать, но я не могу заставить его работать с использованием TomEE здесь.

Здесь также обсуждается JSR ( https://bugzilla.redhat.com/show_bug.cgi?id=1001610), но я не могу сказать, почему это не работает.

Для TomEE (openEJB) все, что я мог найти, было закрыто много проблем (связанных с https://issues.apache.org/jira/browse/OPENEJB-1592) со страшным комментарием "Все сделано для сертификации", и, возможно, Веб-профиль JEE не должен обеспечивать совместную работу, в то время как Geronimo, который реализует полный профиль EJB, может потребоваться работать с этим.

Также см. Java EE 6 WebService и внедрение CDI.

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

Для TomEE рабочий подход, учитывающий @Inject на веб-ресурсе предоставляет метод, который @Produces объект с этим интерфейсом.

Для вашего примера это может быть небольшой завод:

public class ValueServiceFactory {
    @Produces
    public ValueServiceFacade getValueService() {
        return new ValueServiceFacadeImpl();
    }
}
Другие вопросы по тегам