Я бы хотел декомпилировать прокси-сервер 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. Спасибо.