2

我正在尝试在 Web 服务中注入托管 Bean,但注入的 Bean 始终为空。有谁知道为什么,如果可以,您能否提供一些提示或解决方法?

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

2 回答 2

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 和 CDI 注入

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

于 2014-01-14T17:36:16.070 回答
0

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

对于您的示例,这可能是小型工厂:

public class ValueServiceFactory {
    @Produces
    public ValueServiceFacade getValueService() {
        return new ValueServiceFacadeImpl();
    }
}
于 2020-01-14T14:52:11.397 回答