This is an automated email from the ASF dual-hosted git repository.
bitstorm pushed a commit to branch wicket-10.x
in repository https://gitbox.apache.org/repos/asf/wicket.git
The following commit(s) were added to refs/heads/wicket-10.x by this push:
new fba567e283 WICKET-7204 Don't use INJECTION for ByteBuddy proxy
creation (#1577)
fba567e283 is described below
commit fba567e2832e4df68711e6c05ac85c6241da21ac
Author: Andrea Del Bene <[email protected]>
AuthorDate: Wed Sep 9 09:54:56 2026 +0200
WICKET-7204 Don't use INJECTION for ByteBuddy proxy creation (#1577)
* WICKET-7204 Don't use INJECTION for ByteBuddy proxy creation
* WICKET-7204 logic refactoring
* Update
wicket-ioc/src/main/java/org/apache/wicket/proxy/bytebuddy/ByteBuddyProxyFactory.java
Co-authored-by: Emond Papegaaij <[email protected]>
* Update
wicket-ioc/src/main/java/org/apache/wicket/proxy/bytebuddy/ByteBuddyProxyFactory.java
Co-authored-by: Emond Papegaaij <[email protected]>
* Update
wicket-ioc/src/main/java/org/apache/wicket/proxy/bytebuddy/ByteBuddyProxyFactory.java
Co-authored-by: Emond Papegaaij <[email protected]>
* Update
wicket-ioc/src/main/java/org/apache/wicket/proxy/bytebuddy/ByteBuddyProxyFactory.java
Co-authored-by: Emond Papegaaij <[email protected]>
* revert brackets addition
* Downgrade byte-buddy version to 1.18.8
---------
Co-authored-by: Andrea Del Bene <[email protected]>
Co-authored-by: Emond Papegaaij <[email protected]>
---
.../proxy/bytebuddy/ByteBuddyProxyFactory.java | 31 ++++++++++++++++++++--
1 file changed, 29 insertions(+), 2 deletions(-)
diff --git
a/wicket-ioc/src/main/java/org/apache/wicket/proxy/bytebuddy/ByteBuddyProxyFactory.java
b/wicket-ioc/src/main/java/org/apache/wicket/proxy/bytebuddy/ByteBuddyProxyFactory.java
index 307786d9d4..b372692de1 100644
---
a/wicket-ioc/src/main/java/org/apache/wicket/proxy/bytebuddy/ByteBuddyProxyFactory.java
+++
b/wicket-ioc/src/main/java/org/apache/wicket/proxy/bytebuddy/ByteBuddyProxyFactory.java
@@ -17,6 +17,7 @@
package org.apache.wicket.proxy.bytebuddy;
import java.io.Serializable;
+import java.lang.invoke.MethodHandles;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.function.Function;
@@ -102,6 +103,7 @@ public class ByteBuddyProxyFactory implements IProxyFactory
public static <T> Class<T> createOrGetProxyClass(Class<T> type)
{
ClassLoader classLoader = resolveClassLoader();
+
return (Class<T>) DYNAMIC_CLASS_CACHE.findOrInsert(classLoader,
new TypeCache.SimpleKey(type),
() -> BYTE_BUDDY
@@ -116,8 +118,33 @@ public class ByteBuddyProxyFactory implements IProxyFactory
.implement(InterceptorMutator.class).intercept(FieldAccessor.ofBeanProperty())
.implement(Serializable.class,
IWriteReplace.class,
ILazyInitProxy.class).intercept(MethodDelegation.toField(INTERCEPTOR_FIELD_NAME))
.make()
- .load(classLoader,
ClassLoadingStrategy.Default.INJECTION.allowExistingTypes())
- .getLoaded());
+ .load(classLoader,
resolveLoadingStrategy(type))
+ .getLoaded(),
+ DYNAMIC_CLASS_CACHE);
+ }
+
+ /**
+ * The proxy has to be defined in the same runtime package as the type
it proxies, or the
+ * package private methods it overrides are not overridden at all. Only
a proxy for a
+ * <em>java.**</em> type is renamed into another package, and needs a
class loader of its own.
+ */
+ private static ClassLoadingStrategy<ClassLoader>
resolveLoadingStrategy(Class<?> type)
+ {
+ if (type.getName().startsWith("java."))
+ {
+ return
ClassLoadingStrategy.Default.WRAPPER.allowExistingTypes();
+ }
+
+ try
+ {
+ return ClassLoadingStrategy.UsingLookup
+ .of(MethodHandles.privateLookupIn(type,
MethodHandles.lookup()));
+ }
+ catch (IllegalAccessException e)
+ {
+ throw new WicketRuntimeException("Cannot create a proxy
for " + type.getName()
+ + ", because its package is not open to " +
ByteBuddyProxyFactory.class.getModule(), e);
+ }
}
private static ClassLoader resolveClassLoader()