JAXB 2.0 Samuel Michaelis, Wolfgang Schmiesing Ein Programmiertutorial für die Java Architecture for XML Binding ISBN 3-446-40753-7 Inhaltsverzeichnis Weitere Informationen oder Bestellungen unter http://www.hanser.de/3-446-40753-7 sowie im Buchhandel
Vorwort...XI Java Architecture for XML Binding 2.0...XI Technologieeinführung... XII Programmiertutorials...XII Referenz... XII Feedback...XIII 1 JAXB im Überblick... 1 1.1 Ziele...1 1.2 Entstehung...4 1.3 Architektur...5 1.3.1 Annotationen...7 1.3.2 Der Schema-Compiler...8 1.3.3 Der Schema-Generator...9 1.3.4 Das Binding Framework...10 1.4 1.0 + 1.0 = 2.0?...14 2 Basistechnologien... 17 2.1 XML-Schema...17 2.1.1 Namespaces verwenden...21 2.1.2 Elementdeklarationen in XML-Schema...24 2.1.3 Vererbung...35 2.1.4 Kardinalitäten...37 2.1.5 Offene Schemas definieren...38 2.1.6 Namespaces importieren und referenzieren...40 2.1.7 Eindeutigkeit durch ID und IDREF...43 2.1.8 Dokumentation mit Annotationen...45 2.1.9 Das fertige Beispielschema...46 V
2.2 XPath...48 2.2.1 Die XPath-Sicht auf XML...49 2.2.2 XPath-Ausdrücke verwenden...50 2.2.3 Beispiele...51 2.2.4 XPath in Java...53 2.3 ANT...55 2.3.1 ANT-Übersicht...55 2.3.2 Installation und Aufruf...56 2.3.3 Häufig verwendete Elemente...57 2.3.4 Benutzerdefinierte Tasks...58 2.3.5 xjc und schemagen Tasks...58 2.3.6 Ein Beispiel...59 3 Hallo JAXB!... 61 3.1 Systemvoraussetzungen...61 3.2 Die Entwicklungsumgebung einrichten...62 3.2.1 JAXB-Referenzimplementierung installieren...62 3.2.2 Die JAXB-Bibliotheken einbinden...62 3.2.3 Die Struktur des Beispielprojekts...63 3.3 Am Anfang steht immer: Hallo Welt!...64 3.3.1 Der Weg von Java zu XML...64 3.3.2 Der Weg von XML zu Java...67 3.4 Zusammenfassung...69 4 JAXB-API... 71 4.1 Die ersten Schritte...72 4.1.1 Am Anfang war der JAXBContext...72 4.1.2 Die Klasse JAXBIntrospector verwenden...75 4.1.3 Objekte erzeugen mit der ObjectFactory...77 4.1.4 Zusammenfassung...78 4.2 Marshalling...79 4.2.1 Das Marshaller-Objekt anlegen...79 4.2.2 Den Marshalling-Prozess starten...80 4.2.3 Den Marshalling-Prozess konfigurieren...81 4.2.4 Das fertige Beispiel...83 4.2.5 Marshalling beliebiger Objekte...85 4.2.6 Zusammenfassung...86 4.3 Unmarshalling...87 4.3.1 Das Unmarshaller-Objekt anlegen...87 4.3.2 Den Unmarshalling-Prozess starten...88 4.3.3 Den Unmarshalling-Prozess konfigurieren...89 4.3.4 Das fertige Beispiel...89 4.3.5 Das xsi:type-attribut beim Unmarshalling verwenden...90 4.3.6 Elemente ohne @XMLRootElement verarbeiten...91 4.3.7 Unmarshalling von Teilen eines XML-Dokuments...93 4.3.8 Flexibles Unmarshalling nutzen...95 VI
4.3.9 Zusammenfassung... 97 4.4 Validierung... 97 4.4.1 Beim Unmarshalling validieren... 98 4.4.2 Beim Marshalling validieren... 99 4.4.3 Benutzerdefinierte Validierung... 101 4.4.4 Zusammenfassung... 107 4.5 Callback-Mechanismen einsetzen... 107 4.5.1 Die Listener-Klasse verwenden... 108 4.5.2 Callback-Methoden auf Klassenebene definieren... 110 4.5.3 Zusammenfassung... 112 4.6 Die Binder-Komponente verwenden... 112 4.6.1 Eine DOM-Sicht erstellen... 113 4.6.2 Die Klasse javax.xml.bind.binder... 113 4.6.3 Transformation mit unmarshal und marshal... 114 4.6.4 Navigation mit getxmlnode und getjaxbnode... 115 4.6.5 Synchronisation mit updatexml und updatejaxb... 116 4.6.6 Konkrete Anwendungsfälle... 117 4.6.7 Zusammenfassung... 123 5 XML-Schema zu Java... 125 5.1 Bindungskonfigurationen... 125 5.1.1 Eine Bindungskonfiguration definieren... 126 5.1.2 Bindungskonfigurationen per xjc-task einbinden... 130 5.1.3 Den XJC-Schema-Compiler programmatisch starten... 130 5.1.4 Externe Bindungskonfigurationen auf der Kommandozeile... 134 5.1.5 Ein Wort zu Versionen... 134 5.1.6 Der Sichtbarkeitsbereich... 134 5.1.7 Zusammenfassung... 135 5.2 Die erste Bindungskonfiguration... 136 5.2.1 Zusammenfassung... 138 5.3 Fünf Bindungsdeklarationen für den Alltag... 138 5.3.1 Aufzählungen anpassen mit jaxb:collectiontype... 138 5.3.2 Paketnamen anpassen mit jaxb:package... 140 5.3.3 Generierte Klassen anpassen mit jaxb:class... 142 5.3.4 Änderungen auf Komponentenebene mit jaxb:property... 145 5.3.5 Dokumentieren mit jaxb:javadoc... 152 5.3.6 Zusammenfassung... 155 5.4 XML-Bezeichner anpassen... 155 5.4.1 Einzelne Namenskonflikte auflösen... 156 5.4.2 Präfixe und Suffixe mit jaxb:namexmltransform... 157 5.4.3 Unterstriche verarbeiten mit jaxb:underscorebinding... 159 5.4.4 Bezeichner in Enumerationen... 160 5.4.5 Verwenden von Java-Schlüsselwörtern als Bezeichner... 166 5.4.6 Java-Namenskonventionen... 168 5.4.7 Zusammenfassung... 168 5.5 Datentypen anpassen... 168 VII
5.5.1 Datentypen explizit angeben mit jaxb:basetype...169 5.5.2 Datentypen konvertieren mit jaxb:javatype...173 5.5.3 Zusammenfassung...181 5.6 Deklarationen überlagern...182 5.7 Noch mehr Bindungsdeklarationen...185 5.7.1 Ableiten von einer Oberklasse mit xjc:superclass...186 5.7.2 Ein Wurzelinterface angeben mit xjc:superinterface...187 5.7.3 Erweiterung von jaxb:javatype mit xjc:javatype...189 5.7.4 Das Experiment: xjc:simple...191 5.7.5 Zusammenfassung...192 6 Java zu XML-Schema... 193 6.1 JAXBContext und JAXBElement ganz ohne Schema...194 6.2 Einfache Elementkonfigurationen...201 6.2.1 Wurzelelemente mit @XmlRootElement definieren...201 6.2.2 Der Standardmodus...205 6.2.3 Abbildung als XML-Element explizit konfigurieren...210 6.2.4 Java-Eigenschaften an XML-Attribute binden...216 6.2.5 Java-Eigenschaften an XML-Elementinhalte binden...221 6.2.6 Bindung an XML unterdrücken...223 6.2.7 Reihenfolge der XML-Elemente beeinflussen...225 6.2.8 Namen und Verschachtelung des XML-Typs einstellen...230 6.2.9 XML-Elemente referenzieren...234 6.2.10 Namespace konfigurieren...237 6.3 Listen und Elementmischungen...243 6.3.1 Der Standardmodus für Java-Arrays und Java-Listen...244 6.3.2 Listen und Arrays an simpletype/list-deklarationen binden...249 6.3.3 Mehrere Elemente im gleichen Feld speichern...251 6.3.4 Elementlisten verpacken...263 6.3.5 Mischungen von Elementen und Text...266 6.4 Enumerationen...270 6.4.1 Enumerationen an XML binden: Standardverhalten...271 6.4.2 Bindung von Enumerationen konfigurieren...272 6.5 Eigene Typbindungen definieren...275 6.5.1 Basisdatentyp als Speicherdatentyp...277 6.5.2 Komplexe Datentypen als Speicherdatentypen...280 6.6 Unbekannte Attribut- und Elementwerte binden...284 6.6.1 Wildcard-Attribute mit @XmlAnyAttribute definieren...284 6.6.2 Wildcard-Elemente per @XmlAnyElement deklarieren...286 6.6.3 Lax fischen...288 6.7 Objektgraphen in XML abbilden...290 6.8 Elemente über Factory-Klassen definieren...295 7 JAXB-Referenz... 299 7.1 XJC Kommandozeilenbefehl...299 7.2 XJC ANT-Task...301 VIII
7.3 schemagen-kommandozeilenbefehl... 303 7.4 schemagen-ant-task... 304 7.5 JAXB-Annotationen...306 7.5.1 XmlAccessorOrder... 306 7.5.2 XmlAccessorType... 307 7.5.3 XmlAnyAttribute... 311 7.5.4 XmlAnyElement... 312 7.5.5 XmlAttachmentRef... 314 7.5.6 XmlAttribute... 314 7.5.7 XmlElement... 316 7.5.8 XmlElementDecl... 318 7.5.9 XmlElementRef... 320 7.5.10 XmlElementRefs... 321 7.5.11 XmlElements... 323 7.5.12 XmlElementWrapper... 324 7.5.13 XmlEnum... 325 7.5.14 XmlEnumValue... 326 7.5.15 XmlID... 327 7.5.16 XmlIDREF... 328 7.5.17 XmlInlineBinaryData... 330 7.5.18 XmlList... 330 7.5.19 XmlJavaTypeAdapter... 331 7.5.20 XmlJavaTypeAdapters... 332 7.5.21 XmlMimeType... 333 7.5.22 XmlMixed... 333 7.5.23 XmlNs... 334 7.5.24 XmlRegistry... 334 7.5.25 XmlRootElement... 335 7.5.26 XmlSchema... 336 7.5.27 XmlSchemaType... 338 7.5.28 XmlSchemaTypes... 339 7.5.29 XmlTransient... 340 7.5.30 XmlType... 341 7.5.31 XmlValue... 342 7.6 Typkonversionen Java zu XML-Schema... 343 7.7 Typkonversionen XML-Schema zu Java... 345 7.8 XML-Elemente der Bindungskonfiguration... 346 7.8.1 Globale Einstellungen... 346 7.8.2 Schemaspezifische Einstellungen... 359 7.8.3 Komponentenspezifische Einstellungen... 363 Register... 381 IX