目次へ

2005.10.14 株式会社四次元データ 小野彩子

9.3 クラスの生成

それでは、JAXBを使用して、XMLのスキーマからクラスを生成してみましょう。例として、従業員情報を取り上げます。従業員情報は、以下のようにXMLで表します。

employees.xml
<?xml version="1.0"?>
<employees>
  <employee>
    <name>山田太郎</name>
    <nameKana>ヤマダタロウ</nameKana>
    <section>開発部</section>
  </employee>
  <employee>
    <name>海野次郎</name>
    <nameKana>ウミノジロウ</nameKana>
    <section>営業部</section>
  </employee>
  
...

</employees>
この従業員情報のスキーマをXML Schemaで記述すると、以下のようになります。
employees.xsd
<?xml version="1.0" encoding="EUC-JP"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
	     xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" jaxb:version="1.0">
  <xs:element name="employees">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="employee" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:element name="employee">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="name" type="xs:string"/>
        <xs:element name="nameKana" type="xs:string"/>
        <xs:element name="section" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

JAXBは、このようなXMLのスキーマから従業員を表すEmployeeクラスなどを自動生成します。自動生成されたクラスを使用すれば、JavaBeanを使うのと同じ感覚でXMLの編集が可能になります。クラスを生成するには、以下のコマンドを実行します。

$xjc.sh -p test.jaxb employees.xsd -d .

「xjc.sh」を使用して、スキーマからクラスを生成します。「xjc.sh」スクリプトは$JWSDP_HOME/jaxb/binディレクトリにあります。「-p」オプションでは、生成するクラスを格納するパッケージを指定します。ここでは、「test.jaxb」を指定しましたので、生成されるクラスは「test.jaxb」パッケージ、またはそのサブパッケージに存在することになります。次に、スキーマファイル名を指定します。最後に、生成するクラスファイルを格納するディレクトリを指定します。ここでは、カレントディレクトリに生成することにします。コマンドを実行すると、以下のように表示されます。

$xjc.sh -p test.jaxb employees -d .



parsing a schema...
compiling a schema...
test/jaxb/impl/runtime/NamespaceContext2.java
test/jaxb/impl/runtime/UnmarshallerImpl.java
test/jaxb/impl/runtime/GrammarInfoFacade.java
test/jaxb/impl/runtime/UnmarshallableObject.java
test/jaxb/impl/runtime/ErrorHandlerAdaptor.java
test/jaxb/impl/runtime/UnmarshallingEventHandlerAdaptor.java
test/jaxb/impl/runtime/MarshallerImpl.java
test/jaxb/impl/runtime/XMLSerializable.java
test/jaxb/impl/runtime/AbstractUnmarshallingEventHandlerImpl.java
test/jaxb/impl/runtime/DefaultJAXBContextImpl.java
test/jaxb/impl/runtime/SAXUnmarshallerHandler.java
test/jaxb/impl/runtime/Discarder.java
test/jaxb/impl/runtime/UnmarshallingContext.java
test/jaxb/impl/runtime/UnmarshallingEventHandler.java
test/jaxb/impl/runtime/PrefixCallback.java
test/jaxb/impl/runtime/ValidatingUnmarshaller.java
test/jaxb/impl/runtime/ValidationContext.java
test/jaxb/impl/runtime/ContentHandlerAdaptor.java
test/jaxb/impl/runtime/SAXUnmarshallerHandlerImpl.java
test/jaxb/impl/runtime/GrammarInfo.java
test/jaxb/impl/runtime/SAXMarshaller.java
test/jaxb/impl/runtime/NamespaceContextImpl.java
test/jaxb/impl/runtime/MSVValidator.java
test/jaxb/impl/runtime/Util.java
test/jaxb/impl/runtime/ValidatableObject.java
test/jaxb/impl/runtime/GrammarInfoImpl.java
test/jaxb/impl/runtime/XMLSerializer.java
test/jaxb/impl/runtime/ValidatorImpl.java
test/jaxb/impl/EmployeeImpl.java
test/jaxb/impl/EmployeeTypeImpl.java
test/jaxb/impl/EmployeesImpl.java
test/jaxb/impl/EmployeesTypeImpl.java
test/jaxb/impl/JAXBVersion.java
test/jaxb/Employee.java
test/jaxb/EmployeeType.java
test/jaxb/Employees.java
test/jaxb/EmployeesType.java
test/jaxb/ObjectFactory.java
test/jaxb/jaxb.properties
test/jaxb/bgm.ser

ずいぶんたくさんのクラスのソースファイルが生成されます。実際に操作を行うのは、コマンド実行時にオプションで指定したパッケージ「test.jaxb」に含まれる「Employee」や「Employees」です。Employeesクラスはemployees要素、Employeeクラスはemployee要素を表すクラスになっています。これらのクラスを使用して、XML文書を読み込んだり、作成したりする方法については、次回以降に説明します。

(実習課題2)

以下の商品情報を表すXMLのSchemaを作成しなさい。またJAXBを使用して、作成したスキーマよりクラスを生成しなさい。

product.xml
<?xml version="1.0"?>
<products>
  <product>
    <name>ゼロからはじめるJava</name>
    <price>1905</price>
  </product>
  <product>
    <name>ゼロからはじめるJ2EE</name>
    <price>2095</price>
  </product>
  
...

</products>

解答例はこちら

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp