You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@struts.apache.org by ge...@apache.org on 2005/08/06 10:12:13 UTC
svn commit: r230537 - in /struts/core/trunk/src/share/org/apache/struts:
chain/commands/AbstractExceptionHandler.java config/ActionConfig.java
config/ModuleConfig.java config/impl/ModuleConfigImpl.java
Author: germuska
Date: Sat Aug 6 01:12:10 2005
New Revision: 230537
URL: http://svn.apache.org/viewcvs?rev=230537&view=rev
Log:
Support use of global exception handlers in cases when no ActionConfig has yet been identified, as in with "preprocessing" commands in a custom chain. In the case when
there is no ActionConfig, the AbstractExceptionHandler will now call a new method in ModuleConfig which provides similar logic for finding a globally mapped exception handler
for the given exception class or any of its superclasses.
Modified:
struts/core/trunk/src/share/org/apache/struts/chain/commands/AbstractExceptionHandler.java
struts/core/trunk/src/share/org/apache/struts/config/ActionConfig.java
struts/core/trunk/src/share/org/apache/struts/config/ModuleConfig.java
struts/core/trunk/src/share/org/apache/struts/config/impl/ModuleConfigImpl.java
Modified: struts/core/trunk/src/share/org/apache/struts/chain/commands/AbstractExceptionHandler.java
URL: http://svn.apache.org/viewcvs/struts/core/trunk/src/share/org/apache/struts/chain/commands/AbstractExceptionHandler.java?rev=230537&r1=230536&r2=230537&view=diff
==============================================================================
--- struts/core/trunk/src/share/org/apache/struts/chain/commands/AbstractExceptionHandler.java (original)
+++ struts/core/trunk/src/share/org/apache/struts/chain/commands/AbstractExceptionHandler.java Sat Aug 6 01:12:10 2005
@@ -78,6 +78,9 @@
log.debug("See if actionConfig " + actionConfig + " has an exceptionConfig for " + exception.getClass().getName());
exceptionConfig =
actionConfig.findException(exception.getClass());
+ } else if (moduleConfig != null) {
+ log.debug("No action yet, see if moduleConfig " + moduleConfig + " has an exceptionConfig " + exception.getClass().getName());
+ exceptionConfig = moduleConfig.findException(exception.getClass());
}
// Handle the exception in the configured manner
Modified: struts/core/trunk/src/share/org/apache/struts/config/ActionConfig.java
URL: http://svn.apache.org/viewcvs/struts/core/trunk/src/share/org/apache/struts/config/ActionConfig.java?rev=230537&r1=230536&r2=230537&view=diff
==============================================================================
--- struts/core/trunk/src/share/org/apache/struts/config/ActionConfig.java (original)
+++ struts/core/trunk/src/share/org/apache/struts/config/ActionConfig.java Sat Aug 6 01:12:10 2005
@@ -20,6 +20,8 @@
import org.apache.struts.util.RequestUtils;
import org.apache.commons.beanutils.BeanUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import java.util.ArrayList;
import java.util.HashMap;
@@ -38,6 +40,7 @@
*/
public class ActionConfig extends BaseConfig {
+ private static final Log log = LogFactory.getLog(ActionConfig.class);
// ----------------------------------------------------- Instance Variables
@@ -859,12 +862,14 @@
// Check for a locally defined handler
String name = type.getName();
+ log.debug("findException: look locally for " + name);
config = findExceptionConfig(name);
if (config != null) {
return (config);
}
// Check for a globally defined handler
+ log.debug("findException: look globally for " + name);
config = getModuleConfig().findExceptionConfig(name);
if (config != null) {
return (config);
Modified: struts/core/trunk/src/share/org/apache/struts/config/ModuleConfig.java
URL: http://svn.apache.org/viewcvs/struts/core/trunk/src/share/org/apache/struts/config/ModuleConfig.java?rev=230537&r1=230536&r2=230537&view=diff
==============================================================================
--- struts/core/trunk/src/share/org/apache/struts/config/ModuleConfig.java (original)
+++ struts/core/trunk/src/share/org/apache/struts/config/ModuleConfig.java Sat Aug 6 01:12:10 2005
@@ -192,6 +192,18 @@
ExceptionConfig findExceptionConfig(String type);
/**
+ * Perform a recursive search for an ExceptionConfig registered for this class, or for any
+ * superclass. This should only be used in the case when an <code>ActionConfig</code>
+ * is not available; otherwise, use <code>ActionConfig.findException(Class)</code>
+ * to preserve the search order.
+ *
+ * @param type Exception class name to find a configuration for
+ * @see ActionConfig.findException(Class)
+ */
+ ExceptionConfig findException(Class type);
+
+
+ /**
* Return the exception configurations for this module. If there
* are none, a zero-length array is returned.
*/
Modified: struts/core/trunk/src/share/org/apache/struts/config/impl/ModuleConfigImpl.java
URL: http://svn.apache.org/viewcvs/struts/core/trunk/src/share/org/apache/struts/config/impl/ModuleConfigImpl.java?rev=230537&r1=230536&r2=230537&view=diff
==============================================================================
--- struts/core/trunk/src/share/org/apache/struts/config/impl/ModuleConfigImpl.java (original)
+++ struts/core/trunk/src/share/org/apache/struts/config/impl/ModuleConfigImpl.java Sat Aug 6 01:12:10 2005
@@ -347,6 +347,47 @@
}
+
+ /**
+ * <p>Find and return the <code>ExceptionConfig</code> instance defining
+ * how <code>Exceptions</code> of the specified type should be handled.
+ *
+ * <p>In original Struts usage, this was only available in <code>ActionConfig</code>,
+ * but there are cases when an exception could be thrown before an <code>ActionConfig</code>
+ * has been identified, where global exception handlers may still be pertinent.</p>
+ *
+ * <p>TODO: Look for a way to share this logic with <code>ActionConfig</code>, although
+ * there are subtle differences, and it certainly doesn't seem like it should be done with
+ * inheritance.</p>
+ *
+ * @param type Exception class for which to find a handler
+ * @since Struts 1.3.0
+ */
+ public ExceptionConfig findException(Class type) {
+
+ // Check through the entire superclass hierarchy as needed
+ ExceptionConfig config = null;
+ while (true) {
+
+ // Check for a locally defined handler
+ String name = type.getName();
+ log.debug("findException: look locally for " + name);
+ config = findExceptionConfig(name);
+ if (config != null) {
+ return (config);
+ }
+
+ // Loop again for our superclass (if any)
+ type = type.getSuperclass();
+ if (type == null) {
+ break;
+ }
+
+ }
+ return (null); // No handler has been configured
+
+ }
+
/**
* Return the exception configurations for this module. If there
* are none, a zero-length array is returned.
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@struts.apache.org
For additional commands, e-mail: dev-help@struts.apache.org