Details
-
Bug
-
Status: Closed
-
Minor
-
Resolution: Won't Fix
-
5.2.6
-
None
Description
When T5 is trying to create a BeanModel for displaying a row in a <t:grid> it examines the class of (maybe) the first element of the source list.
Sometimes I put CGLIB proxies or Anonymous classes in the source list.
When the class is anonymous, T5 complains about not being able to access the generated class
java.lang.IllegalAccessError: tried to access class pkg.impl.FileSystemArchiveRepository$3$1 from class $PropertyConduit_133bd7cf475
When accessing a CGLIB proxy:
Render queue error in SetupRender[AddDomain:grid.columns]: Failure reading parameter 'model' of component AddDomain:grid: Exception generating conduit for expression 'exposeProxy': Class pkg.impl.DomainImpl does not contain a property (or public field) named 'exposeProxy'
I solved the problem by using T5 AOP (really great feature) but think it should be handled by Tapestry:
@Match("BeanModelSource")
public static void adviseAll(MethodAdviceReceiver receiver) {
MethodAdvice advice = new MethodAdvice() {
@Override
public void advise(Invocation invocation) {
if (invocation.getMethodName().startsWith("create")) {
Class<?> clazz = (Class<?>) invocation.getParameter(0);
if (clazz.isAnonymousClass())
//spring aop
if (AopUtils.isCglibProxyClass(clazz))
invocation.proceed();
}
}
};
receiver.adviseAllMethods(advice);
}
public static Class<?> findFirstNonAnonymousParent(Class<?> clazz) {
while (clazz.isAnonymousClass())
return clazz;
}