Hier schwört ein Typ, dass JAXB das Beste seit geschnittenem Brot ist. Ich bin gespannt, was Stack Overflow-Benutzer für den Anwendungsfall von JAXB halten und was ihn zu einer guten oder schlechten Lösung für diesen Fall macht.
Hier schwört ein Typ, dass JAXB das Beste seit geschnittenem Brot ist. Ich bin gespannt, was Stack Overflow-Benutzer für den Anwendungsfall von JAXB halten und was ihn zu einer guten oder schlechten Lösung für diesen Fall macht.
Antworten:
Ich bin ein großer Fan von JAXB für die Manipulation von XML. Grundsätzlich bietet es eine Lösung für dieses Problem (ich gehe davon aus, dass Sie mit XML, Java-Datenstrukturen und XML-Schemas vertraut sind):
Die Arbeit mit XML ist schwierig. Man braucht eine Möglichkeit, eine XML-Datei - im Grunde genommen eine Textdatei - in eine Datenstruktur zu konvertieren, die Ihr Programm dann bearbeiten kann.
JAXB verwendet ein von Ihnen geschriebenes XML-Schema und erstellt eine Reihe von Klassen, die diesem Schema entsprechen. Die JAXB-Dienstprogramme erstellen die Hierarchie der Datenstrukturen für die Bearbeitung dieses XML.
JAXB kann dann verwendet werden, um eine XML-Datei zu lesen und dann Instanzen der generierten Klassen zu erstellen - beladen mit den Daten aus Ihrem XML. JAXB macht auch das Gegenteil: Nimmt Java-Klassen und generiert das entsprechende XML.
Ich mag JAXB, weil es einfach zu bedienen 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 die Klassenhierarchie erstellt wird, ist intuitiv und leistet meiner Erfahrung nach gute Arbeit das "XML" weg abstrahieren, damit ich mich auf "Daten" konzentrieren kann.
Um Ihre Frage zu beantworten: Ich würde erwarten, dass JAXB für kleine XML-Dateien möglicherweise übertrieben ist. Dazu müssen Sie ein XML-Schema erstellen und verwalten sowie "Standardlehrbuchmethoden" zur Verwendung von Java-Klassen für Datenstrukturen verwenden. (Hauptklassen, kleine innere Klassen zur Darstellung von "Knoten" und eine große Hierarchie von ihnen.) JAXB eignet sich daher wahrscheinlich nicht so gut für eine einfache lineare Liste von "Einstellungen" für eine Anwendung.
Wenn Sie jedoch ein ziemlich komplexes XML-Schema und viele darin enthaltene Daten haben, ist JAXB fantastisch. In meinem Projekt habe ich große Datenmengen zwischen Binärdaten (die von einem C-Programm verwendet wurden) und XML konvertiert (damit Menschen diese Daten verwenden und ändern können). Das resultierende XML-Schema war nicht trivial (viele Hierarchieebenen, einige Felder konnten wiederholt werden, andere nicht), daher war JAXB hilfreich, um dies zu manipulieren.
Hier ist ein Grund, es nicht zu verwenden: Die Leistung leidet. Beim Marshalling und Unmarshaling entsteht viel Overhead. Möglicherweise möchten Sie auch eine andere API für die XML-Objektbindung in Betracht ziehen, z. B. JiBX: http://jibx.sourceforge.net/
Es ist ein "ORM für XML". Wird am häufigsten zusammen mit JAX-WS (und tatsächlich werden die Sun-Implementierungen gemeinsam entwickelt) für WS-Todessternsysteme verwendet.
Ich benutze JAXB die ganze Zeit bei der Arbeit und ich liebe es wirklich. Es ist perfekt für komplexe XML-Schemas, die sich ständig ändern, und besonders gut für den wahlfreien Zugriff auf Tags in einer XML-Datei.
Ich hasse es zu pimpen, aber ich habe gerade einen Blog gestartet und dies ist buchstäblich das erste, worüber ich geschrieben habe!
Schau es dir hier an:
http://arthur.gonigberg.com/2010/04/21/getting-started-with-jaxb/
Mit JAXB können Sie automatisch XML-Darstellungen Ihrer Objekte (Marshalling) und Objektdarstellungen des XML (Unmarshalling) erstellen.
In Bezug auf das XML-Schema haben Sie zwei Möglichkeiten:
Es gibt auch einige einfachere XML-Serialisierungsbibliotheken wie XStream , Digester oder XMLBeans , die Alternativen sein könnten.
JAXB ist großartig, wenn Sie nach einer externen XML-Spezifikation codieren müssen, die als XML-Schema ( xsd
) definiert ist.
Zum Beispiel haben Sie eine Handelsanwendung und müssen die Trades an die Uber Lame Trade Reporting App melden, die Ihnen ultra.xsd
die Möglichkeit gegeben hat , weiterzumachen. Verwenden Sie den $JAVA_HOME/bin/xjc
Compiler, um das XML in eine Reihe von Java-Klassen umzuwandeln (z UltraTrade
. B. ).
Dann können Sie einfach eine einfache Adapterschicht schreiben , um Ihre Handelsobjekte in Ultra-Corp zu konvertieren UltraTrades
und JAXB
die Daten zu verwenden. Viel einfacher als die Konvertierung Ihrer Trades in das XML-Format.
Alles bricht zusammen, wenn Ultra-Corp ihre eigenen Spezifikationen nicht eingehalten hat und der Handel, price
den sie als a haben, xsd:float
eigentlich als a ausgedrückt werden sollte double
!
Warum brauchen wir JAXB? Die Remote-Komponenten (in Java geschrieben) von Webdiensten verwenden XML als Mittel zum Austausch von Nachrichten untereinander. Warum XML? Weil XML als einfache Option zum Austausch von Nachrichten in Netzwerken mit begrenzten Ressourcen angesehen wird. So oft müssen wir diese XML-Dokumente in Objekte konvertieren und umgekehrt. Beispiel: Mit Simple Java POJO Employee können Mitarbeiterdaten an eine Remote-Komponente (auch ein Java-Programm) gesendet werden.
class Employee{
String name;
String dept;
....
}
Dieses Pojo sollte wie folgt in ein XML-Dokument konvertiert werden (Marshall):
<Employee>
<Name>...</Name>
<Department>...</Department>
</Employee>
Und an der Remote-Komponente zurück zum Java-Objekt aus dem XML-Dokument (Un-Marshall).
Was ist JAXB?
JAXB ist eine Bibliothek oder ein Tool zum Ausführen dieser Operation von Marshalling und UnMarshalling. Es erspart Ihnen diese Kopfschmerzen, so einfach ist das.
Sie können auch JIBX ausprobieren. Es ist auch ein sehr guter XML-Datenordner, der ebenfalls auf OTA (Open Travel Alliance) spezialisiert ist und von AXIS2-Servern unterstützt wird. Wenn Sie nach Leistung und Kompatibilität suchen, können Sie Folgendes ausprobieren:
JAXB bietet eine verbesserte Leistung durch Standard-Marshalling-Optimierungen. JAXB definiert eine Programmierer-API zum Lesen und Schreiben von Java-Objekten in und aus XML-Dokumenten, wodurch das Lesen und Schreiben von XML über Java vereinfacht wird.