[
https://issues.jboss.org/browse/WELD-855?page=com.atlassian.jira.plugin.s...
]
Ove Ranheim edited comment on WELD-855 at 12/16/11 4:18 PM:
------------------------------------------------------------
How about:
{noformat}
public void conversationEndedExceptionHandler(@Handles
CaughtException<NonexistentConversationException> event, Logger log)
{
log.infof("Conversation ended: %s", event.getException().getMessage());
ConversationContext conversationContext =
Container.instance().deploymentManager().instance().select(Context.class).select(HttpConversationContext.class).get();
conversationContext.activate(null);
event.handled();
}
{noformat}
If you need to redirect the user, do something like (requires FacesContext to be injected
on your bean):
{noformat}
private void handleErrorRediredct(FacesContext facesContext) {
facesContext.getApplication().getNavigationHandler().handleNavigation(facesContext, null,
"/error.jsf");
}
{noformat}
The evt.markHandled() will cause other exception "catchers" with a lower
precedence to be called. Try to use only evt.handled() unless it violates your use case
and concern.
If you stick to simply: evt.handled() your faces-config.xml will still apply and your app
should work normally.
I really hope that the Weld team could look into this and fix it once and for all. In
fact, it makes the Weld + Solder (soon DeltaSpike) unusable to web developers. IMHO,
it's a blocker bug for apps doing more than "Hello World!".
The above "fix" does the work though.
was (Author: oranheim):
How about:
{noformat}
public void conversationEndedExceptionHandler(@Handles
CaughtException<NonexistentConversationException> event, Logger log)
{
log.infof("Conversation ended: %s", event.getException().getMessage());
ConversationContext conversationContext =
Container.instance().deploymentManager().instance().select(Context.class).select(HttpConversationContext.class).get();
conversationContext.activate(null);
event.handled();
}
{noformat}
If you need to redirect the user, do something like (requires FacesContext to be injected
on your bean):
{noformat}
private void handleErrorRediredct(FacesContext facesContext) {
facesContext.getApplication().getNavigationHandler().handleNavigation(facesContext, null,
"/error.jsf");
}
{noformat}
The evt.markHandled() will cause other exception "catchers" with a lower
precedence to be called. Try to use only evt.handled() unless it violates your use case
and concern.
If you stick to simple evt.handled() your faces-config.xml will still apply and your app
short work normally.
I really hope that the Weld team could look into this and fix it once and for all. In
fact, it makes the Weld + Solder (soon DeltaSpike) unusable to web developers. IMHO,
it's a blocker bug for apps doing more than "Hello World!".
Error while catching NonexistentConversationException with Seam
Faces/Catch
---------------------------------------------------------------------------
Key: WELD-855
URL:
https://issues.jboss.org/browse/WELD-855
Project: Weld
Issue Type: Bug
Environment: Glassfish 3.1 M2 (b41), weld 1.1 patched with Stuart's WELD-846
patch.
Reporter: Brian Leathem
I have a Faces app, with the exception handler:
void conversationExpired(@Handles CaughtException<NonexistentConversationException>
t) {...}
When I pull up a URL with an invalid cid, I get the stacktrace below.
(copied from SEAMCATCH-46)
Stacktrace:
---------------
java.lang.RuntimeException: Exception invoking method [conversationExpired] on object
[ca.triumf.mis.qms.workrequest.jsf.exception.ExceptionCatchHandler@264d6a2c], using
arguments [org.jboss.seam.exception.control.CaughtException@24758259]
at org.jboss.seam.solder.reflection.Reflections.invokeMethod(Reflections.java:547)
at org.jboss.seam.solder.reflection.Reflections.invokeMethod(Reflections.java:458)
at
org.jboss.seam.solder.reflection.annotated.InjectableMethod.invoke(InjectableMethod.java:189)
at org.jboss.seam.exception.control.HandlerMethodImpl.notify(HandlerMethodImpl.java:189)
at
org.jboss.seam.exception.control.ExceptionHandlerDispatch.executeHandlers(ExceptionHandlerDispatch.java:129)
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:305)
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:299)
at
org.jboss.weld.introspector.jlr.WeldMethodImpl.invokeOnInstance(WeldMethodImpl.java:188)
at
org.jboss.weld.introspector.ForwardingWeldMethod.invokeOnInstance(ForwardingWeldMethod.java:59)
at
org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:198)
at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:270)
at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253)
at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:222)
at org.jboss.weld.manager.BeanManagerImpl.notifyObservers(BeanManagerImpl.java:632)
at org.jboss.weld.manager.BeanManagerImpl.fireEvent(BeanManagerImpl.java:619)
at org.jboss.weld.manager.BeanManagerImpl.fireEvent(BeanManagerImpl.java:613)
at
org.jboss.seam.faces.exception.CatchExceptionHandler.handle(CatchExceptionHandler.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:119)
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:113)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:118)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:409)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1534)
at
org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:787)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:649)
at
org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:483)
at
org.apache.catalina.core.ApplicationDispatcher.doDispatch(ApplicationDispatcher.java:454)
at
org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:350)
at
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:300)
at
org.apache.catalina.authenticator.FormAuthenticator.forwardToLoginPage(FormAuthenticator.java:465)
at
org.apache.catalina.authenticator.FormAuthenticator.authenticate(FormAuthenticator.java:253)
at com.sun.web.security.RealmAdapter.invokeAuthenticateDelegate(RealmAdapter.java:1192)
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:551)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:623)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:595)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:98)
at
com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:91)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:162)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:326)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:227)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:170)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:822)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:719)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1013)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:225)
at
com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.IllegalStateException: Unable to load current conversations from the
associated request, something went badly wrong when associate() was called
at
org.jboss.weld.context.AbstractConversationContext.getCurrentConversation(AbstractConversationContext.java:413)
at
org.jboss.weld.jsf.ConversationAwareViewHandler.getActionURL(ConversationAwareViewHandler.java:91)
at
com.sun.faces.application.view.MultiViewHandler.getRedirectURL(MultiViewHandler.java:381)
at
javax.faces.application.ViewHandlerWrapper.getRedirectURL(ViewHandlerWrapper.java:204)
at
javax.faces.application.ViewHandlerWrapper.getRedirectURL(ViewHandlerWrapper.java:204)
at
org.jboss.weld.jsf.ConversationAwareViewHandler.getRedirectURL(ConversationAwareViewHandler.java:134)
at
com.sun.faces.application.NavigationHandlerImpl.handleNavigation(NavigationHandlerImpl.java:166)
at
org.jboss.seam.faces.event.SeamPreNavigationHandler.handleNavigation(SeamPreNavigationHandler.java:77)
at
ca.triumf.mis.qms.workrequest.jsf.exception.ExceptionCatchHandler.conversationExpired(ExceptionCatchHandler.java:27)
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.seam.solder.reflection.Reflections.invokeMethod(Reflections.java:535)
... 59 more
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.jboss.org/secure/ContactAdministrators!default.jspa
For more information on JIRA, see:
http://www.atlassian.com/software/jira