in webbeans-impl/src/main/java/org/apache/webbeans/proxy/Unsafe.java [59:135]
public Unsafe()
{
final Class<?> unsafeClass = getUnsafeClass();
this.unsafe = AccessController.doPrivileged((PrivilegedAction<Object>) () -> {
try
{
Field field = unsafeClass.getDeclaredField("theUnsafe");
field.setAccessible(true);
return field.get(null);
}
catch (Exception e)
{
WebBeansLoggerFacade.getLogger(Unsafe.class)
.info("Cannot get sun.misc.Unsafe - will use newInstance() instead!");
return null;
}
});
this.internalUnsafe = AccessController.doPrivileged((PrivilegedAction<Object>) () -> {
try // j11, unwrap unsafe, it owns defineClass now and no more theUnsafe
{
final Field theInternalUnsafe = unsafeClass.getDeclaredField("theInternalUnsafe");
theInternalUnsafe.setAccessible(true);
return theInternalUnsafe.get(null);
}
catch (final Exception notJ11OrMore) {
return unsafe;
}
});
if (unsafe != null)
{
unsafeAllocateInstance = AccessController.doPrivileged((PrivilegedAction<Method>) () -> {
try
{
Method mtd = unsafe.getClass().getDeclaredMethod("allocateInstance", Class.class);
mtd.setAccessible(true);
return mtd;
}
catch (Exception e)
{
return null; // use newInstance()
}
});
try {
final Class<?> rootLoaderClass = Class.forName("java.lang.ClassLoader");
try {
final Method getModule = Class.class.getMethod("getModule");
final Object module = getModule.invoke(rootLoaderClass);
if (module != null)
{
final Method isOpen = module.getClass().getMethod("isOpen", String.class);
if (Boolean.class.cast(isOpen.invoke(module, "sun.misc")))
{
oldStyleSetAccessibleDefineClass(rootLoaderClass);
}
else
{
hackSetDefineClassAccessible();
}
} else
{ // very unlikely since we should fall into unamed module
hackSetDefineClassAccessible();
}
}
catch (final NoSuchMethodException nsme)
{ // pre java 9
oldStyleSetAccessibleDefineClass(rootLoaderClass);
}
}
catch (final Exception e)
{
hackSetDefineClassAccessible();
}
}
}