2011-10-07 8 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 !! 
} 

¿Qué puede suceder en ClassPool.getDefault();?ClassPool.getDefault(); no hace nada en Javassist

+0

¿Ha detectado ninguna excepción? –

+0

@ThomasUhrig sin :(muy extraño que se convertirá en una locura - cuando quito la PRINTLN Veo excepción ... – JohnJohnGa

Respuesta

6

que tenían el mismo problema, y ​​se encontró ClassPool.getDefault no estaba lanzando una excepción, pero Throwable. De hecho, estaba lanzando java.lang.NoClassDefFoundError. En mi manifiesto, que tenían:

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

Es probable que sólo tiene que apuntar la Bota-Class-Path al archivo javassist.jar. En mi caso, con Boot-Class-Path arriba, necesitaba un directorio lib con javassist.jar en él.

El error que hice inicialmente estaba poniendo javassist.jar dentro del archivo jar agente (EL siguiente es incorrecto, para fines de demostración solamente):

 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 

en lugar de poner javassist.jar dentro del archivo jar agente , Lo puse en un directorio externo accesible para el programa. Después de ese cambio, funcionó bien.

+0

Añadiendo la opción de inicio de clase destilería de vía me dio el mismo error al agregar este '-Xbootclasspath/a: javassist. -3.20.0-GA.jar 'mientras ejecutaba el jar resolvió el problema para mí. – codeln

Cuestiones relacionadas