martinc 02/03/03 21:38:24 Modified: conf/share struts-config_1_1.dtd src/share/org/apache/struts/action ActionServlet.java src/share/org/apache/struts/config ApplicationConfig.java ConfigRuleSet.java Log: Extend support for the specification of the class to instantiate for action mappings. The class name may now be specified on a per-module basis, using: <action-mappings type="com.mycompany.MyActionMapping"> Support for the global setting, using the 'mapping' servlet init-param, has also been re-introduced for backward compatibility. PR: 6583 Submitted by: Martin Cooper, Andre Beskrowni Revision Changes Path 1.13 +2 -2 jakarta-struts/conf/share/struts-config_1_1.dtd Index: struts-config_1_1.dtd =================================================================== RCS file: /home/cvs/jakarta-struts/conf/share/struts-config_1_1.dtd,v retrieving revision 1.12 retrieving revision 1.13 diff -u -r1.12 -r1.13 --- struts-config_1_1.dtd 23 Feb 2002 22:54:17 -0000 1.12 +++ struts-config_1_1.dtd 4 Mar 2002 05:38:23 -0000 1.13 @@ -11,7 +11,7 @@ "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd"> - $Id: struts-config_1_1.dtd,v 1.12 2002/02/23 22:54:17 craigmcc Exp $ + $Id: struts-config_1_1.dtd,v 1.13 2002/03/04 05:38:23 martinc Exp $ --> @@ -304,7 +304,7 @@ defined: type Fully qualified Java class name of the ActionMapping - implementation class to be used. DEPRECATED. + implementation class to be used. WARNING: For Struts 1.0, this value is ignored. You can set the default implementation class name with the 1.94 +12 -5 jakarta-struts/src/share/org/apache/struts/action/ActionServlet.java Index: ActionServlet.java =================================================================== RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/action/ActionServlet.java,v retrieving revision 1.93 retrieving revision 1.94 diff -u -r1.93 -r1.94 --- ActionServlet.java 26 Feb 2002 03:38:56 -0000 1.93 +++ ActionServlet.java 4 Mar 2002 05:38:23 -0000 1.94 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/action/ActionServlet.java,v 1.93 2002/02/26 03:38:56 dwinterfeldt Exp $ - * $Revision: 1.93 $ - * $Date: 2002/02/26 03:38:56 $ + * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/action/ActionServlet.java,v 1.94 2002/03/04 05:38:23 martinc Exp $ + * $Revision: 1.94 $ + * $Date: 2002/03/04 05:38:23 $ * * ==================================================================== * @@ -269,7 +269,7 @@ * * @author Craig R. McClanahan * @author Ted Husted - * @version $Revision: 1.93 $ $Date: 2002/02/26 03:38:56 $ + * @version $Revision: 1.94 $ $Date: 2002/03/04 05:38:23 $ */ public class ActionServlet @@ -756,9 +756,16 @@ // Parse the application configuration for this application ApplicationConfig config = null; InputStream input = null; - String value = null; + String mapping = null; try { config = new ApplicationConfig(prefix, this); + + // Support for application-wide ActionMapping override + mapping = getServletConfig().getInitParameter("mapping"); + if (mapping != null) { + config.setActionMappingClass(mapping); + } + Digester digester = initConfigDigester(); digester.push(config); input = getServletContext().getResourceAsStream(path); 1.11 +20 -4 jakarta-struts/src/share/org/apache/struts/config/ApplicationConfig.java Index: ApplicationConfig.java =================================================================== RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/config/ApplicationConfig.java,v retrieving revision 1.10 retrieving revision 1.11 diff -u -r1.10 -r1.11 --- ApplicationConfig.java 23 Feb 2002 23:53:29 -0000 1.10 +++ ApplicationConfig.java 4 Mar 2002 05:38:23 -0000 1.11 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/config/ApplicationConfig.java,v 1.10 2002/02/23 23:53:29 craigmcc Exp $ - * $Revision: 1.10 $ - * $Date: 2002/02/23 23:53:29 $ + * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/config/ApplicationConfig.java,v 1.11 2002/03/04 05:38:23 martinc Exp $ + * $Revision: 1.11 $ + * $Date: 2002/03/04 05:38:23 $ * * ==================================================================== * @@ -84,7 +84,7 @@ * previous Struts behavior that only supported one application.</p> * * @author Craig R. McClanahan - * @version $Revision: 1.10 $ $Date: 2002/02/23 23:53:29 $ + * @version $Revision: 1.11 $ $Date: 2002/03/04 05:38:23 $ * @since Struts 1.1 */ @@ -244,6 +244,22 @@ public ActionServlet getServlet() { return (this.servlet); + } + + + /** + * The default class name to be used when creating action mapping + * instances. + */ + protected String actionMappingClass = + "org.apache.struts.action.ActionMapping"; + + public String getActionMappingClass() { + return this.actionMappingClass; + } + + public void setActionMappingClass(String actionMappingClass) { + this.actionMappingClass = actionMappingClass; } 1.9 +65 -8 jakarta-struts/src/share/org/apache/struts/config/ConfigRuleSet.java Index: ConfigRuleSet.java =================================================================== RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/config/ConfigRuleSet.java,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- ConfigRuleSet.java 27 Feb 2002 06:20:59 -0000 1.8 +++ ConfigRuleSet.java 4 Mar 2002 05:38:23 -0000 1.9 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/config/ConfigRuleSet.java,v 1.8 2002/02/27 06:20:59 martinc Exp $ - * $Revision: 1.8 $ - * $Date: 2002/02/27 06:20:59 $ + * $Header: /home/cvs/jakarta-struts/src/share/org/apache/struts/config/ConfigRuleSet.java,v 1.9 2002/03/04 05:38:23 martinc Exp $ + * $Revision: 1.9 $ + * $Date: 2002/03/04 05:38:23 $ * * ==================================================================== * @@ -63,6 +63,7 @@ package org.apache.struts.config; +import org.apache.commons.digester.AbstractObjectCreationFactory; import org.apache.commons.digester.Digester; import org.apache.commons.digester.Rule; import org.apache.commons.digester.RuleSetBase; @@ -74,7 +75,7 @@ * configuration file (<code>struts-config.xml</code>).</p> * * @author Craig R. McClanahan - * @version $Revision: 1.8 $ $Date: 2002/02/27 06:20:59 $ + * @version $Revision: 1.9 $ $Date: 2002/03/04 05:38:23 $ * @since Struts 1.1 */ @@ -112,11 +113,13 @@ ("struts-config/data-sources/data-source/set-property", new AddDataSourcePropertyRule(digester)); - digester.addObjectCreate + digester.addRule + ("struts-config/action-mappings", + new SetActionMappingClassRule(digester)); + + digester.addFactoryCreate ("struts-config/action-mappings/action", - // "org.apache.struts.config.ActionConfig", - "org.apache.struts.action.ActionMapping", - "className"); + new ActionMappingFactory()); digester.addSetProperties ("struts-config/action-mappings/action"); digester.addSetNext @@ -291,3 +294,57 @@ } + +/** + * Class that sets the name of the class to use when creating action mapping + * instances. The value is set on the object on the top of the stack, which + * must be a <code>org.apache.struts.config.ApplicationConfig</code>. + */ +final class SetActionMappingClassRule extends Rule { + + public SetActionMappingClassRule(Digester digester) { + super(digester); + } + + public void begin(Attributes attributes) throws Exception { + String className = attributes.getValue("type"); + if (className != null) { + ApplicationConfig ac = (ApplicationConfig) digester.peek(); + ac.setActionMappingClass(className); + } + } + +} + + +/** + * An object creation factory which creates action mapping instances, taking + * into account the default class name, which may have been specified on the + * parent element and which is made available through the object on the top + * of the stack, which must be a + * <code>org.apache.struts.config.ApplicationConfig</code>. + */ +final class ActionMappingFactory extends AbstractObjectCreationFactory { + + public Object createObject(Attributes attributes) { + + // Identify the name of the class to instantiate + String className = attributes.getValue("className"); + if (className == null) { + ApplicationConfig ac = (ApplicationConfig) digester.peek(); + className = ac.getActionMappingClass(); + } + + // Instantiate the new object and return it + Object actionMapping = null; + try { + Class clazz = digester.getClassLoader().loadClass(className); + actionMapping = clazz.newInstance(); + } catch (Exception e) { + digester.log("ActionMappingFactory.createObject: ", e); + } + + return actionMapping; + } + +}
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>