18 JAXB Class Generatorの使用
Java Architecture for XML Binding (JAXB) Class Generatorの使用方法について説明します。
注意:
新規アプリケーションに対してJava Architecture for XML Binding (JAXB) Class Generatorを使用し、Extensible Markup Language (XML)データに対するオブジェクト・バインディング機能を利用します。Oracle9i Class Generator for Javaは非推奨です。Oracle Database 10gでは、下位互換性を保つためにOracle9iのClass Generatorがサポートされています。
18.1 JAXB Class Generatorの概要
次のトピックでは、前提条件、標準と仕様、マーシャリングとアンマーシャリング、検証、カスタマイズなど、JAXB Class Generatorの概要を紹介します。
18.1.1 JAXB Class Generatorの使用の前提条件
JAXB Class Generatorを使用するための前提条件を示します。
この章では、次の内容を理解していることを前提としています。
-
Java Architecture for XML Binding (JAXB)。この章で説明する内容よりも詳細なJAXBの概要は、「関連ドキュメント」に記載されているXMLの資料を参照してください。
-
XMLスキーマ言語。概要および関連資料へのリンクは、「XML Schema Processor for Javaの使用」を参照してください。
18.1.2 JAXB Class Generatorの標準および仕様
Oracle JAXBプロセッサは、Java Community Process (JCP)の推奨によるJSR-31「The Java Architecture for XML Binding (JAXB)」バージョン1.0を実装しています。
Oracle XML Developer's Kit (XDK)でのJAXB 1.0仕様の実装では、次のオプション機能はサポートされていません。
-
Javadocの生成
-
フェイルファスト検証
-
外部カスタマイズ・ファイル
-
仕様のセクションE.2で説明されているXML Schemaの概念
関連項目:
18.1.3 JAXB Class Generatorの機能
JAXB Class Generator for Javaでは、XMLスキーマに対応するインタフェースおよび実装クラスを生成します。Java開発者にとっての主な利点は、XML文書とJavaコード間のマッピングの自動化です。この機能により、生成されたコードをプログラムで使用して、XMLデータの読取り、操作および再作成ができます。
Javaクラスは拡張可能で、開発者は基礎となるXMLデータ構造に関する知識がなくてもXMLデータにアクセスできます。
Oracle JAXB Class Generatorを使用すると、JavaでのXMLアプリケーション開発に次の利点がもたらされます。
-
迅速性
スキーマからコードへの変換が自動化されるため、入力XMLスキーマからJavaコードを迅速に生成できます。
-
使いやすさ
自身でコードを最初から作成するかわりに、生成された
getおよびsetメソッドを起動できます。 -
自動化されたデータ変換
Javaデータ型へのXML文書データの変換を自動化できます。
-
カスタマイズ
JAXBには、XMLの要素と属性のバインディングをカスタマイズできる柔軟なフレームワークが用意されています。
18.1.4 JAXBを使用したマーシャリングおよびアンマーシャリング
JAXBは、XMLデータからJavaオブジェクトへのマップを行うアプリケーション・プログラミング・インタフェース(API)およびツール・セットです。JAXBは、XML文書をJava形式のプログラムで表すことにより、JavaプログラムからXML文書へのアクセスを簡略化します。
JAXB APIおよびツールを使用して、次の基本タスクを実行できます。
-
orajaxbコマンドライン・ユーティリティを使用して、XMLスキーマからJAXBクラスを生成し、コンパイルします。JAXB Class Generatorを使用してJavaクラスを生成するには、XMLスキーマを提供する必要があります。Document Type Definitions (DTD)はJAXBでサポートされません。ただし、「DTDからXMLスキーマへの変換」で説明しているように、
DTD2Schemaプログラムを使用してDTDをXMLスキーマに変換できます。後でJAXB Class Generatorを使用して、スキーマからクラスを生成できます。JAXBコンパイラは、ソースXMLスキーマの制約にマップされるJavaクラスを生成します。クラスで実装される
getおよびsetメソッドを使用して、スキーマの各種要素および属性のデータを取得および指定できます。 -
生成されたクラスをJavaプログラムでインスタンス化することにより、XML文書を処理します。
具体的には、JAXBバインディング・フレームワークを使用するプログラムを作成して、次のタスクを実行できます。
-
XML文書をアンマーシャリングします。
JAXB仕様で説明されているように、アンマーシャリングとは、XML文書からJavaによって生成されたオブジェクトにデータを移動することと定義されています。
-
XML文書を検証します。
コンテンツをコンテンツ・ツリーにアンマーシャリングする前またはアンマーシャリング中に、検証を行うことができます。Javaオブジェクトに対して検証APIを起動することにより、検証をオンデマンドで行うこともできます。「JAXBでの検証」を参照してください。
-
Javaコンテンツ・オブジェクトを変更します。
データ・オブジェクトのコンテンツ・ツリーは、ソースXML文書の構造とコンテンツを表します。クラスに対して定義されている
setメソッドを使用して、要素と属性のコンテンツを変更できます。 -
Javaコンテンツ・オブジェクトをXMLにマーシャリングします。
アンマーシャリングとは対照的に、マーシャリングとは、Javaクラスのインスタンスのコンテンツ・ツリーを全検索することによって、JavaオブジェクトからXML文書を作成することです。Document Object Model (DOM)ツリー、Simple API for XML (SAX)コンテンツ・ハンドラ、変換結果または出力ストリームにデータをシリアライズできます。
-
18.1.5 JAXBでの検証
Javaコンテンツ・ツリーは、ツリーのマーシャリングによって有効なXML文書が生成されるときに、XMLスキーマで有効であるとみなされます。
JAXBアプリケーションでは、次の状況で検証を実行できます。
-
アンマーシャリング時検証では、アンマーシャリング時のエラーおよび警告がアプリケーションに通知されます。アンマーシャリングに、エラーのない検証が含まれている場合、入力XML文書とJavaコンテンツ・ツリーは有効です。
-
オンデマンド検証は、アプリケーションによって開始された場合、Javaコンテンツ・ツリーに対して実行されます。
-
フェイルファスト検証は、
setおよびgetメソッドを使用したJavaコンテンツ・ツリーの更新中に即時結果を戻します。「JAXB Class Generatorの標準および仕様」で示されているように、フェイルファスト検証はJAXB 1.0仕様のオプション機能であり、JAXB Class GeneratorのXDK実装ではサポートされていません。
JAXBアプリケーションは、有効なJavaコンテンツ・ツリーをマーシャリングできる必要がありますが、マーシャリングAPIを起動する前にJavaコンテンツ・ツリーが有効であることを確認する必要はありません。マーシャリング・プロセス自体は、コンテンツ・ツリーを検証しません。プログラムで行う必要があるのは、無効なコンテンツによりマーシャリングが失敗したときにjavax/xml/bind/MarshalExceptionをスローする場合です。
18.1.6 JAXBのカスタマイズ
XMLスキーマで宣言された要素と型名は、常に最も有用なJavaクラス名を提供するとはかぎりません。JAXB仕様で説明されているカスタム・バインディング宣言を使用して、デフォルトのJAXBバインディングをオーバーライドできます。
これらの宣言により、XMLスキーマのXML固有の制約を超えて、生成されたJAXBクラスをカスタマイズして、クラス名とパッケージ名のマッピングなどのJava固有の改良点を含めることができます。
スキーマに注釈を加えて、次のカスタマイズを実行できます。
-
XML名をユーザー定義のJavaクラス名にバインドします。
-
パッケージ、導出クラスおよびメソッドに名前を付けます。
-
どの要素をどのクラスにバインドするかを選択します。
-
各属性および要素宣言を適切なコンテンツ・クラスのプロパティにバインドする方法を決定します。
-
各属性値のタイプまたはコンテンツ仕様を選択します。
表18-2に、JAXBのカスタマイズを示すデモ・プログラムをいくつか示します。
関連項目:
カスタマイズ・デモの詳細な説明は、「最上位レベル要素でのクラス名のカスタマイズ」を参照してください
18.2 JAXB Class Generatorの使用: 概要
このトピックでは、JAXBプロセッサの使用の基本プロセス、XML Schema Processorのデモ・プログラムの実行、およびJAXB Class Generatorコマンドライン・ユーティリティの使用について説明します。
18.2.1 JAXBプロセッサの使用: 基本プロセス
XDK JAXB APIの基本プロセスについて説明します。
XDK JAXB APIでは、次のパッケージが公開されています。
-
javax.xml.bindは、アンマーシャリング、マーシャリングおよび検証を含むクライアント・アプリケーションのランタイム・バインディング・フレームワークを提供します。 -
javax.xml.bind.utilは、役に立つクライアント・ユーティリティ・クラスを提供します。
表18-1に、javax.xml.bindパッケージの最も重要なクラスおよびインタフェースを示します。これらのクラスおよびインタフェースは、ほとんどのJAXBアプリケーションのコアを形成します。
表18-1 javax.xml.bindのクラスおよびインタフェース
| クラス/インタフェース | 説明 | メソッド |
|---|---|---|
|
|
JAXBバインディング・フレームワーク操作(アンマーシャリング、マーシャリングおよび検証)の実装に必要なXML/Javaバインディング情報の管理の抽象化を提供します。クライアント・アプリケーションは、 |
主要なメソッドは次のとおりです。
|
|
|
Javaコンテンツ・ツリーのXMLデータへのシリアライズのプロセスを管理します。 |
主要なメソッドは次のとおりです。
|
|
|
XMLデータを新規に作成されたJavaコンテンツ・ツリーにデシリアライズし、オプションとしてXMLデータのアンマーシャリング時に検証を行うプロセスを管理します。 |
主要なメソッドは次のとおりです。
|
|
|
実行時のコンテンツ・ツリーの検証を制御します。具体的には、このインタフェースはオンデマンド検証を制御します。オンデマンド検証により、クライアントは、Javaコンテンツ・ツリーで検出された検証エラーおよび警告に関するデータを受け取ることができます。 |
主要なメソッドは次のとおりです。
|
図18-1に、JAXB Class Generatorを使用するフレームワークのプロセス・フローを示します。
図18-1に示したプロセスの基本ステージは次のとおりです。
関連項目:
-
JAXB APIの詳細は、Oracle Database XML Java APIリファレンスを参照してください
-
JAXB処理の詳細な説明は、「JAXB Class Generatorを使用したXMLの処理」を参照してください
18.2.2 XML Schema Processorのデモ・プログラムの実行
JAXB Class Generator for Javaのデモ・プログラムは、$ORACLE_HOME/xdk/demo/java/jaxbにあります。
表18-2に、XDKに含まれるJAXBのデモを具体的に示します。
表18-2 JAXB Class Generatorのデモ
| プログラム | Oracleホーム内のサブディレクトリ | デモの内容 . . . |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
別の最上位レベルの |
|
|
|
最上位レベルの名前付きグループを参照する |
|
|
|
|
|
|
|
アトミック・データ型のバインディング。 |
|
|
|
|
|
|
|
2つの異なる名前空間で宣言されている要素と型のバインディング。 |
|
|
|
Javaパッケージ名のカスタマイズ。 |
|
|
|
最上位レベル要素のクラス名のカスタマイズ。このプログラムの詳細な説明は、「最上位レベル要素でのクラス名のカスタマイズ」を参照してください。 |
|
|
|
|
|
|
|
属性名のカスタマイズ。 |
|
|
|
グローバル |
|
|
|
TypeSafe Enumクラス名のカスタマイズ。 |
サンプル・プログラムのコンパイルおよび実行方法を説明するドキュメントは、同じディレクトリ内のREADMEにあります。この場合、基本的なステップは次のようになります。
-
ディレクトリを
$ORACLE_HOME/xdk/demo/java/jaxbディレクトリ(UNIXの場合)または%ORACLE_HOME%\xdk\demo\java\jaxbディレクトリ(Windowsの場合)に変更します。 -
「XDK for Java環境の設定」の説明に従って、環境変数が設定されていることを確認します。
-
システム・プロンプトで
make(UNIXの場合)またはMake.bat(Windowsの場合)を実行します。makeユーティリティは、各サンプル・サブディレクトリに対して次の順次アクションを実行します。-
orajaxbユーティリティを実行して、入力XMLスキーマに基づくJavaクラス・ファイルを生成します。ほとんどのデモでは、出力クラス・ファイルはgeneratedサブディレクトリに書き込まれます。たとえば、makeファイルはSample1サブディレクトリ内のsample1.xsdスキーマに対して次のコマンドを実行します。cd ./Sample1; $(JAVA_HOME)/bin/java -classpath "$(MAKE_CLASSPATH)" \ oracle.xml.jaxb.orajaxb -schema sample1.xsd -targetPkg generated; echo;
-
javacユーティリティを実行してJavaクラスをコンパイルします。たとえば、makeユーティリティはSample1/generated/サブディレクトリ内のJavaクラス・ファイルに対して次のコマンドを実行します。cd ./Sample1/generated; $(JAVA_HOME)/bin/javac -classpath \ "$(MAKE_CLASSPATH)" *.java
-
javacユーティリティを実行して、前のステップでコンパイルされたクラスを使用するサンプルJavaアプリケーションをコンパイルします。たとえば、makeユーティリティはSampleApp1.javaプログラムをコンパイルします。cd ./Sample1; $(JAVA_HOME)/bin/javac -classpath "$(MAKE_CLASSPATH)" \ SampleApp1.java
-
サンプルJavaアプリケーションを実行し、結果をログ・ファイルに書き込みます。たとえば、
makeユーティリティはSampleApp1クラスを実行し、出力をsample1.outに書き込みます。cd ./Sample1; $(JAVA_HOME)/bin/java -classpath "$(MAKE_CLASSPATH)" \SampleApp1 > sample1.out
-
18.2.3 JAXB Class Generatorコマンドライン・ユーティリティの使用
XDKには、入力XMLスキーマからJavaクラスを生成するコマンドラインJavaインタフェースであるorajaxbが含まれています。シェル・スクリプト$ORACLE_HOME/bin/orajaxbおよび%ORACLE_HOME%\bin\orajaxb.batは、クラスoracle.xml.jaxb.orajaxbを実行します。
orajaxbを使用するには、CLASSPATHが「XDK for Java環境の設定」の説明に従って設定されていることを確認します。
表18-3に、orajaxbのコマンドライン・オプションを示します。
表18-3orajaxbのコマンドライン・オプション
| オプション | 用途 |
|---|---|
|
- |
ヘルプ・メッセージを出力します。 |
|
- |
バージョン番号を出力します。 |
|
- |
Javaソース・ファイルの生成先ディレクトリを指定します。スキーマに名前空間がある場合、プログラムでは、outputDirから参照されるパッケージ(名前空間に対応)にJavaコードが生成されます。デフォルトでは、現在のディレクトリは |
|
- |
入力XMLスキーマを指定します。 |
|
- |
ターゲット・パッケージ名を指定します。このオプションは、パッケージ名のバインディング・カスタマイズと、JAXB仕様で定義されているデフォルトのパッケージ名アルゴリズムをオーバーライドします。 |
|
- |
インタフェースのみを生成します。 |
|
- |
生成されたクラスおよびインタフェースをリストします。 |
|
- |
デフォルトのカスタマイズ・ファイルを生成します。 |
|
- |
ベンダー固有の拡張を許可し、JAXB 1.0仕様の付録E.2に指定されている互換性ルールに厳密には従いません。これが指定されている場合、プログラムでは、表記法、置換グループ、属性など、JAXB 1.0でサポートされていない機能は無視されます。 |
18.2.3.1 JAXB Class Generatorコマンドライン・ユーティリティの使用: 例
この例では、JAXB Class Generatorコマンドライン・ユーティリティの使用方法を示します。
orjaxbをテストするには、$ORACLE_HOME/xdk/demo/java/jaxb/Sample1ディレクトリに変更します。makeを実行した場合、ディレクトリには次のファイルが含まれます。
SampleApp1.class
SampleApp1.java
generated/
sample1.out
sample1.xml
sample1.xsd
ファイルsample.xsdは、XML文書sample1.xmlに関連付けられているXMLスキーマです。サブディレクトリgenerated/には、入力スキーマから生成されたクラスが含まれます。generated/のコンテンツを削除し、クラスを再生成することにより、orajaxbをテストできます。
rm generated/*
orajaxb -schema sample1.xsd -targetPkg generated -verbose
端末には次の出力が表示されます。
generated/CType.java
generated/AComplexType.java
generated/AnElement.java
generated/RElemOfCTypeInSameNs.java
generated/RType.java
generated/RElemOfSTypeInSameNs.java
generated/CTypeImpl.java
generated/AComplexTypeImpl.java
generated/AnElementImpl.java
generated/RElemOfCTypeInSameNsImpl.java
generated/RTypeImpl.java
generated/RElemOfSTypeInSameNsImpl.java
generated/ObjectFactory.java18.3 JAXB Class Generatorを使用したXMLの処理
次のトピックでは、複合型のバインディングと最上位レベル要素でのクラス名のカスタマイズについて説明します。
18.3.1 複合型のバインディング
Sample3.javaは、複合型定義をJavaコンテンツ・インタフェースにバインドする方法を示しています。XMLスキーマで定義されている1つの複合型は、別の複合型からの拡張によって導出されます。
18.3.1.1 sample3.xmlを検証するスキーマの定義
XML文書schema3.xmlを検証するためのXMLスキーマschema3.xsdを定義します。
例18-1に、サンプル・アプリケーションへの入力を提供するXMLデータ文書を示します。sample3.xml文書では、従業員の住所を記述します。
例18-2に示すXMLスキーマは、sample3.xmlの検証に使用する構造を定義します。スキーマでは、次のように定義されている2つの複合型と1つの要素を定義します。
-
Addressという名前の最初の複合型は要素のシーケンスです。シーケンスで定義されている各要素は、住所の一部(名前、ドア番号など)を表します。 -
USAddressという名前の2番目の複合型は、<extension base="exp:Address">要素を使用して、Addressシーケンスに州や郵便番号などの米国固有の要素を追加することによりAddressを拡張します。接頭辞expは、http://www.oracle.com/sample3/名前空間を指定します。 -
要素は
myAddressという名前で、その型はexp:USAddressです。接頭辞expは、http://www.oracle.com/sample3/名前空間を指定します。sample3.xmlでは、最上位レベル要素myAddressは名前空間http://www.oracle.com/sample3/にあり、スキーマ定義に準拠します。
例18-1 sample3.xml
<?xml version="1.0"?>
<myAddress xmlns = "http://www.oracle.com/sample3/"
xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation = "http://www.oracle.com/sample3 sample3.xsd">
<name>James Bond</name>
<doorNumber>420</doorNumber>
<street>Oracle parkway</street>
<city>Redwood shores</city>
<state>CA</state>
<zip>94065</zip>
<country>United States</country>
</myAddress>
例18-2 sample3.xsd
<?xml version="1.0"?>
<!-- Binding a complex type definition to java content interface
The complex type definition is derived by extension
-->
<schema xmlns = "http://www.w3.org/2001/XMLSchema"
xmlns:exp="http://www.oracle.com/sample3/"
targetNamespace="http://www.oracle.com/sample3/"
elementFormDefault="qualified">
<complexType name="Address">
<sequence>
<element name="name" type="string"/>
<element name="doorNumber" type="short"/>
<element name="street" type="string"/>
<element name="city" type="string"/>
</sequence>
</complexType>
<complexType name="USAddress">
<complexContent>
<extension base="exp:Address">
<sequence>
<element name="state" type="string"/>
<element name="zip" type="integer"/>
<element name="country" type="string"/>
</sequence>
</extension>
</complexContent>
</complexType>
<element name="myAddress" type="exp:USAddress"/>
</schema>18.3.1.2 Javaクラスの生成およびコンパイル
XML文書および対応するXMLスキーマがある場合、処理の次のステージは、XMLスキーマからJavaクラスを生成することです。
「JAXB Class Generatorコマンドライン・ユーティリティの使用」で説明したJAXBコマンドライン・インタフェースを使用して、このタスクを実行できます。
「XDK for Java環境の設定」の説明に従って環境が設定されていると想定した場合、次のようにgeneratedパッケージにソース・ファイルを作成できます。
cd $ORACLE_HOME/xdk/demo/java/jaxb/Sample3 orajaxb -schema sample1.xsd -targetPkg generated
前のorajaxbコマンドでは、./generated/サブディレクトリに次のソース・ファイルが作成されます。
Address.java AddressImpl.java MyAddress.java MyAddressImpl.java ObjectFactory.java USAddress.java USAddressImpl.java
要素MyAddressと同様に、複合型AddressおよびUSAddressには、それぞれ2つのソース・ファイルが関連付けられています。要素に基づいて名前が付けられたソース・ファイルには、インタフェースが含まれます。接尾辞がImplのファイルには、インタフェースを実装するクラスが含まれます。たとえば、Address.javaにはインタフェースAddressが含まれますが、AddressImpl.javaにはAddressを実装するクラスが含まれます。
Address.javaソース・ファイルのコンテンツを例18-3に示します。
Address複合型では、要素のシーケンス(name、doorNumber、streetおよびcity)を定義しました。したがって、Addressインタフェースには、4つの各要素に対するgetおよびsetメソッド署名が含まれます。たとえば、インタフェースには、<name>要素内のデータを取得するためのgetName()およびこの要素内のデータを変更するためのsetName()が含まれます。
Javaソース・ファイルはjavacを使用して次のようにコンパイルできます。
cd $ORACLE_HOME/xdk/demo/java/jaxb/Sample3/generated javac *.java
例18-3 Address.java
package generated;
public interface Address
{
public void setName(java.lang.String n);
public java.lang.String getName();
public void setDoorNumber(short d);
public short getDoorNumber();
public void setStreet(java.lang.String s);
public java.lang.String getStreet();
public void setCity(java.lang.String c);
public java.lang.String getCity();
}
18.3.1.3 sample3.xmlのXMLデータの処理
Sample3.javaでは、XMLデータ文書をアンマーシャリングしてマーシャリングし、生成されたクラスを使用して住所データを出力および変更します。
これは、「Javaクラスの生成およびコンパイル」で生成したJavaクラス・ファイルを使用してsample3.xml文書を処理する方法を示しています。
Sample3.javaプログラムでは、データを次のように処理します。
18.3.2 最上位レベル要素でのクラス名のカスタマイズ
Sample10.javaプログラムは、JAXBカスタマイズの形式の1つを示します。プログラムでは、入力XMLスキーマの要素に対応するクラスの名前を変更できることを示します。
18.3.2.1 schema10.xmlを検証するスキーマの定義
XML文書schema10.xmlを検証するためのXMLスキーマschema10.xsdを定義します。
例18-4に、サンプル・アプリケーションへの入力を提供するXMLデータ文書を示します。sample10.xml文書は業務を記述します。
例18-5に、sample10.xmlの構造を定義するXMLスキーマを示します。スキーマでは、次のように1つの複合型と1つの要素を定義します。
-
businessTypeという名前の複合型は要素のシーケンスです。シーケンスで定義されている各要素は、業務の一部(タイトル、所有者およびID)を表します。 -
businessという名前の要素の型はbiz:businessTypeです。biz接頭辞は、http://jaxbcustomized/sample10/名前空間を指定します。sample10.xmlでは、最上位レベル要素businessは名前空間http://jaxbcustomized/sample10/にあり、スキーマ定義に準拠します。
例18-4 sample10.xml
<?xml version="1.0"?> <business xmlns="http://jaxbcustomized/sample10/"> <title>Software Development</title> <owner>Larry Peterson</owner> <id>45123</id> </business>
例18-5 sample10.xsd
<?xml version="1.0"?>
<!-- Customization of class name in top level element -->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://jaxbcustomized/sample10/"
xmlns:biz="http://jaxbcustomized/sample10/"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
jaxb:version="1.0"
elementFormDefault="qualified">
<element name="business" type="biz:businessType">
<annotation>
<appinfo>
<jaxb:class name="myBusiness"/>
</appinfo>
</annotation>
</element>
<complexType name="businessType">
<sequence>
<element name="title" type="string"/>
<element name="owner" type="string"/>
<element name="id" type="integer"/>
</sequence>
</complexType>
</schema>18.3.2.1.1 スキーマ・バインディングのカスタマイズ
XMLスキーマsample10.xsdで使用されるバインディングのカスタマイズについて説明します。
例18-5に示したスキーマは、インライン・バインディング宣言を使用して、business要素のバインディングをカスタマイズします。インライン・カスタマイズの一般的な形式は次のとおりです。
<xs:annotation>
<xs:appinfo>
.
.
binding declarations
.
.
</xs:appinfo>
</xs:annotation>
例18-5では、<class>バインディング宣言を使用してスキーマ要素をJavaクラス名にバインドしています。宣言を使用して、インタフェースの名前またはインタフェースを実装するクラスをカスタマイズできます。JAXB Class Generatorでは、<class>カスタマイズに対して次の構文をサポートしています。
<class [ name = "className"] >
name属性では、導出されたJavaインタフェースの名前を指定します。例18-5には、次のカスタマイズが含まれます。
<jaxb:class name="myBusiness"/>
このため、スキーマはbusiness要素をデフォルトのインタフェースbusinessではなくインタフェースmyBusinessにバインドします。
18.3.2.2 Javaクラスの生成およびコンパイル
XML文書および対応するXMLスキーマがある場合、次のステージは、XMLスキーマからJavaクラスを生成することです。JAXBコマンドライン・インタフェースを使用して、このタスクを実行できます。
「XDK for Java環境の設定」の説明に従って環境が設定されている場合、次のようにgeneratedパッケージにソース・ファイルを作成できます。
cd $ORACLE_HOME/xdk/demo/java/jaxb/Sample10 orajaxb -schema sample10.xsd
前述のコマンドはターゲット・パッケージを指定しないため、パッケージ名はスキーマのターゲット名前空間(http://jaxbcustomized/sample10/)から作成されます。したがって、ユーティリティでは、./jaxbcustomized/sample10/サブディレクトリに次のソース・ファイルが生成されます。
BusinessType.java BusinessTypeImpl.java MyBusiness.java MyBusinessImpl.java ObjectFactory.java
複合型businessTypeにはBusinessType.javaおよびBusinessTypeImpl.javaという2つのソース・ファイルがあります。JAXBのカスタマイズにより、business要素はインタフェースMyBusinessにバインドされ、クラスMyBusinessImplを実装しています。
BusinessType.javaソース・ファイルのコンテンツを例18-6に示します。
BusinessType複合型では、要素のシーケンス(title、ownerおよびid)を定義しました。したがって、Addressインタフェースには、各要素に対するgetおよびsetメソッド署名が含まれます。たとえば、インタフェースには、<title>要素内のデータを取得するためのgetTitle()およびこの要素内のデータを変更するためのsetTitle()が含まれます。
Javaソース・ファイルはjavacを使用して次のようにコンパイルできます。
cd $ORACLE_HOME/xdk/demo/java/jaxb/Sample10/jaxbcustomized/sample10 javac *.java
例18-6 BusinessType.java
package jaxbcustomized.sample10;
public interface BusinessType
{
public void setTitle(java.lang.String t);
public java.lang.String getTitle();
public void setOwner(java.lang.String o);
public java.lang.String getOwner();
public void setId(java.math.BigInteger i);
public java.math.BigInteger getId();
}
18.3.2.3 sample10.xmlのXMLデータの処理
Sample10.javaでは、XML文書をアンマーシャリングし、そのコンテンツを出力し、XMLを標準出力にマーシャリングします。
Sample10.javaは、「Javaクラスの生成およびコンパイル」で生成したクラス・ファイルを使用してsample10.xml文書のデータを処理する方法を示しています。
Sample10.javaプログラムでは、XMLデータを次のように処理します。
