You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by "Julian Vassev (Created) (JIRA)" <ji...@apache.org> on 2011/11/19 21:28:51 UTC
[jira] [Created] (TAP5-1754) BeanModelSource cannot introspect
CGLIB proxies and anonymous classes
BeanModelSource cannot introspect CGLIB proxies and anonymous classes
---------------------------------------------------------------------
Key: TAP5-1754
URL: https://issues.apache.org/jira/browse/TAP5-1754
Project: Tapestry 5
Issue Type: Bug
Components: tapestry-core
Affects Versions: 5.2.6
Reporter: Julian Vassev
Priority: Minor
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()) {
invocation.override(0, findFirstNonAnonymousParent(clazz));
}
//spring aop
if (AopUtils.isCglibProxyClass(clazz)) {
invocation.override(0, (clazz.getSuperclass()));
}
invocation.proceed();
}
}
};
receiver.adviseAllMethods(advice);
}
public static Class<?> findFirstNonAnonymousParent(Class<?> clazz) {
while (clazz.isAnonymousClass()) {
clazz = clazz.getSuperclass();
}
return clazz;
}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira