2009-09-08 72 views
1

我正在使用Websphere和复杂的类加载问题。我希望能够下载或打印通常由javap打印的信息(方法等)。从网上获取运行时类信息?类似于javap,但在运行时加载到内存中的类

我可能还需要获取原始二进制类数据来执行二进制比较。

你会如何做到这一点?

+1

有一些内置的类加载程序诊断,通过控制台访问。他们有用吗? – djna 2009-09-08 21:42:18

+0

反射API(obj.getClass()。getDeclaredMethods()和朋友)应该能够让你得到大部分你想要的东西。 – jsight 2009-09-08 22:10:02

回答

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 [],但我不确定这一点,其余部分是相同的。)

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

+0

不错,我喜欢它。 – 2009-09-09 13:45:23