クラス JAXBContext
- java.lang.ObjectSE
-
- jakarta.xml.bind.JAXBContext
public abstract class JAXBContext extends ObjectSE
JAXBContext
クラスは、Jakarta XML Binding API へのクライアントのエントリポイントを提供します。これは、Jakarta XML Binding バインディングフレームワーク操作(アンマーシャル、マーシャル、検証)を実装するために必要な XML/Java バインディング情報を管理するための抽象化を提供します。クライアントアプリケーションは通常、newInstance メソッドの次の 2 つのスタイルのいずれかを使用してこのクラスの新しいインスタンスを取得しますが、他の特殊な形式のメソッドも使用できます。
JAXBContext.newInstance( "com.acme.foo:com.acme.bar" )
JAXBContext インスタンスは、コロンで区切られた Java パッケージ名のリストから初期化されます。各 java パッケージには、Jakarta XML Binding マップクラス、スキーマ派生クラス、/ またはユーザーアノテーション付きクラスが含まれています。さらに、java パッケージには、処理する必要のある Jakarta XML Binding パッケージアノテーションが含まれている場合があります。(JLS のセクション 7.4.1「名前付きパッケージ」を参照)。JAXBContext.newInstance( com.acme.foo.Foo.class )
JAXBContext インスタンスは、パラメーターとして渡されたクラスと、これらのクラスから静的に到達可能なクラスで初期化されます。詳細については、newInstance(Class...)
を参照してください。
プロバイダーは、整列化および非整列化メソッドのクライアント呼び出しの前に、
DatatypeConverter.setDatatypeConverter
API を呼び出す必要があります。これは、これらの操作中に使用されるデータ型コンバーターを構成するために必要です。マーシャリング解除
Unmarshaller
クラスは、クライアントアプリケーションに XML データを Java コンテンツオブジェクトのツリーに変換する機能を提供します。unmarshal メソッドを使用すると、スキーマで宣言されたグローバル XML 要素をインスタンスドキュメントのルートとしてアンマーシャリングできます。さらに、unmarshal メソッドを使用すると、スキーマで宣言された型定義を参照する xsi:type 属性の値を持つ認識されないルート要素を、インスタンスドキュメントのルートとして非マーシャリングできます。JAXBContext
オブジェクトを使用すると、一連のスキーマ(contextPath
にリストされている)全体でグローバル要素と型定義をマージできます。スキーマセット内の各スキーマは個別の名前空間に属することができるため、スキーマを非マーシャリングコンテキストに統合するには、名前空間に依存しない必要があります。これは、クライアントアプリケーションが、contextPath
にリストされているスキーマのいずれかのインスタンスである XML ドキュメントをアンマーシャリングできることを意味します。例:JAXBContext jc = JAXBContext.newInstance( "com.acme.foo:com.acme.bar" ); Unmarshaller u = jc.createUnmarshaller(); FooObject fooObj = (FooObject)u.unmarshal( new File( "foo.xml" ) ); // ok BarObject barObj = (BarObject)u.unmarshal( new File( "bar.xml" ) ); // ok BazObject bazObj = (BazObject)u.unmarshal( new File( "baz.xml" ) ); // error, "com.acme.baz" not in contextPath
クライアントアプリケーションは、既存の XML データをマーシャリング解除するのではなく、Java コンテンツツリーを明示的に生成することもできます。すべての Jakarta XML Binding アノテーション付き値クラスについて、アプリケーションはコンストラクターを使用してコンテンツを作成できます。スキーマから派生したインターフェース / 実装クラス、および Jakarta XML Binding アノテーション付きクラスにバインドされていない要素を作成する場合、アプリケーションは、に含まれる各 java パッケージに存在するスキーマから派生した
ObjectFactory
クラスのそれぞれについてアクセスおよび知識を持っている必要があります。contextPath
。スキーマから派生した java クラスごとに、その型のオブジェクトを生成する静的ファクトリメソッドがあります。例: スキーマをコンパイルした後、PurchaseOrder
という名前のスキーマ派生インターフェースを含むパッケージcom.acme.foo
があると想定します。その型のオブジェクトを作成するために、クライアントアプリケーションは次のようなファクトリメソッドを使用します。com.acme.foo.PurchaseOrder po = com.acme.foo.ObjectFactory.createPurchaseOrder();
クライアントアプリケーションがスキーマ派生オブジェクトのインスタンスを取得すると、ミューテーターメソッドを使用してコンテンツを設定できます。
生成された
ObjectFactory
クラスの詳細については、仕様のセクション 4.2 Java パッケージを参照してください。プロバイダーは、各パッケージに、ObjectFactory という名前のそのパッケージに必要なすべてのオブジェクトファクトリメソッドと静的
newInstance( javaContentInterface )
メソッドを含むクラスを生成する必要があります。マーシャリング
Marshaller
クラスは、クライアントアプリケーションに Java コンテンツツリーを XML データに変換する機能を提供します。ファクトリメソッドを使用して手動で作成されたコンテンツツリーをマーシャリングすることと、unmarshal
操作の結果であるコンテンツツリーをマーシャリングすることの間に違いはありません。クライアントは、java コンテンツツリーを XML データにマーシャリングしてjava.io.OutputStream
またはjava.io.Writer
に戻すことができます。あるいは、マーシャリングプロセスは、登録されたContentHandler
への SAX2 イベントストリームを生成するか、DOM ノードオブジェクトを生成することができます。クライアントアプリケーションは、出力エンコーディングと、XML データを完全なドキュメントとしてマーシャリングするかフラグメントとしてマーシャリングするかを制御できます。これは、XML ドキュメントをマーシャル解除してから、マーシャルして戻す簡単な例です。
JAXBContext jc = JAXBContext.newInstance( "com.acme.foo" ); // unmarshal from foo.xml Unmarshaller u = jc.createUnmarshaller(); FooObject fooObj = (FooObject)u.unmarshal( new File( "foo.xml" ) ); // marshal to System.out Marshaller m = jc.createMarshaller(); m.marshal( fooObj, System.out );
検証
Jakarta XML Binding では、
Unmarshaller
に JAXPjavax.xml.validation
SE フレームワークを公開する便利なメソッドが含まれています。詳細については、Unmarshaller.setSchema(javax.xml.validation.Schema)
API を参照してください。Jakarta XML Binding Runtime Framework Compatibility
次の JAXB 1.0 制限は、スキーマをインターフェース / 実装クラスにバインドする場合にのみ適用されます。このバインディングは共通のランタイムシステムを必要としないため、Jakarta XML Binding クライアントアプリケーションは、異なるプロバイダーからのランタイムオブジェクト(
JAXBContext, Marshaller
など)を混在させようとしてはなりません。これは、クライアントアプリケーションが移植可能でないことを意味するのではなく、単に、クライアントがスキーマのコンパイルに使用されたのと同じプロバイダーによって提供されるランタイムシステムを使用する必要があることを意味します。Jakarta XML Binding 実装の発見
JAXBContext
のインスタンスを作成するために、JAXBContext.newInstance(...)
メソッドの 1 つが呼び出されます。JAX-B 実装が検出された後、呼び出しは、元の呼び出しからパラメーターを渡す適切なプロバイダーのメソッドcreateContext(...)
に委譲されます。JAX-B 実装の検出は、
JAXBContext.newInstance
が呼び出されるたびに発生します。ユーザー固有の構成が提供されていない場合は、デフォルトの JAX-B プロバイダーを返す必要があります。実装の検出は、次の手順で構成されます。
- システムプロパティ
JAXB_CONTEXT_FACTORY
が存在する場合、その値はプロバイダーファクトリクラスであると見なされます。ルックアップのこのフェーズでは、Jakarta XML Binding 実装の JVM ごとのオーバーライドを有効にします。 newInstance(Class[], Map)
またはnewInstance(String, ClassLoader, Map)
に渡されるMap<String, ?>
にプロパティJAXB_CONTEXT_FACTORY
が存在する場合、その値は完全修飾プロバイダファクトリクラス名であると見なされます。ルックアップのこのフェーズでは、Jakarta XML Binding 実装の状況に応じた選択が可能になります。JAXBContextFactory
のプロバイダーは、ServiceLoader
SE クラスによって定義されたサービスプロバイダーのロード機能を使用してロードされ、デフォルトのロードメカニズムSEを使用してサービスの実装を見つけてロードしようとします。サービスプロバイダーのロード機能は、現在のスレッドのコンテキストクラスローダーを使用してロードを試みます。コンテキストファクトリ。コンテキストクラスローダーが null の場合、システムクラスローダーが使用されます。
service configuration error
SE の場合、JAXBException
がスローされます。- 最後に、上記のすべてのステップが失敗した場合、ルックアップの残りは指定されていません。とはいえ、推奨される動作は、ハードコードされたプラットフォームのデフォルトの Jakarta XML Binding 実装を単純に探すことです。ルックアップのこのフェーズは、環境が最後の手段として独自の Jakarta XML Binding 実装を持つことができるようにするためのものです。
プロバイダーファクトリクラスが検出されると、コンテキストの作成がその
createContext(...)
メソッドの 1 つに委譲されます。- 導入:
- 1.6、JAXB 1.0
- 作成者:
- Ryan Shoemaker, Sun Microsystems, Inc.
- Kohsuke Kawaguchi, Sun Microsystems, Inc.
- Joe Fialli, Sun Microsystems, Inc.
- 関連事項:
Marshaller
,Unmarshaller
, Java 言語仕様の S 7.4.1「名前付きパッケージ」SE
フィールドサマリー
フィールド 修飾子と型 フィールド 説明 static StringSE
JAXB_CONTEXT_FACTORY
新しいJAXBContext
オブジェクトを作成できるクラスの名前を含むプロパティの名前。
コンストラクターのサマリー
コンストラクター 修飾子 コンストラクター 説明 protected
JAXBContext()
メソッドのサマリー
すべてのメソッド 静的メソッド インスタンスメソッド 抽象メソッド 具象メソッド 修飾子と型 メソッド 説明 Binder<NodeSE>
createBinder()
W3CDOM 用のBinder
を作成します。<T> Binder<T>
createBinder(ClassSE<T> domType)
アソシエイティブ / インプレースアンマーシャリング / マーシャリングに使用できるBinder
オブジェクトを作成します。JAXBIntrospector
createJAXBIntrospector()
Jakarta XML Binding オブジェクトのイントロスペクトに使用できるJAXBIntrospector
オブジェクトを作成します。abstract Marshaller
createMarshaller()
java コンテンツツリーを XML データに変換するために使用できるMarshaller
オブジェクトを作成します。abstract Unmarshaller
createUnmarshaller()
XML データを java コンテンツツリーに変換するために使用できるUnmarshaller
オブジェクトを作成します。void
generateSchema(SchemaOutputResolver outputResolver)
このコンテキストのスキーマドキュメントを生成します。static JAXBContext
newInstance(ClassSE<?>... classesToBeBound)
JAXBContext
クラスの新しいインスタンスを作成します。static JAXBContext
newInstance(ClassSE<?>[] classesToBeBound, MapSE<StringSE,?> properties)
JAXBContext
クラスの新しいインスタンスを作成します。static JAXBContext
newInstance(StringSE contextPath)
JAXBContext
クラスの新しいインスタンスを作成します。static JAXBContext
newInstance(StringSE contextPath, ClassLoaderSE classLoader)
JAXBContext
クラスの新しいインスタンスを作成します。static JAXBContext
newInstance(StringSE contextPath, ClassLoaderSE classLoader, MapSE<StringSE,?> properties)
JAXBContext
クラスの新しいインスタンスを作成します。
メソッドの詳細
newInstance
public static JAXBContext newInstance(StringSE contextPath) throws JAXBException
JAXBContext
クラスの新しいインスタンスを作成します。これは、現在のスレッドのコンテキストクラスローダーで
newInstance(String,ClassLoader)
メソッドを呼び出すための便利なメソッドです。- パラメーター:
contextPath
- コンテキストパス- 戻り値:
JAXBContext
クラスの新しいインスタンス- 例外:
JAXBException
-JAXBContext
の作成中に次のようなエラーが発生した場合- パッケージ内で ObjectFactory.class または jaxb.index のいずれかが見つからない
- contextPath に含まれるグローバル要素間の曖昧さ
- コンテキストファクトリプロバイダープロパティの値が見つからない
- 同じ contextPath 上で異なるプロバイダからのスキーマ派生パッケージを混在させる
- パッケージは
jakarta.xml.bind
モジュールに対して開かれていません
newInstance
public static JAXBContext newInstance(StringSE contextPath, ClassLoaderSE classLoader) throws JAXBException
JAXBContext
クラスの新しいインスタンスを作成します。クライアントアプリケーションは、コロン(':'、\ u003A)で区切られた java パッケージ名のリストであるコンテキストパスを提供する必要があります。これには、スキーマ派生クラスや完全修飾 Jakarta XML Binding アノテーション付きクラスが含まれます。スキーマから派生したコードは、パッケージごとに生成された ObjectFactory.class によって JAXBContext に登録されます。コンテキストパスにリストされる代わりに、プログラマーがアノテーションを付けた Jakarta XML Binding マップクラスを、以下に説明する形式の
jaxb.index
リソースファイルにリストすることもできます。java パッケージには、スキーマから派生したクラスとユーザーアノテーション付きの Jakarta XML Binding クラスの両方を含めることができることに注意してください。さらに、java パッケージには、処理する必要のある Jakarta XML Binding パッケージアノテーションが含まれている場合があります。(JLS のセクション 7.4.1「名前付きパッケージ」を参照)。contextPath にリストされているすべてのパッケージは、次の条件の 1 つまたは両方を満たす必要があります。そうでない場合は、
JAXBException
がスローされます。- ObjectFactory.class が含まれている必要があります
- jaxb.index が含まれている必要があります
jaxb.index の形式
このファイルには、クラス名の改行で区切られたリストが含まれています。スペースとタブ文字、および空白行は無視されます。コメント文字は '#' (0x23); 各行で、最初のコメント文字に続くすべての文字は無視されます。ファイルは UTF-8 でエンコードする必要があります。リストされたクラスから
newInstance(Class...)
で定義されているように到達可能なクラスも、JAXBContext に登録されます。jaxb.index
ファイルで発生するクラス名の制約は次のとおりです。- ".class" で終わらせてはなりません。
- クラス名は、
jaxb.index
ファイルを含むパッケージに関連して解決されます。jaxb.index
ファイルを含むパッケージで直接発生するクラスのみが許可されます。 - 完全修飾クラス名は許可されていません。現在のパッケージに関連する修飾クラス名は、ネストされたクラスまたは内部クラスのみを指定できます。
contextPath
にリストされているさまざまなパッケージ間でグローバル XML 要素名の衝突がある場合、JAXBException
がスローされます。同じコンテキストパス内の複数の Jakarta XML Binding Providers から生成されたインターフェース / impl バインディングを混在させると、
JAXBException
がスローされる可能性があります。Jakarta XML Binding 実装の検出に関連する手順は、クラス javadoc で説明されています。
- パラメーター:
contextPath
- スキーマ派生クラスおよび / または java からスキーマ(Jakarta XML Binding アノテーション付き)にマップされたクラスを含む java パッケージ名のリスト。名前付きモジュールにあるcontextPath
のパッケージは、少なくともjakarta.xml.bind
モジュールに対してopen
である必要があります。classLoader
- このクラスローダーは、実装クラスを見つけるために使用されます。- 戻り値:
JAXBContext
の新しいインスタンス- 例外:
JAXBException
-JAXBContext
の作成中に次のようなエラーが発生した場合- パッケージ内で ObjectFactory.class または jaxb.index のいずれかが見つからない
- contextPath に含まれるグローバル要素間の曖昧さ
- コンテキストファクトリプロバイダープロパティの値が見つからない
- 同じ contextPath 上で異なるプロバイダからのスキーマ派生パッケージを混在させる
- パッケージは
jakarta.xml.bind
モジュールに対して開かれていません
newInstance
public static JAXBContext newInstance(StringSE contextPath, ClassLoaderSE classLoader, MapSE<StringSE,?> properties) throws JAXBException
JAXBContext
クラスの新しいインスタンスを作成します。これは
newInstance(String, ClassLoader)
とほとんど同じですが、このバージョンでは、プロバイダー固有のプロパティを渡してJAXBContext
のインスタンス化を構成できます。プロパティの解釈は実装次第です。実装は、理解できないプロパティを見つけた場合、
JAXBException
をスローする必要があります。- パラメーター:
contextPath
- スキーマ派生クラスおよび / または java からスキーマ(Jakarta XML Binding アノテーション付き)にマップされたクラスを含む java パッケージ名のリスト。名前付きモジュールにあるcontextPath
のパッケージは、少なくともjakarta.xml.bind
モジュールに対してopen
である必要があります。classLoader
- このクラスローダーは、実装クラスを見つけるために使用されます。properties
- プロバイダー固有またはプロバイダー選択固有のプロパティ。null にすることができます。これは、空のマップを渡すことと同じことを意味します。- 戻り値:
JAXBContext
の新しいインスタンス- 例外:
JAXBException
-JAXBContext
の作成中に次のようなエラーが発生した場合- パッケージ内で ObjectFactory.class または jaxb.index のいずれかが見つからない
- contextPath に含まれるグローバル要素間の曖昧さ
- コンテキストファクトリプロバイダープロパティの値が見つからない
- 同じ contextPath 上で異なるプロバイダからのスキーマ派生パッケージを混在させる
- パッケージは
jakarta.xml.bind
モジュールに対して開かれていません
- 導入:
- 1.6、JAXB 2.0
newInstance
public static JAXBContext newInstance(ClassSE<?>... classesToBeBound) throws JAXBException
JAXBContext
クラスの新しいインスタンスを作成します。クライアントアプリケーションは、新しいコンテキストオブジェクトが認識する必要のあるクラスのリストを提供する必要があります。新しいコンテキストは、指定されたすべてのクラスを認識するだけでなく、指定されたクラスから静的に直接 / 間接的に参照されるすべてのクラスも認識します。参照クラスのサブクラスも
@XmlTransient
参照クラスも JAXBContext に登録されていません。例: 次の Java コードでは、newInstance(Foo.class)
を実行すると、新しく作成されたJAXBContext
はFoo
とBar
の両方を認識しますが、Zot
またはFooBar
は認識しません。class Foo { @XmlTransient FooBar c; Bar b; } class Bar { int x; } class Zot extends Bar { int y; } class FooBar { }
一般的なクライアントアプリケーションでは、最上位クラスを指定するだけで済みますが、注意が必要です。JAXBContext に登録されている java パッケージごとに、オプションのパッケージアノテーションが存在する場合は、処理する必要があることに注意してください。(JLS のセクション 7.4.1「名前付きパッケージ」を参照)。
Jakarta XML Binding 実装の検出に関連する手順は、クラス javadoc で説明されています。
- パラメーター:
classesToBeBound
- 新しいJAXBContext
によって認識される java クラスのリスト。名前付きモジュールにあるclassesToBeBound
のクラスは、少なくともjakarta.xml.bind
モジュールに対してopen
であるパッケージに含まれている必要があります。空にすることができます。その場合、仕様で定義されたクラスについてのみ知っているJAXBContext
が返されます。- 戻り値:
JAXBContext
の新しいインスタンス。- 例外:
JAXBException
-JAXBContext
の作成中に次のようなエラーが発生した場合(ただしこれらに限定されません):- Jakarta XML Binding の実装は発見されませんでした
- クラスが Jakarta XML Binding アノテーションを誤って使用する
- クラスには衝突するアノテーションがあります (つまり、同じ型名の 2 つのクラス)
- Jakarta XML Binding 実装は、プロバイダー固有の帯域外情報を見つけることができませんでした (開発時に生成された追加ファイルなど。)
classesToBeBound
はjakarta.xml.bind
モジュールに対して開かれていません
IllegalArgumentExceptionSE
- パラメーターにnull
が含まれている場合 (つまり、newInstance(null);
)- 導入:
- 1.6、JAXB 2.0
newInstance
public static JAXBContext newInstance(ClassSE<?>[] classesToBeBound, MapSE<StringSE,?> properties) throws JAXBException
JAXBContext
クラスの新しいインスタンスを作成します。この
JAXBContext
のインスタンス化のために「プロパティ」を構成するためのnewInstance(Class...)
のオーバーロード。プロパティの解釈は実装次第です。実装は、理解できないプロパティを見つけた場合、
JAXBException
をスローする必要があります。- パラメーター:
classesToBeBound
- 新しいJAXBContext
によって認識される java クラスのリスト。名前付きモジュールにあるclassesToBeBound
のクラスは、少なくともjakarta.xml.bind
モジュールに対してopen
であるパッケージに含まれている必要があります。空にすることができます。その場合、仕様で定義されたクラスについてのみ知っているJAXBContext
が返されます。properties
- プロバイダー固有またはプロバイダー選択固有のプロパティ。null にすることができます。これは、空のマップを渡すことと同じことを意味します。- 戻り値:
JAXBContext
の新しいインスタンス。- 例外:
JAXBException
-JAXBContext
の作成中に次のようなエラーが発生した場合(ただしこれらに限定されません):- Jakarta XML Binding の実装は発見されませんでした
- クラスが Jakarta XML Binding アノテーションを誤って使用する
- クラスには衝突するアノテーションがあります (つまり、同じ型名の 2 つのクラス)
- Jakarta XML Binding 実装は、プロバイダー固有の帯域外情報を見つけることができませんでした (開発時に生成された追加ファイルなど。)
classesToBeBound
はjakarta.xml.bind
モジュールに対して開かれていません
IllegalArgumentExceptionSE
- パラメーターにnull
が含まれている場合 (つまり、newInstance(null,someMap);
)- 導入:
- 1.6、JAXB 2.0
createUnmarshaller
public abstract Unmarshaller createUnmarshaller() throws JAXBException
XML データを java コンテンツツリーに変換するために使用できるUnmarshaller
オブジェクトを作成します。- 戻り値:
Unmarshaller
オブジェクト- 例外:
JAXBException
-Unmarshaller
オブジェクトの作成中にエラーが発生した場合
createMarshaller
public abstract Marshaller createMarshaller() throws JAXBException
java コンテンツツリーを XML データに変換するために使用できるMarshaller
オブジェクトを作成します。- 戻り値:
Marshaller
オブジェクト- 例外:
JAXBException
-Marshaller
オブジェクトの作成中にエラーが発生した場合
createBinder
public <T> Binder<T> createBinder(ClassSE<T> domType)
アソシエイティブ / インプレースアンマーシャリング / マーシャリングに使用できるBinder
オブジェクトを作成します。- 型パラメーター:
T
- DOM API 型- パラメーター:
domType
- DOM Node クラスを渡して、使用する DOM API を選択します- 戻り値:
- 常に新しい有効な
Binder
オブジェクト。 - 例外:
UnsupportedOperationExceptionSE
-domType
に対応する DOMAPI が実装でサポートされていない場合。- 導入:
- 1.6、JAXB 2.0
createBinder
public Binder<NodeSE> createBinder()
W3CDOM 用のBinder
を作成します。- 戻り値:
- 常に新しい有効な
Binder
オブジェクト。 - 導入:
- 1.6、JAXB 2.0
createJAXBIntrospector
public JAXBIntrospector createJAXBIntrospector()
Jakarta XML Binding オブジェクトのイントロスペクトに使用できるJAXBIntrospector
オブジェクトを作成します。- 戻り値:
- null 以外の有効な
JAXBIntrospector
オブジェクトを常に返します。 - 例外:
UnsupportedOperationExceptionSE
- JAXB 1.0 実装でこのメソッドを呼び出すと、UnsupportedOperationException がスローされます。- 導入:
- 1.6、JAXB 2.0
generateSchema
public void generateSchema(SchemaOutputResolver outputResolver) throws IOExceptionSE
このコンテキストのスキーマドキュメントを生成します。- パラメーター:
outputResolver
- このオブジェクトは、スキーマの送信先となる出力を制御します。- 例外:
IOExceptionSE
-SchemaOutputResolver
がIOException
SE をスローした場合。UnsupportedOperationExceptionSE
- JAXB 1.0 実装でこのメソッドを呼び出すと、UnsupportedOperationException がスローされます。- 導入:
- 1.6、JAXB 2.0