112 Stimmen

Was ist JAXB und warum sollte ich es verwenden?

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.

104voto

poundifdef Punkte 17185

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.

23voto

codefinger Punkte 9748

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/

21voto

artgon Punkte 694

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/

19voto

Tom Hawtin - tackline Punkte 142461

Es handelt sich um ein "ORM für XML". Meistens wird es zusammen mit JAX-WS verwendet (und tatsächlich werden die Sun-Implementierungen gemeinsam entwickelt) für WS Death Star Systeme.

9voto

Fabian Steeg Punkte 43903

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.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X