From 0f0cae8d8b9789da793a8ba09575d18a1ac388b2 Mon Sep 17 00:00:00 2001 From: Robert Wenzel Date: Wed, 9 Aug 2017 19:01:06 +0800 Subject: [PATCH] ZK-3762 classloader factory extension --- zcommon/src/org/zkoss/lang/Classes.java | 23 ++++++++++++++++++++-- .../org/zkoss/lang/ContextClassLoaderFactory.java | 8 ++++++++ 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/zcommon/src/org/zkoss/lang/Classes.java b/zcommon/src/org/zkoss/lang/Classes.java index 1ad3e0b3c7..c05f163896 100644 --- a/zcommon/src/org/zkoss/lang/Classes.java +++ b/zcommon/src/org/zkoss/lang/Classes.java @@ -263,7 +263,8 @@ public class Classes { if (cls != null) return cls; - ClassLoader cl = Thread.currentThread().getContextClassLoader(); + + ClassLoader cl = getContextClassLoaderForName(clsName); if (cl != null) try { return Class.forName(clsName, true, cl); @@ -1529,6 +1530,10 @@ public class Classes { public ClassLoader getContextClassLoader(Class reference) { return Thread.currentThread().getContextClassLoader(); } + + public ClassLoader getContextClassLoaderForName(String className) { + return Thread.currentThread().getContextClassLoader(); + } } /** @@ -1544,4 +1549,18 @@ public class Classes { public static ClassLoader getContextClassLoader(Class reference) { return LazyInitializationHolder.instance.getContextClassLoader(reference); } -} \ No newline at end of file + + /** + * Returns the context ClassLoader for the given class name + *

Default: return from the current thread. + *
+ * Or specify the library property of org.zkoss.lang.contextClassLoader.class + * in zk.xml to provide a customized class loader. + *

+ * @param className the class name to be loaded by the returned class loader + * @since 8.5.0 + */ + public static ClassLoader getContextClassLoaderForName(String className) { + return LazyInitializationHolder.instance.getContextClassLoaderForName(className); + } +} diff --git a/zcommon/src/org/zkoss/lang/ContextClassLoaderFactory.java b/zcommon/src/org/zkoss/lang/ContextClassLoaderFactory.java index 1a07d805ff..d6c3e4bbc0 100644 --- a/zcommon/src/org/zkoss/lang/ContextClassLoaderFactory.java +++ b/zcommon/src/org/zkoss/lang/ContextClassLoaderFactory.java @@ -24,4 +24,12 @@ public interface ContextClassLoaderFactory { * @param reference the reference class where it is invoked from. */ public ClassLoader getContextClassLoader(Class reference); + + /** + * Returns the context ClassLoader for a class name. + * @param className + * + * @since 8.5.0 + */ + public ClassLoader getContextClassLoaderForName(String className); } -- 2.14.1.windows.1