Glassfish 3 @EJB和@Inject都在Glassfish 3.1.2和Java 6中引起NPE

Glassfish 3 @EJB和@Inject都在Glassfish 3.1.2和Java 6中引起NPE,glassfish-3,java-ee-6,cdi,Glassfish 3,Java Ee 6,Cdi,我正在使用最新的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.glassfi

我正在使用最新的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(本机方法)处 位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)中 位于java.lang.reflect.Method.invoke(Method.java:597)

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


使您的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>";
    }
}
@Path(“通用”)

@无状态//使您的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>";
    }
}
@Path(“通用”)

@无状态//非常好。为什么没有这个,容器就不能注入JAX-RS服务?@DarVar:这是一个解决方法。JAX-RS未与CDI和EJB集成,因此不可能进行注入。使类成为EJB允许您使用注入。我不确定,但似乎JAX-RS2.0(JavaEE7——实际上只有Glassfish 4)解决了这个问题。非常好。为什么没有这个,容器就不能注入JAX-RS服务?@DarVar:这是一个解决方法。JAX-RS未与CDI和EJB集成,因此不可能进行注入。使类成为EJB允许您使用注入。我不确定,但似乎JAX-RS2.0(JavaEE7——实际上只有GlassFish4)解决了这个问题。