craigmcc 2002/07/23 17:30:24
Modified: src/share/org/apache/struts/action ActionServlet.java
Log:
Add a new servlet initialization parameter "rulesets" for ActionServlet,
that allows you to specify a comma-delimited list of fully qualified class
names of org.apache.commons.digester.RuleSet instances that will be added
to the Digester instance used to process struts-config.xml files for this
web application.
Revision Changes Path
1.116 +46 -6
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.115
retrieving revision 1.116
diff -u -r1.115 -r1.116
--- ActionServlet.java 23 Jul 2002 01:17:02 -0000 1.115
+++ ActionServlet.java 24 Jul 2002 00:30:24 -0000 1.116
@@ -95,6 +95,7 @@
import org.apache.commons.collections.FastHashMap;
import org.apache.commons.digester.Digester;
import org.apache.commons.digester.Rule;
+import org.apache.commons.digester.RuleSet;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.struts.config.ActionConfig;
@@ -195,6 +196,12 @@
* <li><strong>detail</strong> - The debugging detail level for the Digester
* we utilize to process the application module configuration files. Accepts
* values 0 (off) and 1 (least serious) through 6 (most serious). [0]</li>
+ * <li><strong>rulesets</strong> - Comma-delimited list of fully qualified
+ * classnames of additional <code>org.apache.commons.digester.RuleSet</code>
+ * instances that should be added to the <code>Digester</code> that will
+ * be processing <code>struts-config.xml</code> files. By default, only
+ * the <code>RuleSet</code> for the standard configuration elements is
+ * loaded. (Since Struts 1.1)<li>
* <li><strong>validating</strong> - Should we use a validating XML parser to
* process the configuration file (strongly recommended)? [true]</li>
* </ul>
@@ -1046,16 +1053,17 @@
* configure a corresponding ApplicationConfig object (which must be
* pushed on to the evaluation stack before parsing begins).</p>
*
+ * @exception ServletException if a Digester cannot be configured
* @since Struts 1.1
*/
- protected Digester initConfigDigester() {
+ protected Digester initConfigDigester() throws ServletException {
// Do we have an existing instance?
if (configDigester != null) {
return (configDigester);
}
- // Create and return a new Digester instance
+ // Create a new Digester instance with standard capabilities
configDigester = new Digester();
configDigester.setDebug(detail);
configDigester.setNamespaceAware(true);
@@ -1067,6 +1075,38 @@
if (url != null)
configDigester.register(registrations[i], url.toString());
}
+
+ // Add any custom RuleSet instances that have been specified
+ String rulesets = getServletConfig().getInitParameter("rulesets");
+ if (rulesets == null) {
+ rulesets = "";
+ }
+ rulesets = rulesets.trim();
+ String ruleset = null;
+ while (rulesets.length() > 0) {
+ int comma = rulesets.indexOf(",");
+ if (comma < 0) {
+ ruleset = rulesets.trim();
+ rulesets = "";
+ } else {
+ ruleset = rulesets.substring(0, comma).trim();
+ rulesets = rulesets.substring(comma + 1).trim();
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("Configuring custom Digester Ruleset of type " +
+ ruleset);
+ }
+ try {
+ RuleSet instance = (RuleSet)
+ RequestUtils.applicationInstance(ruleset);
+ configDigester.addRuleSet(instance);
+ } catch (Exception e) {
+ log.error("Exception configuring custom Digester RuleSet", e);
+ throw new ServletException(e);
+ }
+ }
+
+ // Return the completely configured Digester instance
return (configDigester);
}
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>