Hi,

As agreed on the list, here is a patch to change the "assertions" in
plugins to throw an object subclassing RuntimeException rather than
Error.

File plugins/PluginAssertionError.java can now be deleted.
It has been replaced by PluginAssertionFailure (attached).

I decided not to name the thrown class PluginAssertionException because
this patch actually shows the disadvantage of naming the class by its
inherited type! If you prefer, feel free to
   s/PluginAssertionFailure/PluginAssertionException/
in all relevant files.

Regards,

Simon
/*
 * $Header: /home/cvspublic/jakarta-commons/digester/src/java/org/apache/commons/digester/plugins/PluginAssertionError.java,v 1.3 2003/10/09 21:09:48 rdonkin Exp $
 * $Revision: 1.3 $
 * $Date: 2003/10/09 21:09:48 $
 *
 * ====================================================================
 * 
 * The Apache Software License, Version 1.1
 *
 * Copyright (c) 2001-2003 The Apache Software Foundation.  All rights
 * reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer. 
 *
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *
 * 3. The end-user documentation included with the redistribution,
 *    if any, must include the following acknowledgement:  
 *       "This product includes software developed by the 
 *        Apache Software Foundation (http://www.apache.org/)."
 *    Alternately, this acknowledgement may appear in the software itself,
 *    if and wherever such third-party acknowledgements normally appear.
 *
 * 4. The names "Apache", "The Jakarta Project", "Commons", and "Apache Software
 *    Foundation" must not be used to endorse or promote products derived
 *    from this software without prior written permission. For written 
 *    permission, please contact [EMAIL PROTECTED]
 *
 * 5. Products derived from this software may not be called "Apache",
 *    "Apache" nor may "Apache" appear in their names without prior 
 *    written permission of the Apache Software Foundation.
 *
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 * ====================================================================
 *
 * This software consists of voluntary contributions made by many
 * individuals on behalf of the Apache Software Foundation.  For more
 * information on the Apache Software Foundation, please see
 * <http://www.apache.org/>.
 *
 */ 

package org.apache.commons.digester.plugins;

/**
 * Thrown when a bug is detected in the plugins code.
 * <p>
 * This class is intended to be used in assertion statements, similar to
 * the way that java 1.4's native assertion mechanism is used. However there
 * is a difference: when a java 1.4 assertion fails, an AssertionError
 * is thrown, which is a subclass of Error; here, the PluginAssertionFailure
 * class extends RuntimeException rather than Error.
 * <p>
 * This difference in design is because throwing Error objects is not
 * good in a container-based architecture.
 * <p>
 * Example:
 * <pre>
 *   if (impossibleCondition) {
 *     throw new PluginAssertionFailure(
 *       "internal error: impossible condition is true");
 *   }
 * </pre> 
 * <p>
 * Note that PluginAssertionFailure should <i>not</i> be thrown when user 
 * input is bad, or when code external to the Digester module passes invalid 
 * parameters to a plugins method. It should be used only in checks for 
 * problems which indicate internal bugs within the plugins module.
 *
 * @author Simon Kitching
 */
public class PluginAssertionFailure extends RuntimeException {

    private Throwable cause = null;

    /**
     * @param cause underlying exception that caused this to be thrown
     */
    public PluginAssertionFailure(Throwable cause) {
        this(cause.getMessage());
        this.cause = cause;
    }

    /**
     * @param msg describes the reason this exception is being thrown.
     */
    public PluginAssertionFailure(String msg) {
        super(msg);
    }

    /**
     * @param msg describes the reason this exception is being thrown.
     * @param cause underlying exception that caused this to be thrown
     */
    public PluginAssertionFailure(String msg, Throwable cause) {
        this(msg);
        this.cause = cause;
    }
}
? src/java/org/apache/commons/digester/plugins/PluginAssertionFailure.java
Index: src/java/org/apache/commons/digester/plugins/Declaration.java
===================================================================
RCS file: /home/cvspublic/jakarta-commons/digester/src/java/org/apache/commons/digester/plugins/Declaration.java,v
retrieving revision 1.5
diff -u -r1.5 Declaration.java
--- src/java/org/apache/commons/digester/plugins/Declaration.java	28 Oct 2003 23:31:08 -0000	1.5
+++ src/java/org/apache/commons/digester/plugins/Declaration.java	29 Oct 2003 00:53:55 -0000
@@ -230,7 +230,7 @@
         }
         
         if (initialised_) {
-            throw new PluginAssertionError("Init called multiple times.");
+            throw new PluginAssertionFailure("Init called multiple times.");
         }
 
         if ((pluginClass_ == null) && (pluginClassName_ != null)) {
@@ -301,7 +301,7 @@
         }
         
         if (!initialised_) {
-            throw new PluginAssertionError("Not initialised.");
+            throw new PluginAssertionFailure("Not initialised.");
         }
         
         // load from explicit file
@@ -408,7 +408,7 @@
     throws PluginWrappedException {
         try
         {
-            throw new PluginAssertionError(
+            throw new PluginAssertionFailure(
                 "Load from stream not yet supported.");
         }
         finally {
Index: src/java/org/apache/commons/digester/plugins/PluginCreateRule.java
===================================================================
RCS file: /home/cvspublic/jakarta-commons/digester/src/java/org/apache/commons/digester/plugins/PluginCreateRule.java,v
retrieving revision 1.5
diff -u -r1.5 PluginCreateRule.java
--- src/java/org/apache/commons/digester/plugins/PluginCreateRule.java	28 Oct 2003 23:31:08 -0000	1.5
+++ src/java/org/apache/commons/digester/plugins/PluginCreateRule.java	29 Oct 2003 00:53:55 -0000
@@ -319,7 +319,7 @@
             // ok here we are actually instantiating a new plugin object,
             // and storing its rules into a new Rules object
             if (localRules_ != null) {
-                throw new PluginAssertionError(
+                throw new PluginAssertionFailure(
                     "Begin called when localRules_ is not null.");
             }
                       
Index: src/java/org/apache/commons/digester/plugins/PluginRules.java
===================================================================
RCS file: /home/cvspublic/jakarta-commons/digester/src/java/org/apache/commons/digester/plugins/PluginRules.java,v
retrieving revision 1.4
diff -u -r1.4 PluginRules.java
--- src/java/org/apache/commons/digester/plugins/PluginRules.java	28 Oct 2003 23:31:08 -0000	1.4
+++ src/java/org/apache/commons/digester/plugins/PluginRules.java	29 Oct 2003 00:53:56 -0000
@@ -344,7 +344,7 @@
         boolean debug = log.isDebugEnabled();
 
         if (currPluginCreateRule_ != null) {
-            throw new PluginAssertionError(
+            throw new PluginAssertionFailure(
                 "endPlugin called when currPluginCreateRule_ is not null.");
         }
 
@@ -366,12 +366,12 @@
         boolean debug = log.isDebugEnabled();
 
         if (currPluginCreateRule_ == null) {
-            throw new PluginAssertionError(
+            throw new PluginAssertionFailure(
                 "endPlugin called when currPluginCreateRule_ is null.");
         }
         
         if (currPluginCreateRule_ != pcr) {
-            throw new PluginAssertionError(
+            throw new PluginAssertionFailure(
                 "endPlugin called with unexpected PluginCreateRule_.");
         }
         

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

Reply via email to