クラス 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.setDatatypeConverterAPI を呼び出す必要があります。これは、これらの操作中に使用されるデータ型コンバーターを構成するために必要です。マーシャリング解除
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.validationSE フレームワークを公開する便利なメソッドが含まれています。詳細については、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のプロバイダーは、ServiceLoaderSE クラスによって定義されたサービスプロバイダーのロード機能を使用してロードされ、デフォルトのロードメカニズムSEを使用してサービスの実装を見つけてロードしようとします。サービスプロバイダーのロード機能は、現在のスレッドのコンテキストクラスローダーを使用してロードを試みます。コンテキストファクトリ。コンテキストクラスローダーが null の場合、システムクラスローダーが使用されます。
service configuration errorSE の場合、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 StringSEJAXB_CONTEXT_FACTORY新しいJAXBContextオブジェクトを作成できるクラスの名前を含むプロパティの名前。
コンストラクターの概要
コンストラクター 修飾子 コンストラクター 説明 protectedJAXBContext()
メソッドのサマリー
すべてのメソッド 静的メソッド インスタンスメソッド 抽象メソッド 具象メソッド 修飾子と型 メソッド 説明 Binder<NodeSE>createBinder()W3CDOM 用のBinderを作成します。<T> Binder<T>createBinder(ClassSE<T> domType)アソシエイティブ / インプレースアンマーシャリング / マーシャリングに使用できるBinderオブジェクトを作成します。JAXBIntrospectorcreateJAXBIntrospector()Jakarta XML Binding オブジェクトのイントロスペクトに使用できるJAXBIntrospectorオブジェクトを作成します。abstract MarshallercreateMarshaller()java コンテンツツリーを XML データに変換するために使用できるMarshallerオブジェクトを作成します。abstract UnmarshallercreateUnmarshaller()XML データを java コンテンツツリーに変換するために使用できるUnmarshallerオブジェクトを作成します。voidgenerateSchema(SchemaOutputResolver outputResolver)このコンテキストのスキーマドキュメントを生成します。static JAXBContextnewInstance(ClassSE<?>... classesToBeBound)JAXBContextクラスの新しいインスタンスを作成します。static JAXBContextnewInstance(ClassSE<?>[] classesToBeBound, MapSE<StringSE,?> properties)JAXBContextクラスの新しいインスタンスを作成します。static JAXBContextnewInstance(StringSE contextPath)JAXBContextクラスの新しいインスタンスを作成します。static JAXBContextnewInstance(StringSE contextPath, ClassLoaderSE classLoader)JAXBContextクラスの新しいインスタンスを作成します。static JAXBContextnewInstance(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がIOExceptionSE をスローした場合。UnsupportedOperationExceptionSE- JAXB 1.0 実装でこのメソッドを呼び出すと、UnsupportedOperationException がスローされます。- 導入:
- 1.6、JAXB 2.0