Uploaded image for project: 'Tapestry 5'
  1. Tapestry 5
  2. TAP5-1754

BeanModelSource cannot introspect CGLIB proxies and anonymous classes

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Won't Fix
    • 5.2.6
    • None
    • tapestry-core

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

      { 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;
      }

      Attachments

        Activity

          People

            Unassigned Unassigned
            jvassev Julian Vassev
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: