使用 JAXB schemagen 工具從 Java 類別產生 XML 綱目檔
使用 Java™ Architecture for XML Binding (JAXB) schemagen 工具,從 Java 類別產生 XML 綱目檔。
開始之前
關於這項作業
使用 JAXB API 和工具來建立 Java 類別和 XML 綱目之間的對映。 XML 綱目文件說明 XML 文件中的資料元素及關係。 在資料對映或連結存在之後,您可以在 Java 物件之間來回轉換 XML 文件。 您現在可以存取儲存在 XML 文件中的資料,而不需要瞭解資料結構。
如果要使用從現有 JavaBeans 或 Enterprise Bean 開始的由下而上開發方法來開發 Web 服務,請使用 wsgen 工具來產生 Java API for XML-Based Web Services (JAX-WS) 應用程式的構件。 產生應用程式的 Java 構件之後,您可以使用 JAXB 綱目產生器 schemagen 指令行工具,從現有的 Java 應用程式建立 XML 綱目文件,以代表 Java 應用程式的資料元素。 JAXB 綱目產生器會處理 Java 原始檔或類別檔。 Java 類別註釋可讓您自訂從現有 Java 類別至所產生綱目元件的預設對映。 XML 綱目檔以及標註的 Java 類別檔包含 JAXB 執行時期剖析 XML 文件以進行配置和解除配置所需的所有必要資訊。
您可以使用 JAXB 綱目產生器 ( schemagen 指令行工具) ,從代表 Java 應用程式資料元素的現有 Java 應用程式建立 XML 綱目文件。 JAXB 綱目產生器會處理 Java 原始檔或類別檔。 Java 類別註釋可讓您自訂從現有 Java 類別至所產生綱目元件的預設對映。 XML 綱目檔以及標註的 Java 類別檔包含 JAXB 執行時期剖析 XML 文件以進行配置和解除配置所需的所有必要資訊。
JAXB 提供編譯支援,可讓您配置 schemagen 綱目產生器,使它不會自動產生新的綱目。 如果您使用一般綱目,例如「全球資訊網協會 (W3C)」、「XML 綱目」、「Web 服務說明語言 (WSDL)」或 WS-Addressing ,且您不想要針對所參照的特定套件產生新的綱目,則這會很有用。 @XmlSchema 註釋上的 location 屬性會導致 schemagen 產生器參照現有綱目的 URI ,而不是產生新的綱目。
除了從指令行使用 schemagen 工具之外,您還可以從 Ant 建置環境內呼叫這個 JAXB 工具。 從 Ant 建置環境內使用 com.sun.tools.jxc.SchemaGenTask Ant 作業來呼叫 schemagen 綱目產生器工具。 為了讓功能正常運作,這項 Ant 作業需要您使用 ws_ant Script 來呼叫 Ant。
- 提供含有 @XmlSchema的 package-info.java 檔案; 例如:
schemagen sample.Address sample\package-info.java - 使用 @XmlType 註釋名稱空間屬性來指定名稱空間; 例如:
@XmlType(namespace="http://myNameSpace")
程序
結果
現在您已從 Java 類別產生 XML 綱目檔,您已準備好將 Java 物件配置及解除配置為 XML 實例文件。
錯誤: 兩個類別具有相同的 XML 類型名稱 .... 請使用 @XmlType.name 和 @XmlType.namespace 來指派不同的名稱給它們 ...此錯誤指出您具有名稱相同但存在於不同 Java 套件內的類別名稱或 @XMLType.name 值。 若要防止此錯誤,請新增 @XML.Type.namespace 類別新增至現有的 @XMLType 註釋,以區分 XML 類型。
範例
- 將下列
Bookdata.java檔案複製到暫存目錄。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; } } - 開啟命令提示字元。
- 從您複製
Bookdata.java檔案的目錄執行 schemagen 綱目產生器工具。app_server_root\bin\schemagen.bat Bookdata.java
app_server_root/bin/schemagen.sh Bookdata.java
app_server_root/bin/schemagen Bookdata.java
- 產生 XML 綱目檔
schema1.xsd:<?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>
如需 schemagen 指令的相關資訊,請參閱 JAXB 參照實作文件。