araç köşesi

XML in Java-Klasse (JAXB)

Aus Beispiel-XML eine Java-Klasse mit JAXB-Annotationen erzeugen; Attribute werden @XmlAttribute, wiederholte Elemente List<>

Ihre Daten bleiben bei Ihnen. Die Umwandlung läuft im Browser; nichts wird an einen Server gesendet.

So funktioniert es

Um eine SOAP-Antwort oder eine XML-Datei wie eine XRechnung in Java als Objekt zu lesen, braucht JAXB passende Klassen mit Annotationen. Fügen Sie ein Beispiel-XML links ein; rechts entsteht für jedes Element eine Klasse. Das Wurzelelement bekommt @XmlRootElement(name = "bestellung"), verschachtelte Elemente stehen als public static class in der Wurzelklasse, sodass die Ausgabe als eine Datei Bestellung.java kompiliert. Attribute eines Elements (nr="1024") werden @XmlAttribute-Felder, Unterelemente @XmlElement-Felder. Hat ein Element Attribute und Text (<position artikel="DE-11">Stahltopf</position>), landet der Text im Feld value mit @XmlValue. Kommt ein Element unter demselben Elternelement zweimal vor, wird das Feld List<Position>. Der Typ wird aus dem Text gelesen: 1024 wird int, 59.90 double, true boolean. Eine Postleitzahl wie 01067 beginnt mit einer Null und bleibt String, sonst ginge die Null verloren. Ein Attribut, das nur manchen Elementen fehlt (menge), wird Wrapper-Typ wie Integer, damit es null sein kann. Für Spring Boot 3 und Jakarta EE wählen Sie jakarta, für Java-8-Projekte javax.

Dieses Werkzeug ist auch als xml in java klasse umwandeln, xml to java, java klasse aus xml erzeugen, jaxb klassen generieren, xml to pojo bekannt.

Was ist JAXB?

JAXB (Jakarta XML Binding) ist der Java-Standard für die Umwandlung zwischen Java-Objekten und XML-Dokumenten. Die Annotationen @XmlRootElement, @XmlElement und @XmlAttribute legen fest, welches Feld zu welchem XML-Teil gehört; der Unmarshaller macht aus XML ein Objekt, der Marshaller aus dem Objekt XML. Seit Java 11 gehört JAXB nicht mehr zum JDK und wird als Abhängigkeit eingebunden.

Was ist XML-Attribut und XML-Element?

XML kann eine Angabe auf zwei Arten tragen: als Element (<summe>59.90</summe>) oder als Attribut (<bestellung nr="1024">). Ein Attribut enthält nur einen Textwert und darf pro Element nicht doppelt vorkommen; ein Element kann Unterelemente haben und sich wiederholen. JAXB unterscheidet beides mit @XmlAttribute und @XmlElement; mit der falschen Annotation bleibt das Feld nach dem Lesen leer.

Was ist der Unterschied zwischen JAXB und Jackson XML?

JAXB ist der festgelegte Java-Standard für XML und arbeitet mit Annotationen wie @XmlElement; SOAP-Clients, mit xjc aus einer XSD erzeugte Klassen und Jakarta-EE-Server setzen ihn voraus. Jackson XML (jackson-dataformat-xml) ist die XML-Erweiterung der JSON-Bibliothek Jackson und nutzt eigene Annotationen wie @JacksonXmlProperty; über ein Modul liest es auch JAXB-Annotationen. Ist Ihr Projekt SOAP- oder XSD-basiert, nehmen Sie JAXB. Verarbeitet ein REST-Projekt ohnehin JSON mit Jackson, bringt Jackson XML weniger neue Abhängigkeiten.

Welcher XML-Teil welche JAXB-Annotation bekommt

JAXB ordnet XML und Java-Felder über Annotationen zu. Das Werkzeug schreibt in jede Annotation den Originalnamen aus dem XML, daher klappt das Lesen auch dann, wenn der Java-Feldname anders lautet. Jede Klasse trägt @XmlAccessorType(XmlAccessType.FIELD): JAXB liest die Felder direkt, Getter und Setter sind nur für Ihren eigenen Code da.

Ob ein Element wiederholt wird, entscheidet nicht ein einzelnes Elternelement: Hat eine Bestellung eine Position und eine andere drei, wird position überall List<Position>. Sonst passt der Feldtyp beim Lesen eines Dokuments mit nur einer Position nicht.

  • <bestellung nr="1024"> → @XmlAttribute(name = "nr") private int nr;
  • <summe>59.90</summe> → @XmlElement(name = "summe") private double summe;
  • <position artikel="DE-11">Stahltopf</position> → Klasse Position: @XmlAttribute artikel + @XmlValue value
  • zwei <position> → @XmlElement(name = "position") private List<Position> position;

Ehrliche Grenzen: Namespaces, gemischter Inhalt, Datum

Namespaces (xmlns) werden nicht aufgelöst: Bei <cbc:ID> fällt das Präfix weg, das Feld wird nur mit "ID" annotiert. Ist Ihr Dokument namespace-gebunden, ergänzen Sie namespace = "..." in den Annotationen oder eine @XmlSchema-Angabe in package-info.java von Hand. Für große Schemas wie UBL (XRechnung) liefert die Erzeugung mit xjc aus der XSD ein genaueres Ergebnis.

Mischt ein Element Text und Unterelemente (<notiz>Zahlung <b>bar</b> an der Tür</notiz>), wird der Text ausgelassen und ein Kommentar in die Klasse geschrieben, denn JAXB erlaubt @XmlValue nicht neben @XmlElement in derselben Klasse. Datumstexte (2026-09-27) werden nicht zu LocalDate, sie bleiben String. Der Typ wird aus einem einzigen Beispiel abgeleitet; je mehr Varianten Ihr Beispiel zeigt, desto genauer die Klassen.

Häufige Fragen

Wie erstelle ich eine Java-Klasse aus XML?

Fügen Sie ein Beispiel-XML links auf dieser Seite ein und geben Sie den Paketnamen ein. Rechts erscheint eine Java-Klasse mit fertigen JAXB-Annotationen. Kopieren oder laden Sie den Code herunter; die Datei trägt den Namen der Wurzelklasse und lässt sich direkt in Ihr Projekt übernehmen.

Soll ich jakarta oder javax wählen?

JAXB wurde mit Java 11 aus dem JDK entfernt, und seit Jakarta EE 9 heißt das Paket jakarta.xml.bind. Nutzen Sie Spring Boot 3 oder einen aktuellen Jakarta-EE-Server, wählen Sie jakarta. Läuft Ihr Projekt auf Java 8 oder mit Spring Boot 2, wählen Sie javax. Das falsche Paket führt zu einem Kompilierfehler.

Warum ist die Postleitzahl String und nicht int?

Werte mit führender Null (01067, 030123456) würden als Zahl gelesen ihre Null verlieren. Deshalb lässt das Werkzeug Werte mit führender Null und Zahlen mit mehr als 18 Stellen als String. Möchten Sie alle Felder als Text, stellen Sie Zahlen und true/false-Werte auf Alles String.

Wird das eingefügte XML an einen Server gesendet?

Nein. Das Lesen des XML, die Typerkennung und das Schreiben des Java-Codes laufen vollständig in Ihrem Browser. Auch eine Dienstantwort mit Kundendaten verlässt diese Seite nicht.