[jboss-user] [Javassist user questions] - Problem Instrumenting System classes

mansu do-not-reply at jboss.com
Thu Jun 26 11:19:55 EDT 2008


Hi all,

I am trying to instrument java.lang.String class. For starters, I tried using the example code in the javassist manual, but it doesn't seem to work. 

The class that adds a new field to the java.lang.String is as follows:


  | package sample;
  | 
  | import javassist.*;
  | 
  | public class AddFieldToString {
  | 
  |     public int f(int i) {
  |         return i + 1;
  |     }
  | 
  |     public static void main(String[] args) throws Exception {
  |         ClassPool pool = ClassPool.getDefault();
  |         CtClass cc = pool.get("java.lang.String");
  |         cc.addField(new CtField(CtClass.intType, "hiddenValue", cc));
  |         cc.writeFile(".");
  |         }
  | }
  | 

A sample application is as follows:


  | package sample;
  | 
  | public class MyApp {
  |             public static void main(String[] args) throws Exception {
  |                             System.out.println(String.class.getField("hiddenValue").getName());
  |                                 }
  | }
  | 

After compiling and running the above program as shown below, I get a FieldNotFound exception. 


  | ./installs/javassist-3.8.0 % rm -rf ./java ;
  | j                      javac -cp javassist.jar sample/AddFieldToString.java ; 
  |                        java -cp .:javassist.jar sample/AddFieldToString ; 
  |                        javac sample/MyApp.java ; 
  |                        java -Xbootclasspath/p:. sample/MyApp
  | 
  | Exception in thread "main" java.lang.NoSuchFieldException: hiddenValue
  |         at java.lang.Class.getField(Class.java:1507)
  |         at sample.MyApp.main(MyApp.java:5)
  | 

I am sure that the generated code has a something about hidden field, but the decompiler is unable to find it too:


  | ./installs/javassist-3.8.0 % cat java/lang/String.class | grep hiddenValue
  | Binary file (standard input) matches
  | 
  | /installs/javassist-3.8.0 % javap java/lang/String | grep hiddenValue
  |  

Am I missing something obvious? Any pointers would be helpful. Thanks for your time.

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

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4160905



More information about the jboss-user mailing list