commons-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Benedikt Ritter (JIRA)" <>
Subject [jira] [Commented] (BEANUTILS-413) Compiler Compliance level creates bad bytecode
Date Sat, 23 Feb 2013 16:22:12 GMT


Benedikt Ritter commented on BEANUTILS-413:

Hello Christian,

changing the compiler level for a commons components requires (ASFAIK) to create a new major
version. We can not simply fix this in 1.8.4. This is, because when release beanutils compiled
against JDK 6 Java 1.3 users can't simply used the new version as a drop in replacement. The
would get a BadVersionNumberInClassError if they do.

So we will have to postpone this issue until after 1.8.4.
> Compiler Compliance level creates bad bytecode
> ----------------------------------------------
>                 Key: BEANUTILS-413
>                 URL:
>             Project: Commons BeanUtils
>          Issue Type: Bug
>          Components: Bean / Property Utils
>    Affects Versions: 1.8.3
>         Environment: All
>            Reporter: Christian Lewold
>             Fix For: 1.8.4
>         Attachments:
>   Original Estimate: 3h
>  Remaining Estimate: 3h
> 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
> 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

This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see:

View raw message