The latest JDK updates for 1.6.0_u33 and 1.7.0_u5 contain a much stricter class verifier that refuses to verify the classes we generate for our ASM based proxies. Basically, when we generate the constructor for the proxy, we were trying to bypass all the constructors for the superclasses and calling the equivalent of Object.super(). That is no longer allowed. Per java spec, the constructor MUST call a valid constructor on the immediate superclass. You cannot "skip" parent and such. Plus, it must be VALID to call the constructor.
I've updated trunk to use any non-private no-arg constructor on the superclass. That works for most of the cases. However, we do have a testcase that tests proxying a class with a private no-arg constructor. There is NO WAY we can proxy that now unless someone has a new brilliant idea. We also cannot proxy classes that don't have a no-arg constructor for similar reasons. Anyone have any thoughts? The fix gets a majority of the use cases working again. For the other cases, it DOES fall back to the old method which would allow them to work on the older JDK's, but they will continue to fail on the newer JDK's. I'd like to pull this back into a 0.3.x fix and start a release real soon. This problem breaks a TON of stuff when using the new JDK's and thus a lot of applications will likely break. Getting a fix out quickly is likely a good idea. -- Daniel Kulp [email protected] - http://dankulp.com/blog Talend Community Coder - http://coders.talend.com
