2012-03-14 8 views
6

Voglio aggiungere un "insertBefore" su un metodo di una classe JDK 5 core. Per qualche motivo non funziona. Ecco un esempio del codice:È possibile utilizzare uno strumento con classi java javassist core? Classi caricate dal bootloader del 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(); 

Il com.sun.org.apache.xerces.internal.impl.xs.XSMessageFormatter viene fornito in bundle con il JDK, è dentro rt.jar. Dopo il frammento sopra, eseguo del codice che impone l'esecuzione della classe XSMessageFormatter, ma il mio codice inserito non viene mai eseguito. Posso solo farlo funzionare sulle mie classi. Questo codice è in esecuzione come semplice app standalone.

Qualche idea?

risposta

1

È una cattiva idea modificare le classi core Java. Il modo giusto di utilizzare l'API di strumentazione Java (da Java 1.5).

Problemi correlati