[seam-issues] [JBoss JIRA] Commented: (SEAMFACES-42) IllegalProductException: WELD-000052 Cannot return null from a non-dependent producer method

Brian Leathem (JIRA) jira-events at lists.jboss.org
Mon Jul 26 18:13:33 EDT 2010


    [ https://jira.jboss.org/browse/SEAMFACES-42?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12541117#action_12541117 ] 

Brian Leathem commented on SEAMFACES-42:
----------------------------------------

>From the line in the stack trace:
at org.jboss.seam.faces.environment.SeamExternalContext.encodeRedirectURL(SeamExternalContext.java:43) 

We can see that the SeamExternalContext is trying to use a CDI injected FlashContext.  This comes from the producer method in FlashScopedContext.  But the value pushed from the @Producer method (currentContext) is null until the RESTORE_VIEW phase listener(beforePhase) executes.  It seems as though my ExceptionHandler is external to the JSF lifecycle, or that the currentContext is null for some other reason.

I was able to correct the behaviour by putting the logic found in the beforePhase method into a method annotated @PostConstruct.  That way the currentContext is non-null.  This is probably not the correct solution, as the value returned may be the incorrect context, but it demonstrates that this is indeed the root of the null problem.

Any ideas on how we can properly resolve this?

> IllegalProductException: WELD-000052 Cannot return null from a non-dependent producer method
> --------------------------------------------------------------------------------------------
>
>                 Key: SEAMFACES-42
>                 URL: https://jira.jboss.org/browse/SEAMFACES-42
>             Project: Seam Faces
>          Issue Type: Bug
>          Components: Messages & i18n
>    Affects Versions: 3.0.0.Alpha3
>         Environment: Glassfish 3.0.1, Weld 1.0.1-FINAL, Seam3 Faces 1.0-ALPHA3
>            Reporter: Brian Leathem
>         Attachments: mavenproject.zip
>
>
> I created a Custom Exception handler to trap "NonexistentConversationException" exceptions as per Ed Burns howto: 
> http://weblogs.java.net/blog/edburns/archive/2009/09/03/dealing-gracefully-viewexpiredexception-jsf2
> The exception handler attempts to redirect the faces navigation:
> nav.handleNavigation(fc, null, "/workrequest/index.xhtml");
> This results in the stack trace:
> org.jboss.weld.exceptions.IllegalProductException: WELD-000052 Cannot return null from a non-dependent producer method:  org.jboss.weld.bean.ProducerMethod$1 at 32ac538c
>         at org.jboss.weld.bean.AbstractProducerBean.checkReturnValue(AbstractProducerBean.java:255)
>         at org.jboss.weld.bean.AbstractProducerBean.create(AbstractProducerBean.java:361)
>         at org.jboss.weld.context.AbstractMapContext.get(AbstractMapContext.java:112)
>         at org.jboss.weld.bean.proxy.ClientProxyMethodHandler.getProxiedInstance(ClientProxyMethodHandler.java:143)
>         at org.jboss.weld.bean.proxy.ClientProxyMethodHandler.invoke(ClientProxyMethodHandler.java:100)
>         at org.jboss.weld.util.CleanableMethodHandler.invoke(CleanableMethodHandler.java:43)
>         at org.jboss.seam.faces.context.FlashContext_$$_javassist_785.put(FlashContext_$$_javassist_785.java)
>         at org.jboss.seam.faces.status.MessagesAdapter.flushBeforeNavigate(MessagesAdapter.java:63)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:597)
>         at org.jboss.weld.util.reflection.SecureReflections$13.work(SecureReflections.java:304)
>         at org.jboss.weld.util.reflection.SecureReflectionAccess.run(SecureReflectionAccess.java:54)
>         at org.jboss.weld.util.reflection.SecureReflectionAccess.runAsInvocation(SecureReflectionAccess.java:163)
>         at org.jboss.weld.util.reflection.SecureReflections.invoke(SecureReflections.java:298)
>         at org.jboss.weld.introspector.jlr.WeldMethodImpl.invokeOnInstance(WeldMethodImpl.java:200)
>         at org.jboss.weld.introspector.ForwardingWeldMethod.invokeOnInstance(ForwardingWeldMethod.java:59)
>         at org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:194)
>         at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:241)
>         at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:216)
>         at org.jboss.weld.manager.BeanManagerImpl.notifyObservers(BeanManagerImpl.java:654)
>         at org.jboss.weld.manager.BeanManagerImpl.fireEvent(BeanManagerImpl.java:647)
>         at org.jboss.weld.manager.BeanManagerImpl.fireEvent(BeanManagerImpl.java:641)
>         at org.jboss.seam.faces.event.PreNavigateEventProducer.handleNavigation(PreNavigateEventProducer.java:65)
>         at ca.triumf.mis.qms.workrequest.jsf.exception.NonexistentConversationExceptionHandler.handle(NonexistentConversationExceptionHandler.java:48)
>         at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:119)
>         at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:110)
>         at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
>         at javax.faces.webapp.FacesServlet.service(FacesServlet.java:312)
>         at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
>         at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
>         at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
>         at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
>         at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
>         at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
>         at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
>         at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
>         at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
>         at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
>         at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
>         at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
>         at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
>         at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
>         at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
>         at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
>         at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
>         at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
>         at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
>         at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
>         at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
>         at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
>         at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
>         at java.lang.Thread.run(Thread.java:619)
> It seems as if the seam faces module is trying to put messages in the flash context, and this is causing a weld exception to be thrown.  I hope I'm reading this as a Seam3 Faces error correctly :P
> Thanks as always,
> Brian

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: https://jira.jboss.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the seam-issues mailing list