svn commit: r1085 - logback/trunk/logback-core/src/main/java/ch/qos/logback/core/util

Author: seb Date: Fri Dec 15 13:54:49 2006 New Revision: 1085 Added: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/util/DynamicClassLoadingException.java Modified: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/util/OptionHelper.java Log: Better behaviour in case of NoClassDefFoundError Added: logback/trunk/logback-core/src/main/java/ch/qos/logback/core/util/DynamicClassLoadingException.java ============================================================================== --- (empty file) +++ logback/trunk/logback-core/src/main/java/ch/qos/logback/core/util/DynamicClassLoadingException.java Fri Dec 15 13:54:49 2006 @@ -0,0 +1,10 @@ +package ch.qos.logback.core.util; + +public class DynamicClassLoadingException extends Exception { + + private static final long serialVersionUID = 4962278449162476114L; + + public DynamicClassLoadingException(String desc, Throwable root ) { + super(desc, root); + } +} 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 Fri Dec 15 13:54:49 2006 @@ -13,7 +13,6 @@ import ch.qos.logback.core.CoreGlobal; - /** * @author Ceki Gulcu */ @@ -21,25 +20,31 @@ @SuppressWarnings("unchecked") public static Object instantiateByClassName(String className, Class superClass) - throws ClassNotFoundException, IncompatibleClassException, - InstantiationException, IllegalAccessException { + throws IncompatibleClassException, DynamicClassLoadingException { + if (className == null) { throw new NullPointerException(); } - - // FIXME This is temporary (really!). - Class classObj = null; + try { - classObj = Class.forName(className); - } catch(ClassNotFoundException e) { - ClassLoader cccl = Thread.currentThread().getContextClassLoader(); - classObj = cccl.loadClass(className); - } - - if (!superClass.isAssignableFrom(classObj)) { - throw new IncompatibleClassException(superClass, classObj); + // FIXME This is temporary (really!). + Class classObj = null; + try { + classObj = Class.forName(className); + } catch (ClassNotFoundException e) { + ClassLoader cccl = Thread.currentThread().getContextClassLoader(); + classObj = cccl.loadClass(className); + } + + if (!superClass.isAssignableFrom(classObj)) { + throw new IncompatibleClassException(superClass, classObj); + } + return classObj.newInstance(); + } catch (IncompatibleClassException ice) { + throw ice; + } catch (Throwable t) { + throw new DynamicClassLoadingException("Failed to instantiate type "+className, t); } - return classObj.newInstance(); } /** @@ -47,28 +52,28 @@ * Then perform variable substitution on the found value. * */ -// public static String findAndSubst(String key, Properties props) { -// String value = props.getProperty(key); -// -// if (value == null) { -// return null; -// } -// -// try { -// return substVars(value, props); -// } catch (IllegalArgumentException e) { -// return value; -// } -// } - + // public static String findAndSubst(String key, Properties props) { + // String value = props.getProperty(key); + // + // if (value == null) { + // return null; + // } + // + // try { + // return substVars(value, props); + // } catch (IllegalArgumentException e) { + // return value; + // } + // } final static String DELIM_START = "${"; final static char DELIM_STOP = '}'; final static int DELIM_START_LEN = 2; final static int DELIM_STOP_LEN = 1; + /** * Perform variable substitution in string <code>val</code> from the values - * of keys found the primary map passed as first parameter, then in the secondary - * map, and last in the system properties. + * of keys found the primary map passed as first parameter, then in the + * secondary map, and last in the system properties. * * <p> * The variable substitution delimeters are <b>${</b> and <b>}</b>. @@ -78,22 +83,24 @@ * "value1", then the call * * <pre> - * String s = OptionConverter.substituteVars("Value of key is ${key1}.", priMap, null); + * String s = OptionConverter.substituteVars("Value of key is ${key1}.", priMap, + * null); * </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, then the secondary map is searches, - * and if that fails, the system properties are searched, if that fails, then - * substitution defaults to the empty string. + * If no value could be found for the specified key, then the secondary map is + * searches, and if that fails, the system properties are searched, if that + * fails, then substitution defaults to the empty string. * * <p> * For example, if system properties contains no value for the key * "inexistentKey", then the call * * <pre> - * String s = OptionConverter - * .subsVars("Value of inexistentKey is [${inexistentKey}]", priMap, null); + * String s = OptionConverter.subsVars( + * "Value of inexistentKey is [${inexistentKey}]", priMap, null); * </pre> * * will set <code>s</code> to "Value of inexistentKey is []". @@ -120,7 +127,8 @@ * @throws IllegalArgumentException * if <code>val</code> is malformed. */ - public static String substVars(String val, Map<String, String> primaryMap, Map<String, String> secondaryMap) { + public static String substVars(String val, Map<String, String> primaryMap, + Map<String, String> secondaryMap) { StringBuffer sbuf = new StringBuffer(); @@ -137,7 +145,7 @@ return val; } else { // add the tail string which contails no variables and return - // the result. + // the result. sbuf.append(val.substring(i, val.length())); return sbuf.toString(); @@ -165,8 +173,8 @@ if (primaryMap != null) { replacement = primaryMap.get(key); } - - if(replacement == null && secondaryMap != null) { + + if (replacement == null && secondaryMap != null) { replacement = secondaryMap.get(key); } @@ -187,7 +195,8 @@ // where the properties are // x1=p1 // x2=${x1} - String recursiveReplacement = substVars(replacement, primaryMap, secondaryMap); + String recursiveReplacement = substVars(replacement, primaryMap, + secondaryMap); sbuf.append(recursiveReplacement); } @@ -212,7 +221,7 @@ try { return System.getProperty(key, def); } catch (Throwable e) { // MS-Java throws - // com.ms.security.SecurityExceptionEx + // com.ms.security.SecurityExceptionEx return def; } } @@ -227,7 +236,7 @@ } return result; } - + /** * If <code>value</code> is "true", then <code>true</code> is returned. If * <code>value</code> is "false", then <code>true</code> is returned.
participants (1)
-
noreply.seb@qos.ch