Mit JAXB-schemagen-Tools eine XML-Schemadatei aus einer Java-Klasse generieren
Verwenden Sie die JAXB-schemagen-Tools (Java™ Architecture for XML Binding), um eine XML-Schemadatei aus Java-Klassen zu generieren.
Vorbereitende Schritte
Informationen zu diesem Vorgang
Verwenden Sie die JAXB-APIs und -Tools, um die Zuordnungen zwischen Java-Klassen und dem XML-Schema zu erstellen. In XML-Schemadokumenten werden die Datenelemente und Beziehungen in einem XML-Dokument beschrieben. Wenn eine Datenzuordnung oder -bindung vorhanden ist, können Sie XML-Dokumente in Java-Objekte und umgekehrt konvertieren. Anschließend können Sie auf die in einem XML-Dokument gespeicherten Daten zugreifen, ohne die Datenstruktur verstehen zu müssen.
Zum Entwickeln von Web-Services in einem Bottom-up-Entwicklungsansatz aus vorhandenen JavaBeans oder Enterprise-Beans verwenden Sie das Tool wsgen, um die Artefakte für JAX-WS-Anwendungen (Java API for XML-Based Web Services) zu generieren. Nachdem Sie die Java-Artefakte für Ihre Anwendung generiert haben, können Sie ein XML-Schemadokument aus einer vorhandenen Java-Anwendung erstellen, das die Datenelemente einer Java-Anwendung mithilfe des JAXB-Schemagenerators (Befehlszeilentool schemagen) darstellt. Der JAXB-Schemagenerator verarbeitet Java-Quellendateien oder -Klassendateien. Annotationen für Java-Klassen bieten die Möglichkeit, die Standardzuordnungen von vorhandenen Java-Klassen zu den generierten Schemakomponenten anzupassen. Die XML-Schemadatei und die annotierten Java-Klassendateien enthalten alle erforderlichen Informationen, die die JAXB-Laufzeitumgebung benötigt, um die XML-Dokumente für Marshaling und Unmarshaling syntaktisch zu analysieren.
Sie können ein XML-Schemadokument aus einer vorhandenen Java-Anwendung generieren, das die Datenelemente einer Java-Anwendung darstellt. Hierfür verwenden Sie den JAXB-Schemagenerator, das Befehlszeilentool schemagen. Der JAXB-Schemagenerator verarbeitet Java-Quellendateien oder -Klassendateien. Annotationen für Java-Klassen bieten die Möglichkeit, die Standardzuordnungen von vorhandenen Java-Klassen zu den generierten Schemakomponenten anzupassen. Die XML-Schemadatei und die annotierten Java-Klassendateien enthalten alle erforderlichen Informationen, die die JAXB-Laufzeitumgebung benötigt, um die XML-Dokumente für Marshaling und Unmarshaling syntaktisch zu analysieren.



JAXB vorgenommenen bietet Kompilierungsunterstützung, um Ihnen zu ermöglichen, den Schemagenerator schemagen so zu konfigurieren, dass er nicht automatisch ein neues Schema generiert. Diese Verbesserung ist nützlich, wenn Sie ein einheitliches Schema wie World Wide Web Consortium (W3C), XML Schema, Web Services Description Language (WSDL) oder WS-Addressing verwenden und kein neues Schema für ein bestimmtes referenziertes Paket generiert werden soll. Das Attribut location in der Annotation "@XmlSchema" bewirkt, dass der Generator "schemagen" auf den URI des vorhandenen Schemas verweist, anstatt ein neues Schema zu generieren.
Sie können das JAXB-Tool schemagen nicht nur über die Befehlszeile aufrufen, sondern auch in Ant-Build-Umgebungen. Verwenden Sie die Ant-Task com.sun.tools.jxc.SchemaGenTask in der Ant-Build-Umgebung, um das Schemageneratortool schemagen aufzurufen. Damit diese Ant-Task richtig ausgeführt wird, müssen Sie Ant mit dem Script "ws_ant" aufrufen.

- Stellen Sie eine Datei "package-info.java" mit der Annotation "@XmlSchema" bereit, z. B.:
schemagen sample.Address sample\package-info.java
- Verwenden Sie das Attribut "namespace" der Annotation "@XmlType" an, um einen Namespace anzugeben, z. B.:
@XmlType(namespace="http://myNameSpace")
Vorgehensweise
Ergebnisse
Sie haben eine XML-Schemadatei aus Java-Klassen generiert. Jetzt können Sie das Marshaling und Unmarshaling für die Java-Objekte als XML-Instanzdokumente ausführen.

Error: Two classes have the same XML type name ....
Use @XmlType.name and @XmlType.namespace to assign different names to them...
Diese Fehlernachricht zeigt an, dass Sie Klassennamen
oder @XMLType.name-Werte mit demselben Namen haben, die sich jedoch in verschiedenen Java-Paketen befinden. Fügen Sie zur Vermeidung dieses Fehlers
die Klasse "@XML.Type.namespace" zur vorhandenen Annotation "@XMLType" hinzu, um die Unterscheidung zwischen den XML-Typen zu ermöglichen. gotchaBeispiel
- Kopieren Sie die folgende Datei Bookdata.java in ein temporäres Verzeichnis.
package generated; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlAttribute; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlType; import javax.xml.datatype.XMLGregorianCalendar; @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "bookdata", propOrder = { "author", "title", "genre", "price", "publishDate", "description" }) public class Bookdata { @XmlElement(required = true) protected String author; @XmlElement(required = true) protected String title; @XmlElement(required = true) protected String genre; protected float price; @XmlElement(name = "publish_date", required = true) protected XMLGregorianCalendar publishDate; @XmlElement(required = true) protected String description; @XmlAttribute protected String id; public String getAuthor() { return author; } public void setAuthor(String value) { this.author = value; } public String getTitle() { return title; } public void setTitle(String value) { this.title = value; } public String getGenre() { return genre; } public void setGenre(String value) { this.genre = value; } public float getPrice() { return price; } public void setPrice(float value) { this.price = value; } public XMLGregorianCalendar getPublishDate() { return publishDate; } public void setPublishDate(XMLGregorianCalendar value) { this.publishDate = value; } public String getDescription() { return description; } public void setDescription(String value) { this.description = value; } public String getId() { return id; } public void setId(String value) { this.id = value; } }
- Öffnen Sie eine Eingabeaufforderung.
- Führen Sie das Schemageneratortool "schemagen" in dem Verzeichnis aus, in das Sie die Datei
Bookdata.java kopiert haben.
Stammverzeichnis_des_Anwendungsservers\bin\schemagen.bat Bookdata.java
Stammverzeichnis_des_Anwendungsservers/bin/schemagen.sh Bookdata.java
Stammverzeichnis_des_Anwendungsservers/bin/schemagen Bookdata.java
- Die XML-Schemadatei schema1.xsd wird generiert:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:complexType name="bookdata"> <xs:sequence> <xs:element name="author" type="xs:string"/> <xs:element name="title" type="xs:string"/> <xs:element name="genre" type="xs:string"/> <xs:element name="price" type="xs:float"/> <xs:element name="publish_date" type="xs:anySimpleType"/> <xs:element name="description" type="xs:string"/> </xs:sequence> <xs:attribute name="id" type="xs:string"/> </xs:complexType> </xs:schema>
Weitere Informationen zum Befehl schemagen finden Sie in der Dokumentation zu einer Referenzimplementierung von JAXB.