首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

XMLBeans 入門教程(一):從 XML Schema 生成 Java 類、編譯 JAR 與項目集成

     編輯:Java 綜合教學

XMLBeans 入門教程(一):從 XML Schema 生成 Java 類、編譯 JAR 與項目集成

XMLBeans 是 Apache 開源的 XML-Java 綁定框架,將 XML Schema (XSD) 編譯為強類型 Java 類,提供比 DOM/SAX 更友好的面向對象操作體驗。本文記錄從下載、環境配置、Schema 生成、scomp 編譯到獲取 Java 類的完整流程。

一、下載與環境配置

  • 下載地址:https://archive.apache.org/dist/xml/xmlbeans/xmlbeans-current.zip(最新 2.6.0)。
  • 解壓後目錄結構:
    xmlbeans-2.6.0/
    ├── bin/          # scomp、xsdconfig 等工具
    ├── lib/          # 運行時依賴 jar
    ├── docs/         # 文檔
    └── schemas/      # 示例 schema
    
  • 配置環境變量:
    • XMLBEANS_HOME=E:\xmlbeans-2.6.0
    • PATH=%PATH%;%XMLBEANS_HOME%\bin

二、準備 XML 數據與 Schema

1. 示例 XML (customers.xml)

<?xml version="1.0" encoding="UTF-8"?>
<Customers>
  <customer>
    <id>1</id>
    <gender>female</gender>
    <firstname>Jessica</firstname>
    <lastname>Lim</lastname>
    <phoneNumber>1234567</phoneNumber>
    <address>
      <primaryAddress>
        <postalCode>350106</postalCode>
        <addressLine1>#25-1</addressLine1>
        <addressLine2>SHINSAYAMA 2-CHOME</addressLine2>
      </primaryAddress>
      <billingAddress>
        <receiver>Ms Danielle</receiver>
        <postalCode>350107</postalCode>
        <addressLine1>#167</addressLine1>
        <addressLine2>NORTH TOWER HARBOUR CITY</addressLine2>
      </billingAddress>
    </address>
  </customer>
  <customer>...</customer>
</Customers>

2. 手寫/工具生成 XSD (customer.xsd)

可用 XMLSpy、Stylus Studio 由 XML 反推 XSD,或手寫。關鍵點:elementFormDefault="qualified"、複雜類型嵌套定義。

<xs:schema xmlns:xs="https://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
  <xs:element name="Customers">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="customer" type="customerType" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:complexType name="customerType">
    <xs:sequence>
      <xs:element name="id" type="xs:int"/>
      <xs:element name="gender" type="xs:string"/>
      <xs:element name="firstname" type="xs:string"/>
      <xs:element name="lastname" type="xs:string"/>
      <xs:element name="phoneNumber" type="xs:string"/>
      <xs:element name="address" type="addressType"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="addressType">
    <xs:sequence>
      <xs:element name="primaryAddress" type="primaryAddressType"/>
      <xs:element name="billingAddress" type="billingAddressType"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="primaryAddressType">
    <xs:sequence>
      <xs:element name="postalCode" type="xs:string"/>
      <xs:element name="addressLine1" type="xs:string"/>
      <xs:element name="addressLine2" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="billingAddressType">
    <xs:sequence>
      <xs:element name="receiver" type="xs:string"/>
      <xs:element name="postalCode" type="xs:string"/>
      <xs:element name="addressLine1" type="xs:string"/>
      <xs:element name="addressLine2" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:schema>

三、配置 xsdconfig 指定包名

創建 customer.xsdconfig,指定生成類的包路徑:

<xb:config xmlns:xb="https://xml.apache.org/xmlbeans/2004/02/xbean/config">
  <xb:namespace>
    <xb:package>sample.xmlbean</xb:package>
  </xb:namespace>
</xb:config>

四、使用 scomp 編譯生成 JAR 與源碼

命令語法

scomp [options] [schemaFile.xsd] [xsdconfig]
主要參數:
-src [dir]       生成的 Java 源碼目錄
-srconly         僅生成源碼,不編譯、不產生 JAR
-out [jarFile]   生成的 JAR 文件名(默認 xmltypes.jar)
-compiler [path] javac 路徑(含空格需加引號)

實際執行命令

E:\xmlbeans-2.6.0> scomp -src build/src -out E:/xmlbeans-2.6.0/customerXmlBean.jar ^
  schemas/customer/customer.xsd -compiler "C:/Program Files/Java/jdk1.7.0_04/bin/javac" ^
  schemas/customer/customer.xsdconfig

注意:路徑含空格必須用雙引號包裹;Windows 下用 ^ 換行,Linux 用 \。

五、生成產物解析

所有類實現 XmlObject 接口,提供 xmlText()、save(OutputStream)、validate() 等方法。

六、Maven 項目集成(推薦)

手動 scomp 適合學習,生產環境建議用 xmlbeans-maven-plugin 自動化:

<plugin>
  <groupId>org.apache.xmlbeans</groupId>
  <artifactId>xmlbeans-maven-plugin</artifactId>
  <version>2.6.0</version>
  <configuration>
    <schemaDirectory>src/main/resources/xsd</schemaDirectory>
    <generatePackage>com.example.xmlbean</generatePackage>
  </configuration>
  <executions>
    <execution>
      <goals><goal>compile</goal></goals>
    </execution>
  </executions>
</plugin>

將 .xsd 放入 src/main/resources/xsd,執行 mvn compile 自動生成類到 target/generated-sources/xmlbeans。

七、常見問題

  1. scomp 报错 "package not found":檢查 xsdconfig 中包名拼寫、命名空間 URI 是否與 XSD 一致。
  2. 生成類衝突:多個 XSD 定義同名類型 → 在 xsdconfig 中為不同命名空間指定不同包名。
  3. 運行時缺少 xmlbeans jar:需添加 xmlbeans-2.6.0.jar 到 classpath(Maven 自動傳遞)。
  4. 大文件內存溢出:XMLBeans 全量加載 DOM,大文件建議用 StAX/SAX 流式解析。

下一步預告

下一篇將演示如何使用生成的 Java 類進行 XML 的讀取、修改、驗證、寫入全流程操作,敬請期待。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
生成類/接口對應 XML 節點說明
CustomersDocument<Customers> 根元素整個 XML 文檔入口,提供 getCustomers()
CustomerType<customer>客戶對象,含 id、gender、name、address 等屬性
AddressType<address>地址對象
PrimaryAddressType<primaryAddress>首要地址
BillingAddressType<billingAddress>帳單地址,含 receiver