Я использую 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) [...];
}
быть тем, что вам нужно.