You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by rs...@apache.org on 2002/12/13 17:48:06 UTC

cvs commit: jakarta-commons/logging/src/java/org/apache/commons/logging LogFactory.java

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:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>