1 package net.argius.stew;
4 import java.security.*;
7 * DynamicLoader provides functions to load Class dynamically.
9 public final class DynamicLoader {
11 private DynamicLoader() {
16 * Loads the Class specified by the name.
20 * @throws DynamicLoadingException
22 public static <T> Class<T> loadClass(String className) throws DynamicLoadingException {
23 return loadClass(className, ClassLoader.getSystemClassLoader());
27 * Loads the Class specified by the name and ClassLoader.
32 * @throws DynamicLoadingException
34 public static <T> Class<T> loadClass(String className, ClassLoader classLoader) throws DynamicLoadingException {
36 @SuppressWarnings("unchecked")
37 Class<T> c = (Class<T>)classLoader.loadClass(className);
39 } catch (Throwable th) {
40 throw new DynamicLoadingException("class loading error", th);
45 * Creates a new instance.
49 * @throws DynamicLoadingException
51 public static <T> T newInstance(String className) throws DynamicLoadingException {
52 // T o = newInstance(className, DynamicLoader.class.getClassLoader());
53 @SuppressWarnings("unchecked")
54 T o = (T)newInstance(className, DynamicLoader.class.getClassLoader());
59 * Creates a new instance.
64 * @throws DynamicLoadingException
66 public static <T> T newInstance(String className, URL... urls) throws DynamicLoadingException {
67 // T o = newInstance(className, getURLClassLoader(urls));
68 @SuppressWarnings("unchecked")
69 T o = (T)newInstance(className, getClassLoader(urls));
74 * Creates a new instance.
79 * @throws DynamicLoadingException
81 public static <T> T newInstance(String className, ClassLoader classLoader) throws DynamicLoadingException {
83 Class<T> c = loadClass(className, classLoader);
84 return c.newInstance();
85 } catch (DynamicLoadingException ex) {
87 } catch (Throwable th) {
88 throw new DynamicLoadingException("load error: " + className, th);
93 * Creates a new instance.
97 * @throws DynamicLoadingException
99 public static <T> T newInstance(Class<T> classObject) throws DynamicLoadingException {
101 return classObject.newInstance();
102 } catch (Throwable th) {
103 throw new DynamicLoadingException("load error: " + classObject, th);
108 * Returns a new URLClassLoader that creates from URL.
112 public static URLClassLoader getClassLoader(URL... urls) {
113 return (URLClassLoader)AccessController.doPrivileged(new GettingURLClassLoaderPrivilegedAction(urls));
116 private static final class GettingURLClassLoaderPrivilegedAction implements PrivilegedAction<Object> {
118 private final URL[] urls;
120 GettingURLClassLoaderPrivilegedAction(URL[] urls) {
125 public Object run() {
126 return new URLClassLoader(urls, ClassLoader.getSystemClassLoader());