# Projekt - JAXB, EMF oder doch DOM?



## chrk (6. Jul 2012)

Hallo zusammen, 

ich habe mein erstes größeres Projekt und leider komme ich überall auf unlösbare Probleme.

Als Input habe ich verschiedene XML/CSV Dateien, die unterschiedliche Stukturen bestizen aber die selbe Semantik. 

Elemente wie:
<bs.acc.equi>50</bs.acc.equi>
<bs.acc.test>40</bs.acc.test>

Für die Struktur bestize ich ein großes XSD-Schema mit zusätzlichen XML-Dateien. In dem XSD-Schema sind etwa 2500 Elemente die mit dem Namen eine Baumstruktur ergeben. Das Schema ist vorgegeben und lässt sich nicht ändern. Alle Elemente vom Schema sind untereinander geschrieben  z.B.: 

<xs:element name="bs.acc" />
<xs:element name="bs.acc.equi" />
<xs:element name="bs.acc.test" />
usw.

Daraus würde ich gerne eine Baumstruktur in Java bilden. Das wäre am besten mit DOM. Danach die XML/CSV einlesen und die Baumstruktur befüllen. Das würde sich ja am besten über SAX realisieren. ???:L

Danach könnte ich bs.acc berechnen:
bs.acc (Parent)
bs.acc.equi 50 (Child)
bs.acc.test 40 (Child)

Das XSD Schema zu generieren und die XML mit dem Schema auszugeben und zu validieren würde ich mit JAXB machen. Jedoch kann es möglich sein, dass sich das Schema in 1-2 Jahren verändert. Um eine Persitenz zu erhalten wäre EMF die beste Möglichkeit?


----------



## Ullenboom (7. Jul 2012)

Im Idealfall überträgst du die XML-Dateien auf technologieunabhängige Domainobjekte und dann verarbeitest du sie weiter.

XML/CSV <> Werteobjekte <> Service-Schicht

Konverter kümmern sich um die Abbildung in ein technologieabhängiges Format, also XML oder CSV. In der Regel ist man bequem, und lässt sich aus einem Schema die Beans gleich generieren, und das ist auch OK sein, nur muss man sich gut überlegen, ob man diese aus der XML abgeleiteten Beans als zentrale Domain-Objekte in der Anwendung nutzen möchte.


----------



## chrk (9. Jul 2012)

Ullenboom hat gesagt.:


> Im Idealfall überträgst du die XML-Dateien auf technologieunabhängige Domainobjekte und dann verarbeitest du sie weiter.
> 
> XML/CSV <> Werteobjekte <> Service-Schicht
> 
> Konverter kümmern sich um die Abbildung in ein technologieabhängiges Format, also XML oder CSV. In der Regel ist man bequem, und lässt sich aus einem Schema die Beans gleich generieren, und das ist auch OK sein, nur muss man sich gut überlegen, ob man diese aus der XML abgeleiteten Beans als zentrale Domain-Objekte in der Anwendung nutzen möchte.



Vielen Dank! So wie ich es verstanden habe, soll ich aus dem Schema Java Beans Klassen erzeugen dort kann ich dann die XML/CSV einlesen?


----------



## HelgeW (9. Jul 2012)

Im Prinzip ja...
Aber diese Objekte sind vielleicht nicht die richtigen um sie dann für die Logik zu nutzen und zu persistieren. Daher Einlesen(eigentlich egal wie) => transformation in eigene Objekte => Business

So halte ich es auch...ich binde eine externe Schnittstelle an, die ich dann in eigene Objekte transformiere. Diese kommen dann in die DB und werden dort wieder ausgelesen und weiter verarbeitet. Wenn nun der externe Dienstleister seine schnittstelle modifiziert muss ich nur die Transformation anpassen...

Viel Spass


----------



## chrk (9. Jul 2012)

Okay, also sieht es bei meinem Beispiel ungefähr so aus:

bs.acc (Parent)
bs.acc.equi (Child)
bs.acc.test (Child)

Dafür wird eine ArrayList "bs" angelegt. Diese ArrayList besitzt wieder eine ArrayList mit "bs.acc" und dort sind dann die Elemente equi und test vorhanden. Wobei sich hier ja auch verkettete Listen anbietet.

Beide Elemente haben dann eine eigene Klasse mit get und set Methoden.

Nun lese ich das Schema über z. B. SAX ein und erstelle dann z. B. bei jedem neu vorkommenden Punkt eine neue ArrayList (in der ArrayList) und dazugehörige Java Klasse?

Dann hätte ich zum Schluss für jedes Element eine Java Klasse mit get/set Methoden und alle Elemente sind innerhalb von ArrayLists. Danach könnte ich so die Werte von Java Klassen zusammen addieren?


----------

