Inhalt | 5 |
Vorwort | 11 |
Java Architecture for XML Binding 2.0 | 11 |
Technologieeinführung | 12 |
Programmiertutorials | 12 |
Referenz | 12 |
Feedback | 13 |
1 JAXB im Überblick | 15 |
1.1 Ziele | 15 |
1.2 Entstehung | 18 |
1.3 Architektur | 19 |
1.3.1 Annotationen | 21 |
1.3.2 Der Schema-Compiler | 22 |
1.3.3 Der Schema-Generator | 23 |
1.3.4 Das Binding Framework | 24 |
1.4 1.0 + 1.0 = 2.0? | 28 |
2 Basistechnologien | 31 |
2.1 XML-Schema | 31 |
2.1.1 Namespaces verwenden | 35 |
2.1.2 Elementdeklarationen in XML-Schema | 38 |
2.1.3 Vererbung | 49 |
2.1.4 Kardinalitäten | 51 |
2.1.5 Offene Schemas definieren | 52 |
2.1.6 Namespaces importieren und referenzieren | 54 |
2.1.7 Eindeutigkeit durch ID und IDREF | 57 |
2.1.8 Dokumentation mit Annotationen | 59 |
2.1.9 Das fertige Beispielschema | 60 |
2.2 XPath | 62 |
2.2.1 Die XPath-Sicht auf XML | 63 |
2.2.2 XPath-Ausdrücke verwenden | 64 |
2.2.3 Beispiele | 65 |
2.2.4 XPath in Java | 67 |
2.3 ANT | 69 |
2.3.1 ANT-Übersicht | 69 |
2.3.2 Installation und Aufruf | 70 |
2.3.3 Häufig verwendete Elemente | 71 |
2.3.4 Benutzerdefinierte Tasks | 72 |
2.3.5 xjc und schemaGen Tasks | 72 |
2.3.6 Ein Beispiel | 73 |
3 Hallo JAXB! | 75 |
3.1 Systemvoraussetzungen | 75 |
3.2 Die Entwicklungsumgebung einrichten | 76 |
3.2.1 JAXB-Referenzimplementierung installieren | 76 |
3.2.2 Die JAXB-Bibliotheken einbinden | 76 |
3.2.3 Die Struktur des Beispielprojekts | 77 |
3.3 Am Anfang steht immer: Hallo Welt! | 78 |
3.3.1 Der Weg von Java zu XML | 78 |
3.3.2 Der Weg von XML zu Java | 81 |
3.4 Zusammenfassung | 83 |
4 JAXB-API | 85 |
4.1 Die ersten Schritte | 86 |
4.1.1 Am Anfang war der JAXBContext | 86 |
4.1.2 Die Klasse JAXBIntrospector verwenden | 89 |
4.1.3 Objekte erzeugen mit der ObjectFactory | 91 |
4.1.4 Zusammenfassung | 92 |
4.2 Marshalling | 93 |
4.2.1 Das Marshaller-Objekt anlegen | 93 |
4.2.2 Den Marshalling-Prozess starten | 94 |
4.2.3 Den Marshalling-Prozess konfigurieren | 95 |
4.2.4 Das fertige Beispiel | 97 |
4.2.5 Marshalling beliebiger Objekte | 99 |
4.2.6 Zusammenfassung | 100 |
4.3 Unmarshalling | 101 |
4.3.1 Das Unmarshaller-Objekt anlegen | 101 |
4.3.2 Den Unmarshalling-Prozess starten | 102 |
4.3.3 Den Unmarshalling-Prozess konfigurieren | 103 |
4.3.4 Das fertige Beispiel | 103 |
4.3.5 Das xsi:type- Attribut beim Unmarshalling verwenden | 104 |
4.3.6 Elemente ohne @XMLRootElement verarbeiten | 105 |
4.3.7 Unmarshalling von Teilen eines XML-Dokuments | 107 |
4.3.8 Flexibles Unmarshalling nutzen | 109 |
4.3.9 Zusammenfassung | 111 |
4.4 Validierung | 111 |
4.4.1 Beim Unmarshalling validieren | 112 |
4.4.2 Beim Marshalling validieren | 113 |
4.4.3 Benutzerdefinierte Validierung | 115 |
4.4.4 Zusammenfassung | 121 |
4.5 Callback-Mechanismen einsetzen | 121 |
4.5.1 Die Listener-Klasse verwenden | 122 |
4.5.2 Callback-Methoden auf Klassenebene definieren | 124 |
4.5.3 Zusammenfassung | 126 |
4.6 Die Binder-Komponente verwenden | 126 |
4.6.1 Eine DOM-Sicht erstellen | 127 |
4.6.2 Die Klasse javax.xml.bind.Binder | 127 |
4.6.3 Transformation mit unmarshal und marshal | 128 |
4.6.4 Navigation mit getXMLNode und getJAXBNode | 129 |
4.6.5 Synchronisation mit updateXML und updateJAXB | 130 |
4.6.6 Konkrete Anwendungsfälle | 131 |
4.6.7 Zusammenfassung | 137 |
5 XML-Schema zu Java | 139 |
5.1 Bindungskonfigurationen | 139 |
5.1.1 Eine Bindungskonfiguration definieren | 140 |
5.1.2 Bindungskonfigurationen per xjc-Task einbinden | 144 |
5.1.3 Den XJC-Schema-Compiler programmatisch starten | 144 |
5.1.4 Externe Bindungskonfigurationen auf der Kommandozeile | 148 |
5.1.5 Ein Wort zu Versionen | 148 |
5.1.6 Der Sichtbarkeitsbereich | 148 |
5.1.7 Zusammenfassung | 149 |
5.2 Die erste Bindungskonfiguration | 150 |
5.2.1 Zusammenfassung | 152 |
5.3 Fünf Bindungsdeklarationen für den Alltag | 152 |
5.3.1 Aufzählungen anpassen mit jaxb:collectionType | 152 |
5.3.2 Paketnamen anpassen mit jaxb:package | 154 |
5.3.3 Generierte Klassen anpassen mit jaxb:class | 156 |
5.3.4 Änderungen auf Komponentenebene mit jaxb:property | 159 |
5.3.5 Dokumentieren mit jaxb:javadoc | 166 |
5.3.6 Zusammenfassung | 169 |
5.4 XML-Bezeichner anpassen | 169 |
5.4.1 Einzelne Namenskonflikte auflösen | 170 |
5.4.2 Präfixe und Suffixe mit jaxb:nameXmlTransform | 171 |
5.4.3 Unterstriche verarbeiten mit jaxb:underScoreBinding | 173 |
5.4.4 Bezeichner in Enumerationen | 174 |
5.4.5 Verwenden von Java-Schlüsselwörtern als Bezeichner | 180 |
5.4.6 Java-Namenskonventionen | 182 |
5.4.7 Zusammenfassung | 182 |
5.5 Datentypen anpassen | 182 |
5.5.1 Datentypen explizit angeben mit jaxb:baseType | 183 |
5.5.2 Datentypen konvertieren mit jaxb:javaType | 187 |
5.5.3 Zusammenfassung | 195 |
5.6 Deklarationen überlagern | 196 |
5.7 Noch mehr Bindungsdeklarationen | 199 |
5.7.1 Ableiten von einer Oberklasse mit xjc:superClass | 200 |
5.7.2 Ein Wurzelinterface angeben mit xjc:superInterface | 201 |
5.7.3 Erweiterung von jaxb:javaType mit xjc:javaType | 203 |
5.7.4 Das Experiment: xjc:simple | 205 |
5.7.5 Zusammenfassung | 206 |
6 Java zu XML-Schema | 207 |
6.1 JAXBContext und JAXBElement ganz ohne Schema | 208 |
6.2 Einfache Elementkonfigurationen | 215 |
6.2.1 Wurzelelemente mit @XmlRootElement definieren | 215 |
6.2.2 Der „Standardmodus“ | 219 |
6.2.3 Abbildung als XML-Element explizit konfigurieren | 224 |
6.2.4 Java-Eigenschaften an XML- Attribute binden | 230 |
6.2.5 Java-Eigenschaften an XML-Elementinhalte binden | 235 |
6.2.6 Bindung an XML unterdrücken | 237 |
6.2.7 Reihenfolge der XML-Elemente beeinflussen | 239 |
6.2.8 Namen und Verschachtelung des XML-Typs einstellen | 244 |
6.2.9 XML-Elemente referenzieren | 248 |
6.2.10 Namespace konfigurieren | 251 |
6.3 Listen und Elementmischungen | 257 |
6.3.1 Der „Standardmodus“ für Java- Arrays und Java-Listen | 258 |
6.3.2 Listen und Arrays an simpleType/list-Deklarationen binden | 263 |
6.3.3 Mehrere Elemente im gleichen Feld speichern | 265 |
6.3.4 Elementlisten verpacken | 277 |
6.3.5 Mischungen von Elementen und Text | 280 |
6.4 Enumerationen | 284 |
6.4.1 Enumerationen an XML binden: Standardverhalten | 285 |
6.4.2 Bindung von Enumerationen konfigurieren | 286 |
6.5 Eigene Typbindungen definieren | 289 |
6.5.1 Basisdatentyp als Speicherdatentyp | 291 |
6.5.2 Komplexe Datentypen als Speicherdatentypen | 294 |
6.6 Unbekannte Attribut- und Elementwerte binden | 298 |
6.6.1 Wildcard- Attribute mit @XmlAnyAttribute definieren | 298 |
6.6.2 Wildcard-Elemente per @XmlAnyElement deklarieren | 300 |
6.6.3 Lax fischen | 302 |
6.7 Objektgraphen in XML abbilden | 304 |
6.8 Elemente über Factory-Klassen definieren | 309 |
7 JAXB-Referenz | 313 |
7.1 XJC Kommandozeilenbefehl | 313 |
7.2 XJC ANT-Task | 315 |
7.3 schemaGen-Kommandozeilenbefehl | 317 |
7.4 schemaGen- ANT- Task | 318 |
7.5 JAXB- Annotationen | 320 |
7.5.1 XmlAccessorOrder | 320 |
7.5.2 XmlAccessorType | 321 |
7.5.3 XmlAnyAttribute | 325 |
7.5.4 XmlAnyElement | 326 |
7.5.5 XmlAttachmentRef | 328 |
7.5.6 XmlAttribute | 328 |
7.5.7 XmlElement | 330 |
7.5.8 XmlElementDecl | 332 |
7.5.9 XmlElementRef | 334 |
7.5.10 XmlElementRefs | 335 |
7.5.11 XmlElements | 337 |
7.5.12 XmlElementWrapper | 338 |
7.5.13 XmlEnum | 339 |
7.5.14 XmlEnumValue | 340 |
7.5.15 XmlID | 341 |
7.5.16 XmlIDREF | 342 |
7.5.17 XmlInlineBinaryData | 344 |
7.5.18 XmlList | 344 |
7.5.19 XmlJavaTypeAdapter | 345 |
7.5.20 XmlJavaTypeAdapters | 346 |
7.5.21 XmlMimeType | 347 |
7.5.22 XmlMixed | 347 |
7.5.23 XmlNs | 348 |
7.5.24 XmlRegistry | 348 |
7.5.25 XmlRootElement | 349 |
7.5.26 XmlSchema | 350 |
7.5.27 XmlSchemaType | 352 |
7.5.28 XmlSchemaTypes | 353 |
7.5.29 XmlTransient | 354 |
7.5.30 XmlType | 355 |
7.5.31 XmlValue | 356 |
7.6 Typkonversionen Java zu XML-Schema | 357 |
7.7 Typkonversionen XML-Schema zu Java | 359 |
7.8 XML-Elemente der Bindungskonfiguration | 360 |
7.8.1 Globale Einstellungen | 360 |
7.8.2 Schemaspezifische Einstellungen | 373 |
7.8.3 Komponentenspezifische Einstellungen | 377 |
Register | 395 |