我正在使用 JMX 从远程进程中保存一些诊断信息。查看 jconsole 中的接口显示返回类型是CompositeData(数据实际上以CompositeDataSupport的形式返回)。我想输出与该对象关联的所有键/值对。
问题是接口似乎有一个“values()”方法,无法获取密钥。我在这里错过了什么吗?有没有其他方法可以完成这项任务?
谢谢!
我正在使用 JMX 从远程进程中保存一些诊断信息。查看 jconsole 中的接口显示返回类型是CompositeData(数据实际上以CompositeDataSupport的形式返回)。我想输出与该对象关联的所有键/值对。
问题是接口似乎有一个“values()”方法,无法获取密钥。我在这里错过了什么吗?有没有其他方法可以完成这项任务?
谢谢!
如果我没记错的话你可以做
Set< String > keys = cData.getCompositeType().keySet();
(假设 cData 是 CompositeData 对象)
http://java.sun.com/j2se/1.5.0/docs/api/javax/management/openmbean/CompositeType.html#keySet()
您可以使用这个打印所有 JVM MBean 属性的小程序找到更完整的示例
尤其:
StringBuffer writeCompositeData(StringBuffer buffer,
String prefix, String name, CompositeData data) {
if (data == null)
return writeSimple(buffer,prefix,name,null,true);
writeSimple(buffer,prefix,name,"CompositeData("+
data.getCompositeType().getTypeName()+")",true);
buffer.append(prefix).append("{").append("\n");
final String fieldprefix = prefix + " ";
for (String key : data.getCompositeType().keySet()) {
write(buffer,fieldprefix,name+"."+key,data.get(key));
}
buffer.append(prefix).append("}").append("\n");
return buffer;
}
那个部分:
for (String key : data.getCompositeType().keySet()) {
[...] data.get(key) [...];
}
成为你所追求的。