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

Compiler Compliance level creates bad bytecode

Attach filesAttach ScreenshotAdd voteVotersWatch issueWatchersCreate sub-taskLinkCloneUpdate Comment AuthorReplace String in CommentUpdate Comment VisibilityDelete Comments
    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 1.8.3
    • 2.0.0
    • Bean / Property Utils
    • None
    • All

    Description

      There is a problem with bytecode generated with jdk 1.3 compliance settings. The problem is, that public methods of package private classes cannot be accessed using reflection.
      This happens for example with ResultSetDynaClass which extends JDBCDynaClass. Why is this important? Well, because problems occur in case e.g. ResultSetDynaClass.getDynaProperties is accessed through EL.
      The problem is easily solved by re-building beanutils using "1.6" compliance settings.
      This unit test shows the problem. I mocked the creation of ResultSet.

      -) testUsingMethodCall always succeeds
      -) testUsingReflection fails with commons-beanutils-core-1.8.3.jar in classpath. This is the version you get from official downloads or maven repositories!!!!!
      -) testUsingReflection succeeds with commons-beanutils-core-1.8.3_jdk6.jar. I built this jar using mvn package, but changed compliance settings to 1.6 in pom.xml.

      I also provide 2 decompiled (using jad) ResultSetDynaClass.jad_version files. The difference makes the real problem obvious. The public volatile methods exposing the public methods of the package private base class are missing in the byte code created with older compiler compliance settings.

      Bottomline - this problem happens often in case e.g. Tomcat 6 is used to show ResultSetDynaBeans using expression language. Likely these classes are not the only ones affected.

      Actually I'd have a complete unit test, and a eclipse based test project (or if you prefer ant build.xml) easily showing the defect. I simply don't know how to attach the file right now.

      Attachments

        Activity

          This comment will be Viewable by All Users Viewable by All Users
          Cancel

          People

            Unassigned Unassigned
            chrislewold Christian Lewold

            Dates

              Created:
              Updated:

              Time Tracking

                Estimated:
                Original Estimate - 3h
                3h
                Remaining:
                Remaining Estimate - 3h
                3h
                Logged:
                Time Spent - Not Specified
                Not Specified

                Slack

                  Issue deployment