从web获取运行时类信息?类似于javap,但在运行时加载到内存中的类
我正在处理Websphere和复杂的类加载问题。我希望能够下载或打印通常由javap打印的信息(方法等) 我可能还需要获取原始二进制类数据,以执行二进制差异从web获取运行时类信息?类似于javap,但在运行时加载到内存中的类,java,dynamic,javap,Java,Dynamic,Javap,我正在处理Websphere和复杂的类加载问题。我希望能够下载或打印通常由javap打印的信息(方法等) 我可能还需要获取原始二进制类数据,以执行二进制差异 您将如何做到这一点?您可以编写一个Servlet或JMX MBean,向您的客户机公开该类 Servlet: String resourceParameter = ...; OutputStream out = ...: InputStream input = Thread.currentThread().getContextClassLo
您将如何做到这一点?您可以编写一个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->your/ClassName.class。
然后可以保存文件并使用javap
(我认为MBean必须将您的类文件编码为字符串(例如Base 64),因为字节[]不受支持。但我不确定这一点。其余的都一样。)
如果将在生产环境中部署该类,则应配置某种形式的身份验证。您可以编写一个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->your/ClassName.class。
然后可以保存文件并使用javap
(我认为MBean必须将您的类文件编码为字符串(例如Base 64),因为字节[]不受支持。但我不确定这一点。其余的都一样。)
如果将在生产环境中部署,则应配置某种形式的身份验证。有一些内置的类加载器诊断,可以通过控制台访问。它们有用吗?反射API(obj.getClass().getDeclaredMethods()和friends)应该能够为您提供所需的大部分内容。有一些内置的类加载器诊断,可以通过控制台访问。它们有用吗?反射API(obj.getClass().getDeclaredMethods()和friends)应该能够满足您的大部分需求。