This is an automated email from the ASF dual-hosted git repository.
jlmonteiro pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/openwebbeans.git
The following commit(s) were added to refs/heads/master by this push:
new 925be66 Revert Unsafe logic for defineClass for j8+ to avoid warnings
in j11+ and failures in j17+
925be66 is described below
commit 925be660aa8b10f60fe5705f9f14d0b635dda428
Author: Jean-Louis Monteiro <[email protected]>
AuthorDate: Thu Oct 7 08:53:49 2021 +0200
Revert Unsafe logic for defineClass for j8+ to avoid warnings in j11+ and
failures in j17+
---
.../java/org/apache/webbeans/proxy/Unsafe.java | 42 +++++++++++-----------
1 file changed, 21 insertions(+), 21 deletions(-)
diff --git a/webbeans-impl/src/main/java/org/apache/webbeans/proxy/Unsafe.java
b/webbeans-impl/src/main/java/org/apache/webbeans/proxy/Unsafe.java
index 724002e..68f0433 100644
--- a/webbeans-impl/src/main/java/org/apache/webbeans/proxy/Unsafe.java
+++ b/webbeans-impl/src/main/java/org/apache/webbeans/proxy/Unsafe.java
@@ -102,33 +102,33 @@ public class Unsafe
}
});
- try
+ try // some j>8, since we have unsafe let's use it
{
final Class<?> rootLoaderClass =
Class.forName("java.lang.ClassLoader");
- rootLoaderClass.getDeclaredMethod(
- "defineClass", new Class[] { String.class, byte[].class,
int.class, int.class })
- .setAccessible(true);
- rootLoaderClass.getDeclaredMethod(
- "defineClass", new Class[] {
- String.class, byte[].class, int.class, int.class,
ProtectionDomain.class })
- .setAccessible(true);
+ final Method objectFieldOffset =
unsafe.getClass().getDeclaredMethod("objectFieldOffset", Field.class);
+ final Method putBoolean =
unsafe.getClass().getDeclaredMethod("putBoolean", Object.class, long.class,
boolean.class);
+ objectFieldOffset.setAccessible(true);
+ final long accOffset =
Long.class.cast(objectFieldOffset.invoke(unsafe,
AccessibleObject.class.getDeclaredField("override")));
+ putBoolean.invoke(unsafe,
rootLoaderClass.getDeclaredMethod("defineClass",
+ new Class[]{String.class, byte[].class, int.class,
int.class}),
+ accOffset, true);
+ putBoolean.invoke(unsafe, rootLoaderClass
+ .getDeclaredMethod("defineClass", new
Class[]{String.class, byte[].class,
+ int.class, int.class,
ProtectionDomain.class}),
+ accOffset, true);
}
catch (final Exception e)
{
- try // some j>8, since we have unsafe let's use it
+ try
{
final Class<?> rootLoaderClass =
Class.forName("java.lang.ClassLoader");
- final Method objectFieldOffset =
unsafe.getClass().getDeclaredMethod("objectFieldOffset", Field.class);
- final Method putBoolean =
unsafe.getClass().getDeclaredMethod("putBoolean", Object.class, long.class,
boolean.class);
- objectFieldOffset.setAccessible(true);
- final long accOffset =
Long.class.cast(objectFieldOffset.invoke(unsafe,
AccessibleObject.class.getDeclaredField("override")));
- putBoolean.invoke(unsafe,
rootLoaderClass.getDeclaredMethod("defineClass",
- new Class[]{String.class, byte[].class, int.class,
int.class}),
- accOffset, true);
- putBoolean.invoke(unsafe, rootLoaderClass
- .getDeclaredMethod("defineClass", new
Class[]{String.class, byte[].class,
- int.class, int.class,
ProtectionDomain.class}),
- accOffset, true);
+ rootLoaderClass.getDeclaredMethod(
+ "defineClass", new Class[] { String.class,
byte[].class, int.class, int.class })
+ .setAccessible(true);
+ rootLoaderClass.getDeclaredMethod(
+ "defineClass", new Class[] {
+ String.class, byte[].class, int.class,
int.class, ProtectionDomain.class })
+ .setAccessible(true); // this produces warning from
11+ and fails on 17+
}
catch (final Exception ex)
{
@@ -265,7 +265,7 @@ public class Unsafe
}
break;
default:
- throw new IllegalAccessError("Unknown defineclass impl: "
+ defineClassImpl);
+ throw new IllegalAccessError("Unknown defineClass impl: "
+ defineClassImpl);
}
// CHECKSTYLE:ON