Uploaded image for project: 'Commons BeanUtils'
  1. Commons BeanUtils
  2. BEANUTILS-157

Beanutils's describe() method cannot determine reader methods for anonymous class

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Minor
    • Resolution: Fixed
    • 1.6.1
    • 1.8.0
    • Bean / Property Utils
    • None
    • Operating System: Windows XP
      Platform: PC

    • 33461

    Description

      I have the following snippet in a JSP-page which uses BeanUtils 1.6.1 and I get
      an exception.

      Code snippet (the anonymous class is to get a JavaBean defined in the JSP-page):

      List l = new ArrayList();
      for(int i = 1; i < 10; i++) {
      final int i2 = i;
      Object o = new Serializable() {
      String x = "" + i2;
      String y = "" + (100+i2) ;
      public String getX()

      { return x; }

      public String getY()

      { return y; }


      public String toString()

      { return getX() + " " + getY(); }


      };
      l.add(o);
      Map map = BeanUtils.describe(o);

      which gives me the following exception:

      javax.servlet.ServletException: Property 'y' has no getter method
      at
      org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:825)
      at
      org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:758)
      at org.apache.jsp.main_jsp._jspService(main_jsp.java:257)
      at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:94)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
      at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:324)
      at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:292)
      at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:236)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
      at
      org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
      at
      org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
      at
      org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:704)
      at
      org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:474)
      at
      org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:409)
      at
      org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:312)
      at com.transaxiom.axsWHSweb.servlet.GetCurrentStock.doPost(GetCurrentStock.java:31)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
      at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
      at
      org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:237)
      at
      org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:157)
      at
      org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
      at
      org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
      at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
      at
      org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
      at
      org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
      at
      org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
      at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
      at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
      at
      org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
      at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
      at
      org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
      at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
      at
      org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
      at
      org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
      at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
      at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
      at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
      at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
      at
      org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
      at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
      at
      org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
      at java.lang.Thread.run(Thread.java:534)

      for what I can see it is the PropertyDescriptor.getReadMethod0 which does not
      treat WeakReferences correctly. The passed property descriptor looks like:

      this= PropertyDescriptor (id=2658)
      baseName= null
      bound= false
      classRef= WeakReference (id=2662)
      constrained= false
      displayName= null
      expert= false
      hidden= false
      name= "y"
      preferred= false
      propertyEditorClassRef= null
      propertyTypeRef= WeakReference (id=2664)
      readMethodName= "getY"
      readMethodRef= SoftReference (id=2666)
      shortDescription= null
      table= null
      writeMethodName= null
      writeMethodRef= null

      but now it is more complex than I can understand. Any suggestions?

      Attachments

        Issue Links

          Activity

            People

              niallp Niall Pemberton
              ravn Thorbjørn Ravn Andersen
              Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: