On Fri, 24 Jan 2003, Bueno Carlos  M wrote:

> Date: Fri, 24 Jan 2003 16:18:49 -0500
> From: Bueno Carlos  M <[EMAIL PROTECTED]>
> Reply-To: Struts Users Mailing List <[EMAIL PROTECTED]>
> To: "'[EMAIL PROTECTED]'" <[EMAIL PROTECTED]>
> Subject: ActionMapping/ActionConfig cast in RequestProcessor.java
>
> Howdy --
> I have what is I guess a noob question, but I simply can't figure out these
> seemingly important lines of code in RequestProcessor.java:
>
>
> 646        ActionMapping mapping = (ActionMapping)
> 647            moduleConfig.findActionConfig(path);
>
>
> This appears on lines 646-7 in both 1.02 and 1.1. ActionMapping is a
> *subclass* of ActionConfig, so how does this execute without throwing a
> ClassCastException? I can cast an ActionMapping as an ActionConfig but not
> the other way around. Yet, somehow, RequestProcessor seems to be doing just
> that. Below is some sample code to illustrate my question. Can anyone shed
> some light on this? It's too much majic for me.
>

It really is magic ... more so than I normally like to employ, but it was
necessary for backwards compatibility.

In Struts 1.0, the name of the JavaBean that stored stuff from an
<action> element was ActionMapping -- and, this method was passed as an
argument to every Action in the world.

In Struts 1.1, we migrated the configuration objects to a new package
(org.apache.struts.config), and gave them all names consistent with the
element name that they represented (ActionConfig in this case).  However,
it wasn't a good idea to break everyone's existing Actions by changing the
calling sequence, so ActionMapping is now a subclass of ActionConfig.

The secret to making this work is that the objects stored (in
ModuleConfig) for this collection really are ActionMappings and not just
ActionConfigs -- so, when you pull them back out, the cast works.  It also
works for custom user subclasses, as long as the user extends
ActionMapping and not ActionConfig.

>  -- Carlos

Craig



--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to