2013-08-22 51 views
0

我使用的是最新的JDK 6和Glassfish部署與NetBeans在Mac 3.1.2創建一個Maven Web應用程序3.1.2@EJB和@Inject在Glassfish的3.1.2和Java 6都造成NPE

它包含一個基本的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) at java.lang.reflect.Method.invoke(Method.java:597)

節省墨水的項目在這裏上傳

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

回答

3

讓您的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>"; 
    } 
} 
+0

優秀。爲什麼沒有這個容器就無法注入JAX-RS服務? – DarVar

+1

@DarVar:這是一種解決方法。 JAX-RS沒有與CDI和EJB集成,所以不可能注入。使這個類成爲一個EJB允許你使用注入。我不確定,但似乎JAX-RS 2.0(JavaEE 7 - 實際上只有Glassfish 4)解決了這個問題。 – Alf