JAXB , Unmarshal XML File

blurry333

Mitglied
Hallo,

also ich generiere aus einer XML eine XSD Datei. Aus der wird ja dann die Java Klasse generiert. Das ganze mach ich mit JAXB. Der generiert allerdings statische Klassen. Da ich ein Tag mit dem Namen "group" habe und dieses ein Kind hat das auch group heisst und dieses Kind hat nochmal ein Kind das group heisst, kann JAXB daraus keine JAVA Klasse machen da Unterklassen anders heissen müssen wie die Parents. Also behelf ich mir manuell und nenne das eine Kind group1 und das andere Kind group2. So weit so gut. Jetzt wird meine JAVA Klasse generiert.

Jetzt weiß ich allerdings nicht ob das Unmarshalling noch funktioniert. Wenn ich die XML Datei einlese heissen die Tags ja immer noch group . Checkt JAXB das nun dass sie das Tag group in group1 speichern muss und das 2.Tag group in Group2 ?? . Ich weiß ja nicht wie diese Unmarshaler arbeiten. Muss da der Klassenname genau so heißen wie das XML Tag ?
 
Muss da der Klassenname genau so heißen wie das XML Tag ?
Nein, das hängt von @XmlRootElement Annotation ab, z.B.:

Java Klasse:
Java:
@XmlRootElement( name="doc" )
public class Document {
   ...
}

XML:
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<doc>
...
</doc>
[/XML]

XSD:
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<xsd:element name="doc" type="Document"/>
...
[/XML]
 
Weisst du was die bindings File eigentlich bringt. Wenn ich wie in meinem Beispiel die 3 group tags die zu Problemen führen da innere Klassen nicht so heissen dürfen wie äußere ,da statisch, einfach selbst umbenenne also z.B. zu group / group1 / group2 , dann mach ich doch dasselbe wie die bindings file.
 
Und das wichtigste , wenn du Unterklassen hast die so heißen wie eine Oberklasse ist, dass du die Annotations wieder änderst . In meinem Fall hatte ich ja 3 inneinander geschachtelte Klassen die alle TestGroup hießen. Dann hab ich mir beholfen indem ich TestGroup, TestGroup1 und TestGroup2 daraus gemacht habe. Jetzt war Java schon mal zufrieden , denn statische Klassen dürfen ja nicht gleich heissen. So die Klassen werden nun schon mal generiert. Allerdings stimmt das mapping jetzt nicht mehr.
Also musst du in der XMLAnnotatation die zuvor hinzugefügten Zahlen wieder wegmachen. Dann sollte es klappen !
 

Zurück
Oben