I'm using javassist to add some functionality to a third-party program.

I'm trying to insert some code into the constructor of my target class which 
calls methods elsewhere in the program to set fields in the target class.

An object passed to my target constructor has a private field whose members are 
the members I want to call.  Since the field is private, I can't call the 
members directly.  I'm therefore using standard java reflection to get access 
to the field's methods and to call them.

If I take the original target class source, add the code at the end of the 
constructor and run it works just fine.  However, if I use code insertion
via javassist insert the *same* code at the end of the constructor, I get an 
error:

Java.lang.VerifyError:

   com.companyX.moduleY.MyTargetClass, method  
signature(LcompanyX/moduleY/DataClass;)V Expecting to find integer on stack.

Here's the code I'm inserting:


  | try {
  |   java.lang.reflect.Field  
f=this.dataField.getClass().getDeclaredField("privateData");
  |   f.setAccessible(true);
  |   Object o=f.get(this.dataField);
  |   java.lang.reflect.Method 
meth=o.getClass().getDeclaredMethod("getRSquared",(Class[])null);
  |   meth.setAccessible(true);
  | 
  |   this.rSquare=(Float)meth.invoke(o,(Object[])null); 
  | 
  | } except (Exception e) {
  | }
  | 
  | 

Now, if I comment out the meth.invoke line, it runs just fine, but that defeats 
the point of the whole exercise.  Again, if I insert this code into the 
original class source things work as expected.  I only get the VerifyError when 
the method is inserted via javassist.

So, any suggestions?  Has anyone gotten reflection to work inside inserted code 
to the point where they can call methods via reflection?

Thanks.

View the original post : 
http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4224251#4224251

Reply to the post : 
http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4224251
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to