записать байт-код прокси-сервера javassist в файл .class? - PullRequest
0 голосов
/ 30 марта 2012

Я бы хотел декомпилировать прокси-сервер javassist, чтобы понять, что на самом деле делает ProxyFactory.makeForwarder. Я вижу, что можно записать байт-код класса в OutputStream из CtClass, но не могу понять, как создать CtClass, если он начинается с ProxyFactory.createClass () - имитируя то, как Hibernate использует javassist. Вот что я попробовал:

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();
}

и вот результат.

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

Тестовый класс и класс продукта находятся в одном пакете (javassist.jassist_163), fwiw. Спасибо.

1 Ответ

1 голос
/ 30 марта 2012

Я должен был быть более терпеливым: настройка ProxyFactory.writeDirectory делает свое дело

...