ASM ClassWriter uses application ClassLoader for its getCommonSuperClass check

Issue: SPR-13695
This commit is contained in:
Juergen Hoeller
2015-11-24 17:38:02 +01:00
parent 3aefc96593
commit 20a286b4d6
7 changed files with 187 additions and 24 deletions

View File

@@ -1676,7 +1676,8 @@ public class ClassWriter extends ClassVisitor {
*/
protected String getCommonSuperClass(final String type1, final String type2) {
Class<?> c, d;
ClassLoader classLoader = getClass().getClassLoader();
// SPRING PATCH: PREFER APPLICATION CLASSLOADER
ClassLoader classLoader = getClassLoader();
try {
c = Class.forName(type1.replace('/', '.'), false, classLoader);
d = Class.forName(type2.replace('/', '.'), false, classLoader);
@@ -1699,6 +1700,17 @@ public class ClassWriter extends ClassVisitor {
}
}
// SPRING PATCH: PREFER THREAD CONTEXT CLASSLOADER FOR APPLICATION CLASSES
protected ClassLoader getClassLoader() {
ClassLoader classLoader = null;
try {
classLoader = Thread.currentThread().getContextClassLoader();
} catch (Throwable ex) {
// Cannot access thread context ClassLoader - falling back...
}
return (classLoader != null ? classLoader : getClass().getClassLoader());
}
/**
* Returns the constant pool's hash table item which is equal to the given
* item.