sylvain 02/03/20 03:00:06 Modified: src/java/org/apache/cocoon/servlet CocoonServlet.java ParanoidClassLoader.java Log: - ParanoidClassLoader is now really paranoid - reflect the move of cocoon.xconf to WEB-INF - make the servlet more robust against missing parameters Revision Changes Path 1.18 +17 -9 xml-cocoon2/src/java/org/apache/cocoon/servlet/CocoonServlet.java Index: CocoonServlet.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/servlet/CocoonServlet.java,v retrieving revision 1.17 retrieving revision 1.18 diff -u -r1.17 -r1.18 --- CocoonServlet.java 17 Mar 2002 18:00:36 -0000 1.17 +++ CocoonServlet.java 20 Mar 2002 11:00:06 -0000 1.18 @@ -118,7 +118,7 @@ * @author <a href="mailto:[EMAIL PROTECTED]">Berin Loritsch</a> * @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a> * @author <a href="mailto:[EMAIL PROTECTED]">Leo Sutic</a> - * @version CVS $Id: CocoonServlet.java,v 1.17 2002/03/17 18:00:36 vgritsenko Exp $ + * @version CVS $Id: CocoonServlet.java,v 1.18 2002/03/20 11:00:06 sylvain Exp $ */ public class CocoonServlet extends HttpServlet { @@ -376,8 +376,9 @@ requestFactoryClass = conf.getInitParameter("request-factory"); if (requestFactoryClass == null) { + requestFactoryClass = "org.apache.cocoon.components.request.MaybeUploadRequestFactoryImpl"; if (log.isDebugEnabled()) { - log.debug("request-factory was not set - defaulting to null."); + log.debug("request-factory was not set - defaulting to " + requestFactoryClass); } } @@ -789,9 +790,9 @@ if (configFileName == null) { if (log.isWarnEnabled()) { - log.warn("Servlet initialization argument 'configurations' not specified, attempting to use '/cocoon.xconf'"); + log.warn("Servlet initialization argument 'configurations' not specified, attempting to use '/WEB-INF/cocoon.xconf'"); } - usedFileName = "/cocoon.xconf"; + usedFileName = "/WEB-INF/cocoon.xconf"; } else { usedFileName = configFileName; } @@ -800,14 +801,21 @@ log.debug("Using configuration file: " + usedFileName); } + URL result; try { - return this.servletContext.getResource(usedFileName); + result = this.servletContext.getResource(usedFileName); } catch (Exception mue) { - if (log.isErrorEnabled()) { - log.error("Servlet initialization argument 'configurations' not found at " + usedFileName, mue); - } - throw new ServletException("Servlet initialization argument 'configurations' not found at " + usedFileName); + String msg = "Init parameter 'configurations' is invalid : " + usedFileName; + log.error(msg, mue); + throw new ServletException(msg, mue); + } + + if (result == null) { + String msg = "Init parameter 'configuration' doesn't name an existing resource : " + usedFileName; + log.error(msg); + throw new ServletException(msg); } + return result; } /** 1.5 +51 -33 xml-cocoon2/src/java/org/apache/cocoon/servlet/ParanoidClassLoader.java Index: ParanoidClassLoader.java =================================================================== RCS file: /home/cvs/xml-cocoon2/src/java/org/apache/cocoon/servlet/ParanoidClassLoader.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- ParanoidClassLoader.java 22 Feb 2002 07:03:55 -0000 1.4 +++ ParanoidClassLoader.java 20 Mar 2002 11:00:06 -0000 1.5 @@ -50,19 +50,22 @@ */ package org.apache.cocoon.servlet; -import java.io.File; import java.io.IOException; +import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; import java.net.URLStreamHandlerFactory; +import java.util.Enumeration; +import java.util.NoSuchElementException; /** * The <code>ParanoidClassLoader</code> reverses the search order for * classes. It checks this classloader before it checks its parent. * * @author <a href="mailto:[EMAIL PROTECTED]">Berin Loritsch</a> - * @version CVS $Id: ParanoidClassLoader.java,v 1.4 2002/02/22 07:03:55 cziegeler Exp $ + * @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a> + * @version CVS $Id: ParanoidClassLoader.java,v 1.5 2002/03/20 11:00:06 sylvain Exp $ */ public class ParanoidClassLoader extends URLClassLoader { @@ -133,39 +136,39 @@ * <code>ClassLoader</code> spec. We use it to work around * inconsistent class loaders from third party vendors. * - * @param name of class - * @throws ClassNotFoundException - */ - public final Class loadClass(final String name) throws ClassNotFoundException { - Class resource = null; - - try { - resource = super.loadClass(name); - } catch (ClassNotFoundException t) { - if (this.parent != null) { - this.parent.loadClass(name); - } else { - throw t; + * @param name the name of the class + * @param resolve if <code>true</code> then resolve the class + * @return the resulting <code>Class</code> object + * @exception ClassNotFoundException if the class could not be found + */ + public final Class loadClass(String name, boolean resolve) + throws ClassNotFoundException + { + // First check if it's already loaded + Class clazz = findLoadedClass(name); + + if (clazz == null) { + + try { + clazz = findClass(name); + } catch (ClassNotFoundException cnfe) { + if (this.parent != null) { + // Ask to parent ClassLoader (can also throw a CNFE). + clazz = this.parent.loadClass(name); + } else { + // Propagate exception + throw cnfe; + } } } - - return resource; - } - - /** - * Adds a new directory of class files. - * - * @param file for jar or directory - * @throws IOException - */ - public final void addDirectory(File file) throws IOException { - try { - this.addURL(file.getCanonicalFile().toURL()); - } catch (MalformedURLException mue) { - throw new IOException("Could not add repository"); + + if (resolve) { + resolveClass(clazz); } + + return clazz; } - + /** * Gets a resource from this <code>ClassLoader</class>. If the * resource does not exist in this one, we check the parent. @@ -176,12 +179,27 @@ * @param name of resource */ public final URL getResource(final String name) { - URL resource = super.getResource(name); - if (this.parent != null && resource == null) { + URL resource = findResource(name); + + if (resource == null && this.parent != null) { resource = this.parent.getResource(name); } return resource; + } + + /** + * Adds a new directory of class files. + * + * @param file for jar or directory + * @throws IOException + */ + public final void addDirectory(File file) throws IOException { + try { + this.addURL(file.getCanonicalFile().toURL()); + } catch (MalformedURLException mue) { + throw new IOException("Could not add repository"); + } } }
---------------------------------------------------------------------- In case of troubles, e-mail: [EMAIL PROTECTED] To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]