2012-03-14 16 views
6

Quiero agregar un "insertBefore" en un método de una clase básica JDK 5. Por alguna razón, no está funcionando. He aquí un ejemplo del código:¿Es posible instrumentar con clases javassist java core? Clases cargadas por el cargador de clases bootstrap

ClassPool pool = ClassPool.getDefault(); 
CtClass ctClass = pool.get("com.sun.org.apache.xerces.internal.impl.xs.XSMessageFormatter"); 
CtMethod ctMethod = ctClass.getDeclaredMethods()[0]; 
ctMethod.insertBefore("System.out.println(\"WORKED\");"); 
ctClass.toClass(); 

El com.sun.org.apache.xerces.internal.impl.xs.XSMessageFormatter viene incluido con el JDK, que está dentro rt.jar. Después del fragmento anterior, ejecuto un código que fuerza a la clase XSMessageFormatter a ejecutarse, pero mi código insertado nunca se ejecuta. Solo puedo hacer que esto funcione en mis propias clases. Este código se ejecuta como una aplicación independiente simple.

¿Alguna idea?

Respuesta

1

No es buena idea modificar las clases de java core. La forma correcta de usar la API de instrumentación de Java (desde Java 1.5).

Cuestiones relacionadas