将Managed Bean注入Webservice

时间:2013-07-08 12:35:19

标签: nullpointerexception tomcat7 managed-bean inject

我正在尝试在Web服务中注入Managed Bean,但注入的Bean总是为null。有人知道为什么,如果可以,你能提供一些提示或解决方法吗?

@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 {
...
}

2 个答案:

答案 0 :(得分:0)

这真是令人尴尬。

根据这篇博文(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 Web Profile无需制作这些工作在一起,而实现完整EJB Profile的Geronimo可能需要使用它。

另请参阅Java EE 6 WebService and CDI injection

所以我无法回答这个问题。同时,我会要求您提供有关您正在使用的容器的更多信息,以便我们为您提供更好的帮助。

答案 1 :(得分:0)

对于TomEE,一种在Web资源中考虑@Inject的有效方法是提供一种@Produces具有该接口的实体的方法。

例如,这可能是小型工厂:

public class ValueServiceFactory {
    @Produces
    public ValueServiceFacade getValueService() {
        return new ValueServiceFacadeImpl();
    }
}