JAXB: Demarshalling von XML mit mehreren Namen für dasselbe Element aufheben
Ich gehe davon aus, dass dies für jemanden, der die JAXB-Bindungsdateien wirklich versteht, einfach sein wird ...
Grundlegende FrageWie kann JAXB so konfiguriert werden, dass mehrere Elemente in derselben Klasse gemarshallt werden?
Hinweis: Ich möchte vermeiden, meinem Projekt eine weitere Abhängigkeit hinzuzufügen (z. B. MOXy). Idealerweise kann dies mit Anmerkungen oder einer benutzerdefinierten Bindungsdatei erreicht werden.
HintergrundIch habe ein XML-Dokument, das viele Variationen desselben Elements enthält - jedes mit genau den gleichen Eigenschaften. In meinem Beispiel unten geht es mir nur um "Mitarbeiter", in der XML sind jedoch "Direktoren, Manager und Mitarbeiter" angegeben. Für unsere Zwecke sind dies alle Unterklassen desselben übergeordneten Objekts. Wir müssen nur mit dem übergeordneten Typ (Employee) arbeiten, und unser Objektmodell verfügt nicht über oder benötigt keine Instanzen der Unterklassen.
Ich möchte, dass JAXB jede Instanz von bindetdirector, manager, or staff
Elemente in eineEmployee
Objekt.
Eingang:
<organization>
<director>
<fname>Dan</fname>
<lname>Schman</lname>
</director>
<manager>
<fname>Joe</fname>
<lname>Schmo</lname>
</manager>
<staff>
<fname>Ron</fname>
<lname>Schwan</lname>
</staff>
<staff>
<fname>Jim</fname>
<lname>Schwim</lname>
</staff>
<staff>
<fname>Jon</fname>
<lname>Schwon</lname>
</staff>
</organization>
Ausgabe:
Nachdem ich dieses Beispiel entmarshallt hatte, endete ich mit einemOrganization
Objekt mit einer Eigenschaft:List<Employees> employees
Dabei hat jeder Mitarbeiter nur einen Vor- und Nachnamen.
(Hinweis: Jeder Mitarbeiter wäre vom TypEmployee
NICHTDirector/Manager/Staff
. Unterklasseninformationen würden beim Aufheben der Rangierung verloren gehen. Wir kümmern uns auch nicht um das Zurücksetzen des Marshalls - wir müssen nur Objekte aus XML erstellen.
Kann dies ohne Erweiterungen wie MOXy durchgeführt werden? Kann eine benutzerdefinierte bindings.xjb-Datei den Tag retten?