【问题标题】:@EJB and @Inject both causing NPE in Glassfish 3.1.2 and Java 6@EJB 和 @Inject 都导致 Glassfish 3.1.2 和 Java 6 中的 NPE
【发布时间】:2013-08-22 23:08:57
【问题描述】:

我正在使用最新的 JDK 6 和 Glassfish 3.1.2 在 Mac 上部署使用 NetBeans 3.1.2 创建的 Maven WebApp

它包含一个基本的 JAX-RS 服务。我尝试将 SLSB(使用 @EJB)和 CDI 托管 bean(@Inject)注入其中。在这两种情况下,我都命中了 NPE。

严重:RuntimeException 无法映射到响应,重新抛出到 HTTP 容器 java.lang.NullPointerException 在 com.mycompany.common.jee6.glassfish3.webapp.GenericResource.getXml(GenericResource.java:47) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:597)

为了节省墨水,项目上传到这里

https://bitbucket.org/DessieK/jee6-cdi-webapp/src

【问题讨论】:

    标签: glassfish-3 java-ee-6 cdi


    【解决方案1】:

    使您的 JAX-RS 服务成为无状态会话 bean:

    @Path("generic")
    @Stateless // <- It's an EJB
    public class GenericResource {
        @EJB
        NewSessionBean nsb;
    
        @GET
        @Produces("application/xml")
        public String getXml() {
            nsb.helloWorld();
            return "<hello>World</hello>";
        }
    }
    

    【讨论】:

    • 优秀。为什么没有这个容器就不能注入到 JAX-RS 服务中?
    • @DarVar:这是一种解决方法。 JAX-RS 未与 CDI 和 EJB 集成,因此无法进行注入。使类成为 EJB 允许您使用注入。我不确定,但似乎 JAX-RS 2.0(JavaEE 7 - 实际上只有 Glassfish 4)解决了这个问题。
    猜你喜欢
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 2012-09-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多