Mit Hilfe von Reflections auf die Werte (!) einer Methode zugreifen

Hallo!

Ich bräuchte ein wenig Hilfe bei der Verwendung von Reflections in Java. Wie kann ich folgende Methode erweitern um nicht nur die Namen von den Klassen sondern auch die Werte der Variablen zu bekommen?

Es handelt sich hierbei um ein XML-Dokument, welches mit JAXB in eine Objektstruktur umgewandelt wurde. Und in diesem Sinne möchte ich die Werte der Attribute haben (d.h. in folgendem Beispiel den Wert von beruf --> „angestellter“).

Im XML:

  
      Hans
  

Die Methode, um auf alle Felder/Klassen zuzugreifen bzw. sie zu durchlaufen:

            ObjectFactory oF = new ObjectFactory();
            Method[] methods = oF.getClass().getDeclaredMethods();
            
            for (Method method : methods)
            {
                try
                {
                    //Check if method has a XML annotation
                    XmlElementDecl annotation = method.getAnnotation(XmlElementDecl.class);
                    if (annotation == null)
                    {
                        Object object = method.invoke(oF,  new Object[] {});
                        System.out.println("Class name = " + object.getClass().getName());
                        //or
                        System.out.println("Class SIMPLE = " + object.getClass().getSimpleName());
                    }
                }
             }

Vielen Dank im Voraus!  :smile:

LG,
EV*A

Hallo,

Ich bräuchte ein wenig Hilfe bei der Verwendung von
Reflections in Java. Wie kann ich folgende Methode erweitern
um nicht nur die Namen von den Klassen sondern auch die Werte
der Variablen zu bekommen?

Ich war zu faul um das mit JAXB zu testen, aber clazz.getDeclaredFields() liefert die Liste der Felder, auf (nicht private) Feldinhalte kann man mit Hilfe von Field.get(Object o) zugreifen: http://docs.oracle.com/javase/7/docs/api/java/lang/r…

Kleines Beispiel:

import java.lang.reflect.\*;

public class RefTest {

 public static void main(String[] args) throws IllegalAccessException {

 Object obj = new MyClass("string 1", "string 2");

 System.out.println("Class name = " + obj.getClass().getName());

 for(Field f : obj.getClass().getDeclaredFields()) {
 System.out.println(" field: " + f);
 System.out.println(" -\> " + f.get(obj));
 }
 }

 private static class MyClass {

 public String param1;
 public String param2;

 public MyClass(String s1, String s2) {
 this.param1 = s1;
 this.param2 = s2;
 }

 }
}

Output:

Class name = RefTest$MyClass
 field: public java.lang.String RefTest$MyClass.param1
 -\> string 1
 field: public java.lang.String RefTest$MyClass.param2
 -\> string 2

HTH
Heavy