Pregunta CompositeData no tiene el método keys ()?


Estoy usando JMX para guardar información de diagnóstico de un proceso remoto. Mirar la interfaz en jconsole muestra que el tipo de retorno es CompositeData (los datos en realidad vuelven como CompositeDataSupport) Quiero dar salida a todos los pares clave / valor que están asociados con este objeto.

El problema es que la interfaz parece tener un método de "valores ()" sin posibilidad de obtener las claves. ¿Me estoy perdiendo de algo? ¿Hay alguna otra forma de abordar esta tarea?

¡Gracias!


5
2017-11-07 04:47


origen


Respuestas:


Si no me equivoco, podrías hacer

Set< String > keys = cData.getCompositeType().keySet();

(Dado que cData es un objeto CompositeData)

http://java.sun.com/j2se/1.5.0/docs/api/javax/management/openmbean/CompositeType.html#keySet ()


8
2017-11-07 06:48



Puedes encontrar un ejemplo más completo con esto Pequeño programa que imprime los atributos de todos los MBV de JVM.

En particular:

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;
    }

La parte:

for (String key : data.getCompositeType().keySet()) {
    [...] data.get(key) [...];
}

siendo lo que buscas


2
2017-11-07 06:58