cziegeler 02/01/30 02:14:48 Modified: src/java/org/apache/cocoon/sitemap AbstractSitemap.java Log: Applied patch for "Throw actual exception in AbstractSitemap.invokeMethod" PR: #6039 Submitted by: [EMAIL PROTECTED] (Peter Royal) Revision Changes Path 1.4 +23 -5 xml-cocoon2/src/java/org/apache/cocoon/sitemap/AbstractSitemap.java Index: AbstractSitemap.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/sitemap/AbstractSitemap.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- AbstractSitemap.java 15 Jan 2002 07:42:02 -0000 1.3 +++ AbstractSitemap.java 30 Jan 2002 10:14:48 -0000 1.4 @@ -20,6 +20,7 @@ import org.apache.avalon.framework.logger.AbstractLoggable; import org.apache.avalon.framework.thread.ThreadSafe; import org.apache.cocoon.Constants; +import org.apache.cocoon.ProcessingException; import org.apache.cocoon.acting.Action; import org.apache.cocoon.components.CocoonComponentManager; import org.apache.cocoon.components.classloader.RepositoryClassLoader; @@ -37,6 +38,7 @@ import java.io.IOException; import java.io.InputStream; +import java.lang.reflect.InvocationTargetException; import java.net.URL; import java.util.ArrayList; import java.util.List; @@ -47,7 +49,7 @@ * Base class for generated <code>Sitemap</code> classes * * @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a> - * @version CVS $Revision: 1.3 $ $Date: 2002/01/15 07:42:02 $ + * @version CVS $Revision: 1.4 $ $Date: 2002/01/30 10:14:48 $ */ public abstract class AbstractSitemap extends AbstractLoggable implements Sitemap, Disposable, ThreadSafe { private Context context; @@ -368,16 +370,32 @@ * * @exception Exception If an error occurs during method invocation */ - protected boolean invokeMethod(String methodName, Class[] argTypes, Object[] argValues) throws Exception { + protected boolean invokeMethod(String methodName, Class[] argTypes, Object[] argValues) + throws Exception { try { - getLogger().debug("Dynamically invoking " + methodName); + if ( this.getLogger().isDebugEnabled() ) + this.getLogger().debug("Dynamically invoking " + methodName); + java.lang.reflect.Method method = this.getClass().getDeclaredMethod(methodName, argTypes); return ((Boolean)method.invoke(this, argValues)).booleanValue(); } catch (NoSuchMethodException e) { getLogger().error("AbstractSitemap:invokeMethod()", e); int prefix = methodName.indexOf("_"); - throw new Exception("Sitemap: " + methodName.substring(0, prefix) + " '" + - methodName.substring(prefix + 1) + "' not found"); + throw new ProcessingException("Sitemap: " + methodName.substring(0, prefix) + " '" + + methodName.substring(prefix + 1) + "' not found", e); + } catch (InvocationTargetException e) { + final Throwable t = e.getTargetException(); + + if (t == null) { + throw e; + } else if (t instanceof Error) { + throw (Error) t; + } else if (t instanceof Exception) { + throw (Exception) t; + } else { + getLogger().error("Unknown target exception type: " + t.getClass().getName()); + throw e; + } } catch (Exception e) { getLogger().error("AbstractSitemap:invokeMethod()", e); throw e;
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]