2012-03-30 9 views
0

Ich möchte einen Javassist-Proxy dekompilieren, um zu verstehen, was ProxyFactory.makeForwarder tatsächlich tut. Ich sehe, dass es möglich ist, Klassencode in einen OutputStream von CtClass zu schreiben, aber nicht herausfinden kann, wie man eine CtClass erstellt, wenn man mit ProxyFactory.createClass() beginnt - imitiert, wie Hibernate javassist verwendet. Hier ist, was ich versucht:Java-Proxy-Bytecode in .class-Datei schreiben?

public void testProxyToDisk() throws Exception { 
    ProxyFactory f = new ProxyFactory(); 
    f.setSuperclass(Product.class); 
    f.setFilter(new MethodFilter() { 
     public boolean isHandled(Method m) { 
      // ignore finalize() 
      return !m.getName().equals("finalize"); 
     } 
    }); 
    Class<?> proxyClass = f.createClass(); 
    ClassPool classPool = ClassPool.getDefault(); 
    ClassLoader classLoader = ProxyFactory.classLoaderProvider.get(f); 
    classPool.appendClassPath(new LoaderClassPath(classLoader)); 
    CtClass ctClass = classPool.get(proxyClass.getName()); //barfs here  
    ctClass.debugWriteFile(); 
} 

und hier ist das Ergebnis.

javassist.NotFoundException: javassist.jassist_163.Product _ _ $$ javassist_0 bei javassist.ClassPool.get (ClassPool.java:450) bei javassist.jassist_163.Find2MethodsPerfTest.testProxyToDisk (Find2MethodsPerfTest.java:36)

Testklasse und Produktklasse befinden sich im selben Paket (javassist.jassist_163), fwiw. Vielen Dank.

Antwort

1

i geduldiger gewesen sein sollte: Einstellung ProxyFactory.writeDirectory funktioniert der Trick

+0

Nach der Einstellung f.writeDirectory = "e:/temp"; habe den gleichen Fehler bekommen. – Sunnyday

+0

Der Fehler ist nicht in der Lage, die Proxy-Klasse zu finden, nicht wo die Klasse geschrieben werden soll. – Sunnyday