[ 
https://issues.apache.org/jira/browse/BEEHIVE-1059?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Russ Baker updated BEEHIVE-1059:
--------------------------------


Verified that Jpf.ExceptionHandler does not throw a ClassCastException when 
using the 'FlowController.addActionError()' method in the implementation of the 
ExceptionHandler. Verified using Carlin's attached repro against SVN 549584. I 
recommend that this bug be closed.

> ClassCastException when InternalUtils.addActionError() casts ActionMessages 
> for the Global.ERROR_KEY attribute to a sub class, ActionErrors
> -------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: BEEHIVE-1059
>                 URL: https://issues.apache.org/jira/browse/BEEHIVE-1059
>             Project: Beehive
>          Issue Type: Bug
>          Components: NetUI
>    Affects Versions: 1.0, 1.0.1, 1.0.2
>            Reporter: Carlin Rogers
>            Assignee: Julie Zhuo
>             Fix For: 1.0.2
>
>         Attachments: j1059-repro.zip
>
>
> The implementaion of InternalUtils.addActionError() casts the 
> org.apache.struts.action.ActionMessages for the Global.ERROR_KEY attribute to 
> a sub class of org.apache.struts.action.ActionErrors. However, in all the 
> other code paths where we set the attribute for Global.ERROR_KEY, we use the 
> parent class, ActionMessages.
> If a user implements @Jpf.ExceptionHandler method in a page flow and then 
> calls FlowController.addActionError(), they will experience this 
> ClassCastException. When an exception is thrown, the DefaultExceptionsHandler 
> will set the attribute for Global.ERROR_KEY with a new instance 
> ActionMessages that includes the ActionMessage with the exception message. 
> Then it invokes the exception handler declared in the annotations of the page 
> flow. When the FlowController.addActionError() is called, the internal code 
> path will call InternalUtils.addActionError() and try to cast the 
> ActionMessages to ActionErrors, giving a stack trace like this...
> 03 Feb 2006 14:55:19,987 ERROR DefaultExceptionsHandler []: Unhandled Page 
> Flow Exception
> Throwable: java.lang.ClassCastException: 
> org.apache.struts.action.ActionMessages
> Stack Trace:
> java.lang.ClassCastException: org.apache.struts.action.ActionMessages
>         at 
> org.apache.beehive.netui.pageflow.internal.InternalUtils.addActionError(InternalUtils.java:415)
>         at 
> org.apache.beehive.netui.pageflow.FlowController.addActionError(FlowController.java:1439)
> ...
> I will add a test to this shortly. To reproduce you really just need an 
> implementation of an exception handler that calls addActionError(). Something 
> like this...
>     @Jpf.ExceptionHandler(
>         forwards = {
>             @Jpf.Forward(
>                 name = "handleError",
>                 path = "index.jsp")
>         })
>     protected Forward bogusExceptionHandler( Controller.BogusException ex,
>                                            String actionName,
>                                            String message, Object form ) {
>         Object[] args = ex.getMessageArgs();
>         addActionError("name", "messageKey_2", args);
>         return new Forward( "handleError" );
>     }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to