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()

Reply via email to