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

ClassPool.getDefault(); Javassistで何もしませんで何が起こる可能性がありますか?

+0

例外はありますか? –

+0

@ThomasUhrigいいえ:(非常に奇妙なことに私は狂ってしまいます。私がprintLnを取り除くと、例外を見ることができます... – JohnJohnGa

答えて

6

私は同じ問題を抱えていて、ClassPool.getDefaultが例外をスローしていないことがわかりましたが、Throwableです。 実際、java.lang.NoClassDefFoundErrorを投げていました。私のマニフェストで は、私が持っていた:

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

あなたは可能性が高いだけでjavassist.jarファイルにブートクラスパスを指すようにする必要があります。 私の場合、上記のBoot-Class-Pathで、javassist.jarを含むlibディレクトリが必要でした。

私が最初にエージェントjarファイル (以下では、デモンストレーションのみを目的として、誤っている)内javassist.jar入れていたのミス:むしろエージェントjarファイル内javassist.jar置くより

 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 

私はプログラムにアクセス可能な外部ディレクトリに配置しました。その変更後、正常に動作しました。

+0

boot-class-pathオプションを追加すると、私は同じエラーを返しました。この '-Xbootclasspath/a:javassist -3.20.0-GA.jar 'を実行している間に問題を解決しました。 – codeln

関連する問題