1.1 --- a/src/jdk/internal/dynalink/support/TypeConverterFactory.java Thu Aug 01 12:23:38 2013 +0200 1.2 +++ b/src/jdk/internal/dynalink/support/TypeConverterFactory.java Wed Aug 07 16:38:44 2013 +0200 1.3 @@ -87,6 +87,8 @@ 1.4 import java.lang.invoke.MethodHandles; 1.5 import java.lang.invoke.MethodType; 1.6 import java.lang.invoke.WrongMethodTypeException; 1.7 +import java.security.AccessController; 1.8 +import java.security.PrivilegedAction; 1.9 import java.util.LinkedList; 1.10 import java.util.List; 1.11 import jdk.internal.dynalink.linker.ConversionComparator; 1.12 @@ -110,7 +112,7 @@ 1.13 private final ClassValue<ClassMap<MethodHandle>> converterMap = new ClassValue<ClassMap<MethodHandle>>() { 1.14 @Override 1.15 protected ClassMap<MethodHandle> computeValue(final Class<?> sourceType) { 1.16 - return new ClassMap<MethodHandle>(sourceType.getClassLoader()) { 1.17 + return new ClassMap<MethodHandle>(getClassLoader(sourceType)) { 1.18 @Override 1.19 protected MethodHandle computeValue(Class<?> targetType) { 1.20 try { 1.21 @@ -128,7 +130,7 @@ 1.22 private final ClassValue<ClassMap<MethodHandle>> converterIdentityMap = new ClassValue<ClassMap<MethodHandle>>() { 1.23 @Override 1.24 protected ClassMap<MethodHandle> computeValue(final Class<?> sourceType) { 1.25 - return new ClassMap<MethodHandle>(sourceType.getClassLoader()) { 1.26 + return new ClassMap<MethodHandle>(getClassLoader(sourceType)) { 1.27 @Override 1.28 protected MethodHandle computeValue(Class<?> targetType) { 1.29 if(!canAutoConvert(sourceType, targetType)) { 1.30 @@ -143,6 +145,15 @@ 1.31 } 1.32 }; 1.33 1.34 + private static final ClassLoader getClassLoader(final Class<?> clazz) { 1.35 + return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() { 1.36 + @Override 1.37 + public ClassLoader run() { 1.38 + return clazz.getClassLoader(); 1.39 + } 1.40 + }); 1.41 + } 1.42 + 1.43 /** 1.44 * Creates a new type converter factory from the available {@link GuardingTypeConverterFactory} instances. 1.45 *