--- ./src/org/apache/xml/security/utils/XMLUtils.java.sav 2006-01-17 21:28:09.000000000 -0500 +++ ./src/org/apache/xml/security/utils/XMLUtils.java 2006-01-17 21:30:02.000000000 -0500 @@ -21,6 +21,7 @@ import java.io.IOException; import java.io.OutputStream; +import java.lang.reflect.Method; import java.util.HashSet; import java.util.Iterator; import java.util.Set; @@ -690,4 +691,49 @@ } } } + + /** + * Worker method to load a class. + * Factor out loading classes for future use and JDK differences. + * Copied from javax.xml.*.FactoryFinder + * @param className name of class to load from + * an appropriate classLoader + * @return the class asked for + * @throws ClassNotFoundException + */ + public static Class classForName(String className) + throws ClassNotFoundException { + + ClassLoader classLoader = findClassLoader(); + + if (classLoader == null) { + return Class.forName(className); + } + return classLoader.loadClass(className); + } + + /** + * Worker method to figure out which ClassLoader to use. + * For JDK 1.2 and later use the context ClassLoader. + * Copied from javax.xml.*.FactoryFinder + * @return the appropriate ClassLoader + */ + protected static ClassLoader findClassLoader() { + + Method m = null; + + try { + m = Thread.class.getMethod("getContextClassLoader", new Class[]{}); + } catch (NoSuchMethodException e) { + + // Assume that we are running JDK 1.1, use the current ClassLoader + return XMLUtils.class.getClassLoader(); + } + + try { + return (ClassLoader) m.invoke(Thread.currentThread(), new Object[]{}); + } catch (Exception e) { + throw new RuntimeException(e.toString()); + } + } }