[
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.producermetho...@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
_______________________________________________
seam-issues mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/seam-issues