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 _______________________________________________ jboss-user mailing list jboss-user@lists.jboss.org https://lists.jboss.org/mailman/listinfo/jboss-user