title: How to iterate through the objects of a class and its member classes using Java
body: <p>I'm trying to get all the data objects(variables alone, not its functions et al) of one class (<code>objectfactory.java</code>) and also, invoke the methods in itself, that create instances of other classes in the same package, and this way, make a list of all the objects in all the classes in a given package. (to put things in perspective, these are classes created by JAXB).</p>
  
  <p>That is, what I basically want to do is, iterate through, and make a list of all the data objects of:</p>
  
  <pre><code>Objectfactory, and then,
  - Person
  - Name
  - Url
  - Link
  - Personnel
  </code></pre>
  
  <p>classes.</p>
  
  <p>Here is the objectFactory class:</p>
  
  <pre><code>@XmlRegistry
  public class ObjectFactory {
  
      private final static QName _Given_QNAME = new QName("", "given");
      private final static QName _Email_QNAME = new QName("", "email");
      private final static QName _Family_QNAME = new QName("", "family");
  
      /**
       * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: schema
       * 
       */
      public ObjectFactory() {
      }
      public Person createPerson() {
          return new Person();
      }
  
      public Name createName() {
          return new Name();
      }
  
      public Url createUrl() {
          return new Url();
      }
  
      public Link createLink() {
          return new Link();
      }
  
      public Personnel createPersonnel() {
          return new Personnel();
      }
  
      @XmlElementDecl(namespace = "", name = "given")
      public JAXBElement&lt;String&gt; createGiven(String value) {
          return new JAXBElement&lt;String&gt;(_Given_QNAME, String.class, null, value);
      }
      @XmlElementDecl(namespace = "", name = "email")
      public JAXBElement&lt;String&gt; createEmail(String value) {
          return new JAXBElement&lt;String&gt;(_Email_QNAME, String.class, null, value);
      }
  
      @XmlElementDecl(namespace = "", name = "family")
      public JAXBElement&lt;String&gt; createFamily(String value) {
          return new JAXBElement&lt;String&gt;(_Family_QNAME, String.class, null, value);
      }
  
  }
  </code></pre>
  
  <p>I could go <em>directly</em> only until the fields and methods in ObjectFactory using Java Reflections.(getDeclaredFields()) etc.</p>
  
  <p>But, for the other classes, I can only manually reach their objects. 
  (For eg, for Class Link)</p>
  
  <pre><code>ObjectFactory factory= new ObjectFactory();
  Field[] fields = factory.createLink().getClass().getDeclaredFields();
  
          Field[] fields1 = factory.createPerson().getClass().getDeclaredFields();
  
          for (Field f1 : fields1) {
              System.out.println("field name = " + f1.getName()); 
          }
  </code></pre>
  
  <p>but, I want to do this at runtime for all the classes in objectfactory, and not manually by making calls like "createPerson()". </p>
  
  <p>I tried doing something like this;</p>
  
  <pre><code>ObjectFactory factory= new ObjectFactory();
    Method[] methods = factory.getClass().getDeclaredMethods();
       for (Method m : methods) {
  System.out.println("Class name = " + m.getName()); 
          Field[] subfields = m.getClass().getDeclaredFields();
  
  
          for (Field sf : subfields) {
              System.out.println("entities = " + sf.getName()); 
          }
          System.out.println("\n\n");
  
      }
  </code></pre>
  
  <p>But this doesn't work. </p>
  
  <p>My expected output would be something like this:</p>
  
  <pre><code>Class name = ObjectFactory
      field name = _Given_QNAME
      field name = _Email_QNAME
      field name = _Family_QNAME
  
  Class name = Person
      field name = Name
      field name = Age
      field name = Sex
  
  Class name = Personnel
      field name = address
   ...
  </code></pre>
  
  <p>and so on..</p>
  
  <p>How do I do this? </p>