ClassCastException when InternalUtils.addActionError() casts ActionMessages for
the Global.ERROR_KEY attribute to a sub class, ActionErrors
-------------------------------------------------------------------------------------------------------------------------------------------
Key: BEEHIVE-1059
URL: http://issues.apache.org/jira/browse/BEEHIVE-1059
Project: Beehive
Type: Bug
Components: NetUI
Versions: V1, v.next, 1.0.1
Reporter: Carlin Rogers
Assigned to: Carlin Rogers
Fix For: v.next
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.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira