You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tapestry.apache.org by "Howard M. Lewis Ship (JIRA)" <ji...@apache.org> on 2014/08/01 20:39:39 UTC
[jira] [Closed] (TAP5-1754) BeanModelSource cannot introspect CGLIB
proxies and anonymous classes
[ https://issues.apache.org/jira/browse/TAP5-1754?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Howard M. Lewis Ship closed TAP5-1754.
--------------------------------------
Resolution: Won't Fix
> 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
> Labels: bulk-close-candidate
>
> 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 was sent by Atlassian JIRA
(v6.2#6252)