package io.ebeaninternal.api;


Helper to find classes taking into account the context class loader.
/** * Helper to find classes taking into account the context class loader. */
public class ClassUtil {
Return a new instance of the class using the default constructor.
/** * Return a new instance of the class using the default constructor. */
public static Object newInstance(String className) { try { Class<?> cls = forName(className); return cls.newInstance(); } catch (Exception e) { String msg = "Error constructing " + className; throw new IllegalArgumentException(msg, e); } }
Load a class taking into account a context class loader (if present).
/** * Load a class taking into account a context class loader (if present). */
public static Class<?> forName(String name) throws ClassNotFoundException { return new ClassLoadContext().forName(name); }
Helper to wrap the context and caller classLoaders (to use/try both).
/** * Helper to wrap the context and caller classLoaders (to use/try both). */
static class ClassLoadContext { private final ClassLoader contextLoader; private final ClassLoader callerLoader; ClassLoadContext() { this.callerLoader = ClassUtil.class.getClassLoader(); this.contextLoader = contextLoader(); } ClassLoader contextLoader() { ClassLoader loader = Thread.currentThread().getContextClassLoader(); return (loader != null) ? loader : callerLoader; } public Class<?> forName(String name) throws ClassNotFoundException { try { return Class.forName(name, true, contextLoader); } catch (ClassNotFoundException e) { if (callerLoader == contextLoader) { throw e; } else { return Class.forName(name, true, callerLoader); } } } } }