【问题标题】:Injecting Managed Bean into Webservice将托管 Bean 注入 Web 服务
【发布时间】:2013-07-08 12:35:19
【问题描述】:

我正在尝试在 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 {
...
}

【问题讨论】:

    标签: nullpointerexception tomcat7 managed-bean inject


    【解决方案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 Web Profile 不需要使这些工作一起,而实现完整 EJB 配置文件的 Geronimo 可能需要使用它。

    另请参阅Java EE 6 WebService and CDI injection

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-11
        • 2012-09-20
        相关资源
        最近更新 更多