2011-10-07 17 views
5
public byte[] transform(ClassLoader loader, String className, Class<?> clazz, 
      ProtectionDomain domain, byte[] bytes) 
    throws IllegalClassFormatException { 
     return inspectClass(className, clazz, bytes); 
} 

private byte[] inspectClass(String name, Class<?> clazz, byte[] b) { 
     System.out.println("here"); //OK I see this print 
     ClassPool pool = ClassPool.getDefault(); 
     System.out.println("inclass"); //can't see it !! 
} 

Cosa può succedere in ClassPool.getDefault();?ClassPool.getDefault(); non fa nulla in Javassist

+0

vedi qualche eccezione? –

+0

@ThomasUhrig no :(molto strano diventerò pazzo - quando rimuoverò la stampaLo posso vedere l'eccezione ... – JohnJohnGa

risposta

6

Ho avuto lo stesso problema e ho trovato che ClassPool.getDefault non generava eccezioni, ma Throwable. Infatti, stava lanciando java.lang.NoClassDefFoundError. Nel mio manifesto, ho avuto:

Premain-Class: timing.TimingTransform 
Boot-Class-Path: lib/javassist.jar 

Probabilmente solo bisogno di puntare il Boot-Class-Path al file javassist.jar. Nel mio caso, con il Boot-Class-Path sopra, avevo bisogno di una directory lib con javassist.jar.

L'errore che ho fatto inizialmente stava mettendo javassist.jar all'interno del file jar agente (segue non è corretto, solo a scopo dimostrativo):

 0 Mon Oct 24 16:58:14 MST 2011 META-INF/ 
    146 Mon Oct 24 16:58:14 MST 2011 META-INF/MANIFEST.MF 
    0 Thu Oct 20 14:58:06 MST 2011 timing/ 
    2482 Mon Oct 24 16:58:06 MST 2011 timing/TimingStats.class 
    8360 Mon Oct 24 16:58:06 MST 2011 timing/TimingTransform.class 
    0 Tue Oct 18 17:28:24 MST 2011 lib/ 
645252 Fri Jul 08 18:24:58 MST 2011 lib/javassist.jar 

piuttosto che mettere javassist.jar all'interno del file jar agente , L'ho messo in una directory esterna accessibile al programma. Dopo quel cambiamento, ha funzionato bene.

+0

L'aggiunta dell'opzione del percorso di classe di avvio mi dà ancora lo stesso errore. Aggiungendo questo '-Xbootclasspath/a: javassist -3.20.0-GA.jar 'durante l'esecuzione del vaso ha risolto il problema per me. – codeln

Problemi correlati