public interface Validator
Validatorクラスは、実行時にコンテンツ・ツリーの検証を制御します。
- 非整列化時の検証
- この検証形式では、XMLデータをJavaコンテンツ・ツリーに非整列化する途中で検出された検証エラーと警告に関する情報をクライアント・アプリケーションは受け取ることができ、ほかの検証形式と完全に交錯します。これを有効または無効にするには、javadocの
Unmarshaller.setValidating
を参照してください。すべてのJAXB 1.0プロバイダは、この操作をサポートする必要があります。- オン・デマンド検証
- この検証形式では、Javaコンテンツ・ツリーで検出された検証エラーおよび警告に関する情報をクライアント・アプリケーションは受け取ることができます。任意の時点で、クライアント・アプリケーションはJavaコンテンツ・ツリー(または、それの任意のサブツリー)に対して
Validator.validate
メソッドを呼び出すことができます。すべてのJAXB 1.0プロバイダは、この操作をサポートする必要があります。- フェイルファスト検証
- この検証形式では、クライアント・アプリケーションは、仕様で定義されたJavaプロパティの型制約に違反するJavaコンテンツ・ツリー変更に関するフィード・バックを即座に受け取ることができます。JAXBプロバイダがこの型の検証をサポートすることは必須ではありません。この型の検証をサポートしているJAXBプロバイダのなかには、クライアント・アプリケーションが実行時のフェイルファスト検証を要求することを許可するかどうかをスキーマ・コンパイル時に決定する必要があるものもあります。
Validatorクラスは、オン・デマンド検証の管理を担当します。Unmarshallerクラスは、非整列化操作中の非整列化時検証の管理を担当します。整列化操作中の検証を有効にする正式なメソッドはありませんが、Marshallerはエラーを検出し、自身に登録されているValidationEventHandlerに報告します。
検証、非整列化、整列化メソッドの呼出しの前に、クライアント・アプリケーションがValidator、Unmarshaller、Marshallerにイベント・ハンドラを設定していない場合、デフォルト・イベント・ハンドラが発生したエラーまたは警告の通知を受け取ります。デフォルト・イベント・ハンドラは、最初のエラーまたは致命的なエラーの検出後、現在の操作を停止させます(警告を受け取ったあとは、続行させることを試みます)。
非整列化、検証、整列化操作中に発生したイベントを処理する方法には、次の3つがあります。
- デフォルト・イベント・ハンドラの使用
- Validator、Unmarshaller、またはMarshallerに対しsetEventHandler APIを介してイベント・ハンドラを指定しなかった場合、デフォルト・イベント・ハンドラが使用されます。
- カスタム・イベント・ハンドラの実装と登録
- 高度なイベント処理を必要とするクライアント・アプリケーションは、ValidationEventHandlerインタフェースを実装し、UnmarshallerまたはValidator、あるいはその両方にそれを登録できます。
ValidationEventCollector
ユーティリティの使用- 利便性の向上のため、非整列化、検証、整列化操作中に作成されたValidationEventオブジェクトを単に収集し、これらをクライアント・アプリケーションにjava.util.Collectionとして返す、特殊なイベント・ハンドラが提供されています。
検証と整形式
前のセクションで説明したように、クライアント・アプリケーションの検証イベント処理設定にしたがって、検証イベントは異なる方法で処理されます。ただし、ある状況では、もはや正常にエラーを検出および報告できないことをJAXBプロバイダが伝えます。これらの場合、JAXBプロバイダはValidationEventの重要度をFATAL_ERRORに設定し、非整列化、検証、整列化操作を終了させることを示します。デフォルト・イベント・ハンドラおよびValidationEventCollectorユーティリティ・クラスは、致命的なエラーが通知されたあと、処理を終了させる必要があります。独自のValidationEventHandlerを提供するクライアント・アプリケーションは、致命的なエラーが通知されたあと、処理を終了させるようにしてください。これに従わない場合、予想外の動作を引き起こす可能性があります。
現在、Validatorに関してすべてのJAXBプロバイダがサポートする必要があるプロパティはありません。しかし、一部のプロバイダは、プロバイダ固有のプロパティの固有のセットをサポートする場合があります。
JAXBContext
, Unmarshaller
, ValidationEventHandler
, ValidationEvent
, ValidationEventCollector
修飾子と型 | メソッドと説明 |
---|---|
ValidationEventHandler |
getEventHandler()
非推奨。
JAXB2.0以降
|
Object |
getProperty(String name)
非推奨。
JAXB2.0以降
|
void |
setEventHandler(ValidationEventHandler handler)
非推奨。
JAXB2.0以降
|
void |
setProperty(String name, Object value)
非推奨。
JAXB2.0以降
|
boolean |
validate(Object subrootObj)
非推奨。
JAXB2.0以降
|
boolean |
validateRoot(Object rootObj)
非推奨。
JAXB2.0以降
|
void setEventHandler(ValidationEventHandler handler) throws JAXBException
検証イベント・ハンドラは、validate
の呼出し中に検証エラーが発生した場合、JAXBプロバイダによって呼び出されます。検証メソッドを呼び出す前にクライアント・アプリケーションが検証イベント・ハンドラを登録していない場合、検証イベントはデフォルトのイベント・ハンドラによって処理されます。デフォルトのイベント・ハンドラは、最初のエラーまたは致命的なエラーの発生後に検証操作を終了させます。
このメソッドをnullパラメータとともに呼び出した場合、Validatorはデフォルト・イベント・ハンドラに戻されます。
handler
- 検証イベント・ハンドラJAXBException
- イベント・ハンドラの設定中にエラーが発生した場合ValidationEventHandler getEventHandler() throws JAXBException
JAXBException
- 現在のイベント・ハンドラの取得中にエラーが発生した場合boolean validate(Object subrootObj) throws JAXBException
クライアント・アプリケーションは、このメソッドを使用して実行時にオン・デマンドでJavaコンテンツ・ツリーを検証できます。このメソッドは、Javaコンテンツ・ツリーの任意のサブツリーを検証するために使用できます。この操作の一部として、グローバル制約チェックは実行されません (ID/IDREF制約など)。
subrootObj
- 検証を開始するオブジェクトJAXBException
- 検証中に予想外の問題が発生した場合ValidationException
- ValidationEventHandler
のhandleEventメソッドからfalseが返されるか、ValidatorがsubrootObjをルートとするコンテンツ・ツリーを検証できない場合IllegalArgumentException
- subrootObjパラメータがnullの場合boolean validateRoot(Object rootObj) throws JAXBException
クライアント・アプリケーションは、このメソッドを使用して実行時にオン・デマンドでJavaコンテンツ・ツリーを検証できます。このメソッドは、Javaコンテンツ・ツリー全体を検証するときに使用されます。この操作の一部として、グローバル制約チェックが実行されます (ID/IDREF制約など)。
rootObj
- 検証を開始するルート・オブジェクトJAXBException
- 検証中に予想外の問題が発生した場合ValidationException
- ValidationEventHandler
のhandleEventメソッドからfalseが返されるか、ValidatorがrootObjをルートとするコンテンツ・ツリーを検証できない場合IllegalArgumentException
- rootObjパラメータがnullの場合void setProperty(String name, Object value) throws PropertyException
name
- 設定するプロパティの名前。この値は、定数フィールドの1つかユーザーが指定した文字列を使用して指定できる。value
- 設定するプロパティの値PropertyException
- 指定したプロパティまたは値の処理中にエラーが発生した場合IllegalArgumentException
- nameパラメータがnullの場合Object getProperty(String name) throws PropertyException
name
- 取得するプロパティの名前PropertyException
- 指定したプロパティまたは値プロパティ名の取得中にエラーが発生した場合IllegalArgumentException
- nameパラメータがnullの場合 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.