使用javassist时,Java代理会抛出ClassNotFoundException

时间:2015-06-03 08:52:04

标签: java jvm javaagents java-launcher

我编写了一个简单的java代理来使用javassist库来检测基于java的Web应用程序中的一些活动。

问题是当我将我的代理附加到jp2launcher进程时,我发送了ClassNotFoundException,因为它无法找到javassist.CtBehavior类。

所以我尝试运行一个简单的本地java应用程序,只是为了测试我的代理,看它是否有效,但确实如此。

我尝试运行另一个测试,我只在java控制台上打印“hello”并将我的代理附加到Web应用程序,它确实起作用,只告诉我代理工作。

你们是否有任何想法在连接到Web应用程序时为什么找不到javassist?我已经设置了类路径来指向我磁盘上的javassist.jar。

由于

2 个答案:

答案 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,以便能够以在单元测试中观察它的方式使用它。