从网络获取运行时类信息?类似于 javap 但在运行时加载到内存中的类

发布于 2024-08-04 09:17:51 字数 114 浏览 9 评论 0原文

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

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

你会怎么做?

I am working with Websphere and complicated classloading issues. I want to be able to download or print information that would normally get printed by javap (the methods, etc).

I may also need to get the raw binary class data, to perform a binary diff.

How would you do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

蓝天 2024-08-11 09:17:51

您可以编写一个 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[]。但我不确定这一点。其余的都是一样的。)

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

You could write a Servlet or JMX MBean that exposes the class to the your client.

Servlet:

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

Client:

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

The resource parameter has to be your class file your.ClassName -> your/ClassName.class.
You can then save the file and use javap.

(I think the MBean has to encode your class file into a string (e.g. Base 64) as byte[] is not supported. But I'm not sure about that. The rest would be the same.)

If this will be deployed in production some form of authentication should be configured.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文