public interface ValidatorValidator クラスは、実行時のコンテンツツリーの検証を制御するロールを果たします。
- Unmarshal-Time 検証
- この形式の検証により、クライアントアプリケーションは、XML データを Java コンテンツツリーにマーシャリング解除するときに検出された検証エラーと警告に関する情報を受け取ることができ、他の型の検証と完全に直交します。有効または無効にするには、
Unmarshaller.setValidatingの javadoc を参照してください。この操作をサポートするには、すべての JAXB 1.0 プロバイダーが必要です。- オンデマンド検証
- この形式の検証により、クライアントアプリケーションは、Java コンテンツツリーで検出された検証エラーと警告に関する情報を受け取ることができます。クライアントアプリケーションはいつでも、Java コンテンツツリー(またはそのサブツリー)で
Validator.validateメソッドを呼び出すことができます。この操作をサポートするには、すべての JAXB 1.0 プロバイダーが必要です。- フェイルファスト検証
- この形式の検証により、クライアントアプリケーションは、仕様で定義されている Java プロパティの型制約に違反する Java コンテンツツリーへの変更に関するフィードバックを即座に受け取ることができます。Jakarta XML Binding Providers は、この型の検証をサポートする必要はありません。この型の検証をサポートする Jakarta XML Binding Providers の中には、クライアントアプリケーションが実行時にフェイルファスト検証をリクエストできるかどうかをスキーマのコンパイル時に決定する必要がある場合があります。
Validator クラスは、オンデマンド検証の管理を担当します。Unmarshaller クラスは、アンマーシャル操作中のアンマーシャル時間検証の管理を担当します。マーシャル操作中に検証を有効にする正式な方法はありませんが、Marshaller はエラーを検出する場合があり、エラーは登録されている ValidationEventHandler に報告されます。
クライアントアプリケーションが、validate、unmarshal、marshal メソッドを呼び出す前にValidator、Unmarshaller、Marshallerにイベントハンドラーを設定しない場合、デフォルトのイベントハンドラーは、発生したエラーまたは警告の通知を受け取ります。デフォルトのイベントハンドラーは、最初のエラーまたは致命的なエラーが発生した後、現在の操作を停止させます(ただし、警告を受け取った後は続行を試みます)。
アンマーシャル、検証、マーシャル操作中に発生したイベントを処理するには、次の 3 つの方法があります。
- デフォルトのイベントハンドラーを使用する
Validator、Unmarshaller、MarshallerのsetEventHandlerAPI を介してイベントハンドラーを指定しない場合は、デフォルトのイベントハンドラーが使用されます。- カスタムイベントハンドラーを実装して登録する
- 高度なイベント処理を必要とするクライアントアプリケーションは、
ValidationEventHandlerインターフェースを実装し、UnmarshallerまたはValidator、あるいはその両方に登録できます。ValidationEventCollectorユーティリティを使用する- 便宜上、アンマーシャル、検証、マーシャル操作中に作成された
ValidationEventオブジェクトを収集し、java.util.Collectionとしてクライアントアプリケーションに返す専用のイベントハンドラーが提供されています。
検証と整形式
検証イベントは、前のセクションで説明したように、クライアントアプリケーションが処理するように構成されている方法に応じて異なる方法で処理されます。ただし、Jakarta XML Binding Provider が、エラーを確実に検出して報告することができなくなったことを示す場合があります。このような場合、Jakarta XML Binding Provider は ValidationEvent の重大度を FATAL_ERROR に設定して、アンマーシャル、検証、マーシャル操作を終了する必要があることを示します。デフォルトのイベントハンドラーと
ValidationEventCollectorユーティリティクラスは、致命的なエラーが通知された後、処理を終了する必要があります。独自のValidationEventHandlerを提供するクライアントアプリケーションも、致命的なエラーが通知された後、処理を終了する必要があります。そうしないと、予期しない動作が発生する可能性があります。
現在、Validator のすべての Jakarta XML Binding Providers でサポートする必要のあるプロパティはありません。ただし、一部のプロバイダーは、独自のプロバイダー固有のプロパティのセットをサポートしている場合があります。
JAXBContext, Unmarshaller, ValidationEventHandler, ValidationEvent, ValidationEventCollector| 修飾子と型 | メソッドと説明 |
|---|---|
ValidationEventHandler | getEventHandler() 使用すべきではありません。 JAXB2.0 以降 |
ObjectSE | getProperty(StringSE name) 使用すべきではありません。 JAXB2.0 以降 |
void | setEventHandler(ValidationEventHandler handler) 使用すべきではありません。 JAXB2.0 以降 |
void | setProperty(StringSE name, ObjectSE value) 使用すべきではありません。 JAXB2.0 以降 |
boolean | validate(ObjectSE subrootObj) 使用すべきではありません。 JAXB2.0 以降 |
boolean | validateRoot(ObjectSE rootObj) 使用すべきではありません。 JAXB2.0 以降 |
void setEventHandler(ValidationEventHandler handler) throws JAXBException
検証イベントハンドラーは、validate の呼び出し中に検証エラーが発生した場合、Jakarta XML Binding Provider によって呼び出されます。クライアントアプリケーションが validate メソッドを呼び出す前に検証イベントハンドラーを登録しない場合、検証イベントはデフォルトのイベントハンドラーによって処理され、最初のエラーまたは致命的なエラーが発生した後に検証操作が終了します。
null パラメーターを指定してこのメソッドを呼び出すと、バリデーターはデフォルトのデフォルトのイベントハンドラーに戻ります。
handler - 検証イベントハンドラー JAXBException - イベントハンドラーの設定中にエラーが発生した場合 ValidationEventHandler getEventHandler() throws JAXBException
JAXBException - 現在のイベントハンドラーの取得中にエラーが発生した場合 boolean validate(ObjectSE subrootObj) throws JAXBException
subrootObj で始まる Java コンテンツツリーを検証します。クライアントアプリケーションは、このメソッドを使用して、実行時にオンデマンドで Java コンテンツツリーを検証できます。このメソッドは、Java コンテンツツリーの任意のサブツリーを検証するために使用できます。グローバル制約チェックは、この操作の一部としては実行されません(つまり、ID/IDREF 制約)。
subrootObj - 検証を開始する objsubrootObj をルートとするサブツリーが有効な場合は true、それ以外の場合は falseJAXBException - 検証中に予期しない問題が発生した場合 ValidationException - ValidationEventHandler が handleEvent メソッドから false を返す場合、または Validator が subrootObj をルートとするコンテンツツリーを検証できない場合 IllegalArgumentExceptionSE - subrootObj パラメーターが NULL の場合 boolean validateRoot(ObjectSE rootObj) throws JAXBException
rootObj をルートとする Java コンテンツツリーを検証します。クライアントアプリケーションは、このメソッドを使用して、実行時にオンデマンドで Java コンテンツツリーを検証できます。このメソッドは、Java コンテンツツリー全体を検証するために使用されます。グローバル制約チェック は、この操作の一部として実行されます(つまり、ID/IDREF 制約)。
rootObj - 検証を開始するルートオブジェクト rootObj をルートとするツリーが有効な場合は true、それ以外の場合は falseJAXBException - 検証中に予期しない問題が発生した場合 ValidationException - ValidationEventHandler が handleEvent メソッドから false を返す場合、または Validator が rootObj をルートとするコンテンツツリーを検証できない場合 IllegalArgumentExceptionSE - rootObj パラメーターが NULL の場合 void setProperty(StringSE name, ObjectSE value) throws PropertyException
Validator の基礎となる実装で特定のプロパティを設定します。このメソッドは、上記の標準 Jakarta XML Binding 定義プロパティの 1 つ、またはプロバイダー固有のプロパティを設定するためにのみ使用できます。未定義のプロパティを設定しようとすると、PropertyException がスローされます。サポートされているプロパティを参照してください。name - 設定するプロパティの名前。この値は、定数フィールドの 1 つまたはユーザー指定の文字列を使用して指定できます。value - 設定するプロパティの値 PropertyException - 指定されたプロパティまたは値の処理中にエラーが発生した場合 IllegalArgumentExceptionSE - name パラメーターが null の場合 ObjectSE getProperty(StringSE name) throws PropertyException
Validator の基礎となる実装で特定のプロパティを取得します。このメソッドは、上記の標準 Jakarta XML Binding 定義プロパティの 1 つ、またはプロバイダー固有のプロパティを取得するためにのみ使用できます。未定義のプロパティを取得しようとすると、PropertyException がスローされます。サポートされているプロパティを参照してください。name - 取得するプロパティの名前 PropertyException - 指定されたプロパティまたは値のプロパティ名の取得中にエラーが発生した場合 IllegalArgumentExceptionSE - name パラメーターが null の場合 Copyright © 2018,2020 Eclipse Foundation.
Use is subject to license terms.