aries-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Daniel Kulp <dk...@apache.org>
Subject Latest JDK and ASM based proxies....
Date Fri, 15 Jun 2012 13:20:27 GMT

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
dkulp@apache.org - http://dankulp.com/blog
Talend Community Coder - http://coders.talend.com

Mime
View raw message