Es gibt hier einen Kerl, der schwört, dass JAXB das Beste seit geschnittenem Brot ist. Ich bin gespannt zu sehen, was die Stack Overflow Benutzer über den Anwendungsfall von JAXB denken und was es zu einer guten oder schlechten Lösung für diesen Fall macht.
Antworten
Zu viele Anzeigen?Ich bin ein großer Fan von JAXB für die Bearbeitung von XML. Grundsätzlich bietet es eine Lösung für dieses Problem (ich gehe davon aus, dass XML, Java-Datenstrukturen und XML-Schemas bekannt sind):
Der Umgang mit XML ist schwierig. Man benötigt eine Möglichkeit, eine XML-Datei - die im Grunde eine Textdatei ist - in irgendeine Art von Datenstruktur umzuwandeln, die Ihr Programm dann bearbeiten kann.
JAXB nimmt ein von Ihnen geschriebenes XML-Schema und erstellt eine Reihe von Klassen, die diesem Schema entsprechen. Die JAXB-Utilities erstellen die Hierarchie der Datenstrukturen zum Manipulieren dieses XML.
JAXB kann dann verwendet werden, um eine XML-Datei zu lesen und anschließend Instanzen der generierten Klassen zu erstellen - beladen mit den Daten aus Ihrem XML. JAXB kann auch das Gegenteil tun: Es nimmt Java-Klassen und generiert das entsprechende XML.
Ich mag JAXB, weil es einfach zu verwenden ist und mit Java 1.6 geliefert wird (wenn Sie 1.5 verwenden, können Sie die JAXB-.jars herunterladen). Die Art und Weise, wie es die Klassenhierarchie erstellt, ist intuitiv und meiner Erfahrung nach leistet es gute Arbeit dabei, das "XML" abzustrahieren, sodass ich mich auf "Daten" konzentrieren kann.
Also, um Ihre Frage zu beantworten: Für kleine XML-Dateien wäre JAXB möglicherweise überdimensioniert. Es erfordert, dass Sie ein XML-Schema erstellen und pflegen und "Standard-Lehrbuchmethoden" zur Nutzung von Java-Klassen für Datenstrukturen verwenden. (Hauptklassen, kleine innere Klassen zur Darstellung von "Knoten" und eine riesige Hierarchie von ihnen.) Daher ist JAXB wahrscheinlich nicht so gut für eine einfache lineare Liste von "Präferenzen" für eine Anwendung geeignet.
Aber wenn Sie ein ziemlich komplexes XML-Schema und viele darin enthaltene Daten haben, dann ist JAXB fantastisch. In meinem Projekt habe ich große Datenmengen zwischen Binär (das von einem C-Programm verarbeitet wurde) und XML (damit Menschen diese Daten konsumieren und ändern konnten) umgewandelt. Das resultierende XML-Schema war nicht trivial (viele Ebenen der Hierarchie, einige Felder konnten wiederholt werden, andere nicht), daher war JAXB hilfreich, um das manipulieren zu können.
Hier ist ein Grund, es nicht zu verwenden: Die Leistung leidet darunter. Es gibt eine Menge Overhead beim Marshaling und Unmarshaling. Möglicherweise möchten Sie auch eine andere API für die Bindung von XML-Objekten in Betracht ziehen - wie zum Beispiel JiBX: http://jibx.sourceforge.net/
Ich benutze JAXB bei der Arbeit die ganze Zeit und ich liebe es wirklich. Es ist perfekt für komplexe XML-Schemas, die sich immer ändern, und besonders gut für den zufälligen Zugriff auf Tags in einer XML-Datei.
Ich hasse es zu schummeln, aber ich habe gerade einen Blog gestartet und das ist buchstäblich das Erste, worüber ich gepostet habe!
Schau es dir hier an:
http://arthur.gonigberg.com/2010/04/21/getting-started-with-jaxb/
Mit JAXB können automatisch XML-Repräsentationen Ihrer Objekte (Marshalling) und Objektrepräsentationen des XML (Unmarshalling) erstellt werden.
Was das XML-Schema betrifft, haben Sie zwei Möglichkeiten:
- Generieren Sie Java-Klassen aus einem XSD
- Generieren Sie ein XSD aus Ihren Java-Klassen
Es gibt auch einfachere XML-Serialisierungsbibliotheken wie XStream, Digester oder XMLBeans, die möglicherweise Alternativen darstellen.
- See previous answers
- Weitere Antworten anzeigen