vaadin / cdi

CDI Integration for Vaadin
Apache License 2.0
41 stars 56 forks source link

NPE injecting EJB in @UIScoped Component #84

Closed vaadin-bot closed 10 years ago

vaadin-bot commented 11 years ago

Originally by @Artur-


Hi,

I have an UI annotated with @CDIUI, into this UI I inject an EJB using @Inject, everything works fine.

Now I create an component annotated with @UIScoped and inject this component into the UI and everything works as expected.

Now I inject the above EJB into the @UIScoped component - the injection of the EJB never happens resulting in an NPE.

Stack trace below.

java.lang.NullPointerException
com.app.vaadin.TrackList.<init>(TrackList.java:33)
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
java.lang.reflect.Constructor.newInstance(Constructor.java:513)
org.jboss.weld.introspector.jlr.WeldConstructorImpl.newInstance(WeldConstructorImpl.java:204)
org.jboss.weld.injection.ConstructorInjectionPoint.newInstance(ConstructorInjectionPoint.java:117)
org.jboss.weld.bean.ManagedBean.createInstance(ManagedBean.java:333)
org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget.produce(ManagedBean.java:200)
org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:289)
com.vaadin.cdi.internal.UIBeanStore.getBeanInstance(UIBeanStore.java:53)
com.vaadin.cdi.internal.UIScopedContext.get(UIScopedContext.java:105)
org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:616)
org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:681)
org.jboss.weld.injection.FieldInjectionPoint.inject(FieldInjectionPoint.java:118)
org.jboss.weld.util.Beans.injectBoundFields(Beans.java:703)
org.jboss.weld.util.Beans.injectFieldsAndInitializers(Beans.java:712)
org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget$1$1.proceed(ManagedBean.java:161)
org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:48)
org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget$1.work(ManagedBean.java:157)
org.jboss.weld.bean.ManagedBean$FixInjectionPoint.run(ManagedBean.java:131)
org.jboss.weld.bean.ManagedBean$ManagedBeanInjectionTarget.inject(ManagedBean.java:153)
org.jboss.weld.bean.ManagedBean.create(ManagedBean.java:290)
com.vaadin.cdi.internal.UIBean.create(UIBean.java:87)
com.vaadin.cdi.internal.UIBeanStore.getBeanInstance(UIBeanStore.java:53)
com.vaadin.cdi.internal.UIScopedContext.get(UIScopedContext.java:105)
org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:616)
org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:643)
com.vaadin.cdi.CDIUIProvider.createInstance(CDIUIProvider.java:64)
com.vaadin.server.communication.UIInitHandler.getBrowserDetailsUI(UIInitHandler.java:200)
com.vaadin.server.communication.UIInitHandler.synchronizedHandleRequest(UIInitHandler.java:73)
com.vaadin.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:37)
com.vaadin.server.VaadinService.handleRequest(VaadinService.java:1329)
com.vaadin.server.VaadinServlet.service(VaadinServlet.java:236)
javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
org.jboss.weld.servlet.ConversationPropagationFilter.doFilter(ConversationPropagationFilter.java:62)

Imported from https://dev.vaadin.com/ issue #12392

vaadin-bot commented 10 years ago

Originally by @Artur-


What is com.app.vaadin.TrackList.<init>(TrackList.java:33) where the problem seems to be? This is user code, not Vaadin CDI code.

vaadin-bot commented 10 years ago

Originally by @hesara


The current beta branch (which has UIScopedContext changes) works for me, also when injecting an EJB to a @UIScoped component injected in a UI. Updating test to also cover this case in #11479.