我编写了一个简单的java代理来使用javassist库来检测基于java的Web应用程序中的一些活动。
问题是当我将我的代理附加到jp2launcher进程时,我发送了ClassNotFoundException,因为它无法找到javassist.CtBehavior类。
所以我尝试运行一个简单的本地java应用程序,只是为了测试我的代理,看它是否有效,但确实如此。
我尝试运行另一个测试,我只在java控制台上打印“hello”并将我的代理附加到Web应用程序,它确实起作用,只告诉我代理工作。
你们是否有任何想法在连接到Web应用程序时为什么找不到javassist?我已经设置了类路径来指向我磁盘上的javassist.jar。
由于
答案 0 :(得分:1)
我遇到了同样的问题,不得不做大量研究,直到我偶然发现了Javadoc中的解决方案:
pool.insertClassPath(new LoaderClassPath(loader));
您可以添加该类使用的类加载器,这在使用java.lang.instrument.ClassFileTransformer时特别有用。
答案 1 :(得分:0)
您最有可能使用默认function loadCanvas(dataURL) {
var canvas = document.getElementById('canvasArea');
var ctx = canvas.getContext('2d');
var imageObj = new Image();
imageObj.src = dataURL;
imageObj.onload = function() {
ctx.drawImage(this, 0, 0);
};
}
var dataURL = localStorage.getItem(canvasArea);
loadCanvas(dataURL);
。 Javassist通过从类加载器解析每个这样的类的类文件来表示卸载的类。但默认类池确实引用了系统类加载器。然而,Web应用程序由不同的应用程序类加载器执行。因此,您需要将此类加载器附加到ClassPool
,以便能够以在单元测试中观察它的方式使用它。