svn commit: r2297 - in logback/trunk: logback-classic/src/main/java/ch/qos/logback/classic/util logback-core/src/main/java/ch/qos/logback/core/util

Author: ceki Date: Thu Jun 18 18:10:04 2009 New Revision: 2297 Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/util/ContextInitializer.java logback/trunk/logback-core/src/main/java/ch/qos/logback/core/util/Loader.java logback/trunk/logback-core/src/main/java/ch/qos/logback/core/util/OptionHelper.java Log: Fixing LBCORE-100 Modified: logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/util/ContextInitializer.java ============================================================================== --- logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/util/ContextInitializer.java (original) +++ logback/trunk/logback-classic/src/main/java/ch/qos/logback/classic/util/ContextInitializer.java Thu Jun 18 18:10:04 2009 @@ -80,7 +80,7 @@ } public URL findURLOfDefaultConfigurationFile(boolean updateStatus) { - ClassLoader myClassLoader = this.getClass().getClassLoader(); + ClassLoader myClassLoader = Loader.getClassLoaderOfObject(this); URL url = findConfigFileURLFromSystemProperties(myClassLoader, updateStatus); if (url != null) { return url; Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/util/Loader.java ============================================================================== --- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/util/Loader.java (original) +++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/util/Loader.java Thu Jun 18 18:10:04 2009 @@ -83,7 +83,7 @@ * @return */ public static URL getResourceBySelfClassLoader(String resource) { - return getResource(resource, Loader.class.getClassLoader()); + return getResource(resource, getClassLoaderOfClass(Loader.class)); } // private static URL getResourceByTCL(String resource) { @@ -103,11 +103,41 @@ @SuppressWarnings("unchecked") public static Class loadClass(String clazz, Context context) throws ClassNotFoundException { - ClassLoader cl = context.getClass().getClassLoader(); + ClassLoader cl = getClassLoaderOfObject(context); return cl.loadClass(clazz); } /** + * Get the class loader of the object passed as argument. Return the system + * class loader if appropriate. + * + * @param o + * @return + */ + public static ClassLoader getClassLoaderOfObject(Object o) { + if (o == null) { + throw new NullPointerException("Argument cannot be null"); + } + return getClassLoaderOfClass(o.getClass()); + } + + /** + * Return the class loader which loaded the class passed as argument. Return + * the system class loader if appropriate. + * + * @param clazz + * @return + */ + public static ClassLoader getClassLoaderOfClass(Class clazz) { + ClassLoader cl = clazz.getClassLoader(); + if (cl == null) { + return ClassLoader.getSystemClassLoader(); + } else { + return cl; + } + } + + /** * If running under JDK 1.2 load the specified class using the * <code>Thread</code> <code>contextClassLoader</code> if that fails try * Class.forname. Under JDK 1.1 only Class.forName is used. Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/util/OptionHelper.java ============================================================================== --- logback/trunk/logback-core/src/main/java/ch/qos/logback/core/util/OptionHelper.java (original) +++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/util/OptionHelper.java Thu Jun 18 18:10:04 2009 @@ -9,7 +9,6 @@ */ package ch.qos.logback.core.util; - import java.util.Properties; import ch.qos.logback.core.Context; @@ -22,11 +21,12 @@ public class OptionHelper { public static Object instantiateByClassName(String className, - Class superClass, Context context) throws IncompatibleClassException, DynamicClassLoadingException { - ClassLoader classLoader = context.getClass().getClassLoader(); + Class superClass, Context context) throws IncompatibleClassException, + DynamicClassLoadingException { + ClassLoader classLoader = Loader.getClassLoaderOfObject(context); return instantiateByClassName(className, superClass, classLoader); } - + @SuppressWarnings("unchecked") public static Object instantiateByClassName(String className, Class superClass, ClassLoader classLoader) @@ -74,57 +74,54 @@ final static int DELIM_START_LEN = 2; final static int DELIM_STOP_LEN = 1; final static String _IS_UNDEFINED = "_IS_UNDEFINED"; - + /** * Perform variable substitution in string <code>val</code> from the values * of keys found in context property map, and if that fails, then in the * system properties. * - * <p> - * The variable substitution delimeters are <b>${</b> and <b>}</b>. + * <p> The variable substitution delimeters are <b>${</b> and <b>}</b>. * - * <p> - * For example, if the context property map contains a property "key1" set as - * "value1", then the call + * <p> For example, if the context property map contains a property "key1" set + * as "value1", then the call * * <pre> * String s = OptionConverter.substituteVars("Value of key is ${key1}.", context);</pre> + * * will set the variable <code>s</code> to "Value of key is value1.". * - * <p> - * If no value could be found for the specified key in the context map, then - * the system properties are searched, if that fails, then substitution defaults - * to appending "_IS_UNDEFINED" to the key name. - * - * <p> - * For example, if not the context not the system properties contains no value for the key - * "inexistentKey", then the call + * <p> If no value could be found for the specified key in the context map, + * then the system properties are searched, if that fails, then substitution + * defaults to appending "_IS_UNDEFINED" to the key name. + * + * <p> For example, if not the context not the system properties contains no + * value for the key "inexistentKey", then the call * * <pre> * String s = OptionConverter.subsVars( * "Value of inexistentKey is [${inexistentKey}]", context);</pre> - * will set <code>s</code> to "Value of inexistentKey is [inexistentKey_IS_UNDEFINED]". * - * <p> - * Nevertheless, it is possible to specify a default substitution value using - * the ":-" operator. For example, the call + * will set <code>s</code> to "Value of inexistentKey is + * [inexistentKey_IS_UNDEFINED]". + * + * <p> Nevertheless, it is possible to specify a default substitution value + * using the ":-" operator. For example, the call * * <pre> * String s = OptionConverter.subsVars("Value of key is [${key2:-val2}]", context);</pre> + * * will set <code>s</code> to "Value of key is [val2]" even if the "key2" * property is not set. * - * <p> - * An {@link java.lang.IllegalArgumentException} is thrown if <code>val</code> - * contains a start delimeter "${" which is not balanced by a stop delimeter - * "}". - * </p> - + * <p> An {@link java.lang.IllegalArgumentException} is thrown if + * <code>val</code> contains a start delimeter "${" which is not balanced by + * a stop delimeter "}". </p> + * * * @param val - * The string on which variable substitution is performed. + * The string on which variable substitution is performed. * @throws IllegalArgumentException - * if <code>val</code> is malformed. + * if <code>val</code> is malformed. */ public static String substVars(String val, PropertyContainer pc) { @@ -191,7 +188,7 @@ sbuf.append(recursiveReplacement); } else { // if we could not find a replacement, then signal the error - sbuf.append(key+"_IS_UNDEFINED"); + sbuf.append(key + "_IS_UNDEFINED"); } i = k + DELIM_STOP_LEN; @@ -205,9 +202,9 @@ * {@link SecurityException} is absorbed. * * @param key - * The key to search for. + * The key to search for. * @param def - * The default value to return. + * The default value to return. * @return the string value of the system property, or the default value if * there is no property with that key. */ @@ -224,8 +221,8 @@ * {@link SecurityException} is absorbed. * * @param key - * The key to search for. - + * The key to search for. + * * @return the string value of the system property. */ public static String getSystemProperty(String key) { @@ -235,6 +232,7 @@ return null; } } + /** * Very similar to {@link System#getProperties()} except that the * {@link SecurityException} is absorbed. @@ -248,7 +246,7 @@ return new Properties(); } } - + static public String[] extractDefaultReplacement(String key) { String[] result = new String[2]; result[0] = key; @@ -265,8 +263,7 @@ * <code>value</code> is "false", then <code>true</code> is returned. * Otherwise, <code>default</code> is returned. * - * <p> - * Case of value is unimportant. + * <p> Case of value is unimportant. */ public static boolean toBoolean(String value, boolean dEfault) { if (value == null) {
participants (1)
-
noreply.ceki@qos.ch