从Web获取运行时类信息?像javap这样的东西,但在运行时在内存中加载的类

时间:2009-09-08 21:34:15

标签: java dynamic javap

我正在使用Websphere和复杂的类加载问题。我希望能够下载或打印通常由javap打印的信息(方法等)。

我可能还需要获取原始二进制类数据,以执行二进制差异。

你会怎么做?

1 个答案:

答案 0 :(得分:1)

您可以编写一个Servlet或JMX MBean,将该类公开给您的客户端。

的Servlet

String resourceParameter = ...;
OutputStream out = ...:
InputStream input = Thread.currentThread().getContextClassLoader()
   .getResourceAsStream(resourceParameter)
write(input, out);

客户端:

GET http://host/DiagnosticServlet?resource=your/ClassName.class

资源参数必须是您的类文件 your.ClassName - >你/ ClassName.class。 然后,您可以保存文件并使用javap。

(我认为MBean必须将您的类文件编码为字符串(例如Base 64),因为不支持byte []。但我不确定。其余的将是相同的。)

如果要在生产中部署,则应配置某种形式的身份验证。