# XML Objekte entschlüsseln.



## Roland34 (1. Apr 2008)

Hallo,

Ich bin relativ neu zu Java. Versuche ein Java model für Computer Netzwerke zu erweitern.

Problem: lese XML Datei und generiere einzelne Objekte. 

Ich habe schon eine Mehtode,  die die einzelne Objekte liest und zentral erzeugt.  Aber ich muss die Objekte in einzelne Klassen lesen. wie z.B. Client.java muss eine Methode haben, der nur Client Objekte liest.




<Client name="client">

     <MemorySize>1024M</MemorySize>

     <CacheSize>0</CacheSize>

     <InstructionPerSecond>1000</InstructionPerSecond>

     <Bandwidth>100M</Bandwidth>                

     <Latency>0</Latency>

   </Client>   

MIR SCHEINT ES UNSINVOLL, DAS IN JEDE KLASSSE SEPERAT SEIN EINZELNE TEIL LISET. ABER AUS READXML() EIN E SCHNITTSTELLE SEIN SOLL, MUSS ICH JA WOHL SO PROGRAMMIREN.

Kann jemand mir eine Idee geben?



```
private void readComponents(Element templateRoot) throws Exception {
    ArrayList<Element> list;

    HashMap<String, Component> map;
    Class partypes[] = new Class[1];
    partypes[0] = Element.class;
    Object arglist[] = new Object[1];

    for (Class<Component> c : componentTypes) {
      String className = c.getSimpleName();
      map = new HashMap<String, Component>();
      components.put(c, map);
      Element element = XMLutil.getFirstElementByTag(templateRoot, className
          + "List");
      if (element == null) {
        throw new IllegalArgumentException("No component list exists for type "
            + className);
      }
      list = XMLutil.getElementsByTag(element, className);
      for (Element e : list) {
        Constructor<Component> ct = c.getConstructor(partypes);
        arglist[0] = (Element) e;
        Component o = ct.newInstance(arglist);
        if (map.get(o.getName()) != null) {
          throw new IllegalArgumentException("Component with name "
              + o.getName() + " already exists for components: " + className);
        }
        map.put(o.getName(), o);
        if (componentNameMap.get(o.getName()) != null) {
          throw new IllegalArgumentException("Component with name "
              + o.getName()
              + " already exists, you need a unique component name ");
        }
        componentNameMap.put(o.getName(), o);
        if (o.getTemplateName() != null) {
          Component template = templates.get(c).get(o.getTemplateName());
          if (template == null) {
            throw new IllegalArgumentException("Template not available "
                + o.getTemplateName() + " for components: " + c.getSimpleName());
          }
          o.setTemplateValue(template);
        }
      }
    }
  }
```


----------



## Wildcard (1. Apr 2008)

Wenn deine Objekte eine XML Entsprechung haben, solltest du zu einem XML Binding wie EMF oder JaxB greifen.


----------



## Roland34 (2. Apr 2008)

danke für den Tipp.
Habe Kurz die EMF und JaxB angeschaut.
Mir sehen die beide Methoden ähnlich aus.
Ich entwickle mit Eclipse und möchte mein Model ziemlich klein halten, da die jar File über Netz gehen soll.
Kann mir jemand empfehlen, was ich da nehmen sollte.?


----------



## Wildcard (2. Apr 2008)

EMF ist mächtiger und komfortabler, JaxB ist kleiner.
Ausserdem ist JaxB in die JRE 6 integriert.


----------

