rsitze 2002/12/13 08:48:06 Modified: logging/src/java/org/apache/commons/logging LogFactory.java Log: More doPriv's around ClassLoader.loadClass and Class.forName Revision Changes Path 1.17 +48 -39 jakarta-commons/logging/src/java/org/apache/commons/logging/LogFactory.java Index: LogFactory.java =================================================================== RCS file: /home/cvs/jakarta-commons/logging/src/java/org/apache/commons/logging/LogFactory.java,v retrieving revision 1.16 retrieving revision 1.17 diff -u -r1.16 -r1.17 --- LogFactory.java 12 Dec 2002 20:29:16 -0000 1.16 +++ LogFactory.java 13 Dec 2002 16:48:06 -0000 1.17 @@ -533,46 +533,55 @@ * @exception LogConfigurationException if a suitable instance * cannot be created */ - protected static LogFactory newFactory(String factoryClass, - ClassLoader classLoader) + protected static LogFactory newFactory(final String factoryClass, + final ClassLoader classLoader) throws LogConfigurationException { - - try { - if (classLoader != null) { - try { - // first the given class loader param (thread class loader) - return (LogFactory)classLoader.loadClass(factoryClass).newInstance(); - } catch (ClassNotFoundException ex) { - if (classLoader == LogFactory.class.getClassLoader()) { - // Nothing more to try, onwards. - throw ex; + Object result = AccessController.doPrivileged( + new PrivilegedAction() { + public Object run() { + try { + if (classLoader != null) { + try { + // first the given class loader param (thread class loader) + return classLoader.loadClass(factoryClass).newInstance(); + } catch (ClassNotFoundException ex) { + if (classLoader == LogFactory.class.getClassLoader()) { + // Nothing more to try, onwards. + throw ex; + } + // ignore exception, continue + } catch (NoClassDefFoundError e) { + if (classLoader == LogFactory.class.getClassLoader()) { + // Nothing more to try, onwards. + throw e; + } + // ignore exception, continue + } + } + + /* At this point, either classLoader == null, OR + * classLoader was unable to load factoryClass.. + * try the class loader that loaded this class: + * LogFactory.getClassLoader(). + * + * Notes: + * a) LogFactory.class.getClassLoader() may return 'null' + * if LogFactory is loaded by the bootstrap classloader. + * b) The Java endorsed library mechanism is instead + * Class.forName(factoryClass); + */ + return (LogFactory)Class.forName(factoryClass).newInstance(); + } catch (Exception e) { + return new LogConfigurationException(e); } - // ignore exception, continue - } catch (NoClassDefFoundError e) { - if (classLoader == LogFactory.class.getClassLoader()) { - // Nothing more to try, onwards. - throw e; - } - // ignore exception, continue } - } + }); - /* At this point, either classLoader == null, OR - * classLoader was unable to load factoryClass.. - * try the class loader that loaded this class: - * LogFactory.getClassLoader(). - * - * Notes: - * a) LogFactory.class.getClassLoader() may return 'null' - * if LogFactory is loaded by the bootstrap classloader. - * b) The Java endorsed library mechanism is instead - * Class.forName(factoryClass); - */ - return (LogFactory)Class.forName(factoryClass).newInstance(); - } catch (Exception e) { - throw new LogConfigurationException(e); - } + if (result instanceof LogConfigurationException) + throw (LogConfigurationException)result; + + return (LogFactory)result; } private static InputStream getResourceAsStream(final ClassLoader loader,
-- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>