public abstract class SchemaFactory extends Object
Schemaオブジェクトを作成するファクトリです。 API検証のエントリ・ポイントです。
SchemaFactoryはスキーマ・コンパイラです。 スキーマの外部表現を読み取り、それらを検証のために準備します。
SchemaFactoryクラスはスレッドに対して安全ではありません。 つまり、アプリケーション側で、どのような場合もSchemaFactoryオブジェクトを使用するスレッドが1つだけであるようにする必要があります。 実装では、メソッドにsynchronizedのマークを付けて、障害のあるクライアントから保護することをお勧めします。
SchemaFactoryは再入不可能です。 newSchemaメソッドの1つが呼び出されているときに、アプリケーションは、同じスレッドからであっても、newSchemaメソッドを再帰的に呼び出すことはできません。
この仕様は名前空間URIを使用して、スキーマ言語を指定します。 次の表に、この仕様によって定義された値を示します。
仕様に準拠するために、実装でサポートする必要があるのはW3C XML Schema 1.0のみです。 ただし、ここに示したその他のスキーマ言語をサポートする場合は、この仕様に説明する関連の動作に従う必要があります。
ここに示していないスキーマ言語では、独自のURIを導入して、それらを表すことが期待されます。 SchemaFactoryクラスは実行時に、ほかのスキーマ言語のほかの実装を見つけることができます。
XML DTDは、構文解析プロセスに強く結び付けられており、構文解析プロセスに大きな影響を与えるため、DTD検証を構文解析から独立したプロセスとして定義することはできません。 このため、この仕様では、XML DTDのセマンティックスを定義しません。 これは、適切と思われる方法での実装を禁止するものではありませんが、このインタフェースに実装されたDTD検証を、必ずXML 1.0で定義されるXML DTDセマンティックスから引き離すようにしてください。
| value | language |
|---|---|
XMLConstants.W3C_XML_SCHEMA_NS_URI ("http://www.w3.org/2001/XMLSchema") |
W3C XML Schema 1.0 |
XMLConstants.RELAXNG_NS_URI ("http://relaxng.org/ns/structure/1.0") |
RELAX NG 1.0 |
| 修飾子 | コンストラクタ | 説明 |
|---|---|---|
protected |
SchemaFactory() |
派生クラスのコンストラクタです。
|
| 修飾子と型 | メソッド | 説明 |
|---|---|---|
abstract ErrorHandler |
getErrorHandler() |
この
SchemaFactoryに設定されている現在のErrorHandlerを取得します。 |
boolean |
getFeature(String name) |
機能フラグの値を検索します。
|
Object |
getProperty(String name) |
プロパティ値を検索します。
|
abstract LSResourceResolver |
getResourceResolver() |
この
SchemaFactoryに設定されている現在のLSResourceResolverを取得します。 |
abstract boolean |
isSchemaLanguageSupported(String schemaLanguage) |
指定されたスキーマがこの
SchemaFactoryにサポートされているかを返します。 |
static SchemaFactory |
newInstance(String schemaLanguage) |
指定されたスキーマ言語をサポートする
SchemaFactoryの実装を検索し、それを返します。 |
static SchemaFactory |
newInstance(String schemaLanguage, String factoryClassName, ClassLoader classLoader) |
クラス名から
SchemaFactoryの新しいインスタンスを取得します。 |
abstract Schema |
newSchema() |
特殊な
Schemaオブジェクトを作成します。 |
Schema |
newSchema(File schema) |
指定された
Fileをスキーマとして構文解析し、それをSchemaとして返します。 |
Schema |
newSchema(Source schema) |
指定されたソースをスキーマとして構文解析し、それをスキーマとして返します。
|
abstract Schema |
newSchema(Source[] schemas) |
指定されたソースをスキーマとして構文解析し、それをスキーマとして返します。
|
Schema |
newSchema(URL schema) |
指定された
URLをスキーマとして構文解析し、それをSchemaとして返します。 |
abstract void |
setErrorHandler(ErrorHandler errorHandler) |
newSchemaメソッドの呼出しで発生したエラーを受け取るようにErrorHandlerを設定します。 |
void |
setFeature(String name, boolean value) |
この
SchemaFactory、このファクトリによって作成されたSchema、さらにそれらのSchemaによって作成されたValidatorおよびValidatorHandlerの機能を設定します。 |
void |
setProperty(String name, Object object) |
プロパティ値を設定します。
|
abstract void |
setResourceResolver(LSResourceResolver resourceResolver) |
スキーマの構文解析時にリソース解決をカスタマイズするように
LSResourceResolverを設定します。 |
protected SchemaFactory()
派生クラスのコンストラクタです。
このコンストラクタは何も行いません。
派生クラスでは、null ErrorHandlerおよびnull LSResourceResolverを持つSchemaFactoryオブジェクトを作成する必要があります。
public static SchemaFactory newInstance(String schemaLanguage)
指定されたスキーマ言語をサポートするSchemaFactoryの実装を検索し、それを返します。
指定されたスキーマ言語のSchemaFactoryオブジェクトを検索する場合、このメソッドは「クラス・ローダー」がコンテキスト・クラス・ローダーを参照する次の順番で、次の場所を調べます。
"javax.xml.validation.SchemaFactory:schemaLanguage"が存在する(schemaLanguageはこのメソッドのパラメータ)場合、その値はクラス名として読み取られます。 このメソッドは、クラス・ローダーを使用してこのクラスの新しいインスタンスの作成を試み、成功した場合はそれを返します。
$java.home/lib/jaxp.propertiesが読み取られ、上記のシステム・プロパティであるキーに関連付けられている値が検索されます。 値が存在すれば、上記のように値が処理されます。
ServiceLoaderクラスで定義されているサービス・プロバイダのロード機能を使用して、デフォルトのロード・メカニズムによってサービスの実装の特定およびロードを試みる。サービス・プロバイダのロード機能は、現在のスレッドのコンテキスト・クラス・ローダーを使用してサービスのロードを試みる。 コンテキスト・クラス・ローダーがnullの場合、システム・クラス・ローダーが使用されます。 isSchemaLanguageSupported(String schemaLanguage)を実装している必要があります。 ServiceConfigurationErrorが発生した場合、SchemaFactoryConfigurationErrorがスローされます。
SchemaFactoryは、実装固有の方法で配置されます。 W3C XML Schema用のプラットフォームのデフォルトSchemaFactoryがある必要があります。
すべてが失敗した場合、IllegalArgumentExceptionがスローされます。
トラブルシューティングのヒント:
プロパティ・ファイルがどのように構文解析されるかについては、Properties.load(java.io.InputStream)を参照してください。 特に、コロン「:」は、プロパティ・ファイル内でエスケープされる必要があるため、スキーマ言語URIが適切にエスケープされていることを確認してください。 たとえば、
http\://www.w3.org/2001/XMLSchema=org.acme.foo.XSSchemaFactory
schemaLanguage - 返されるSchemaFactoryが理解するスキーマ言語を指定する。 指定できる値については使用可能なスキーマ言語のリストを参照。 SchemaFactoryの新しいインスタンスIllegalArgumentException - 使用可能なスキーマ言語の実装がない場合。NullPointerException - schemaLanguageパラメータがnullである場合。SchemaFactoryConfigurationError - 構成エラーが発生した場合。newInstance(String schemaLanguage, String factoryClassName, ClassLoader classLoader)public static SchemaFactory newInstance(String schemaLanguage, String factoryClassName, ClassLoader classLoader)
クラス名からSchemaFactoryの新しいインスタンスを取得します。 指定されたファクトリ・クラス名が指定されたスキーマ言語をサポートする場合、SchemaFactoryが返されます。 この関数は、クラス・パスに複数のプロバイダがある場合に便利です。 どのプロバイダがロードされるかを指定できるため、アプリケーションをさらに制御できます。
jaxp.debugシステム・プロパティを設定すると、このメソッドは実行中の処理や検索している場所に関する大量のデバッグ・メッセージをSystem.errに出力します。
問題がある場合、次のようにします。
java -Djaxp.debug=1 YourProgram ....
schemaLanguage - 返されるSchemaFactoryが理解するスキーマ言語を指定する。 指定できる値については使用可能なスキーマ言語のリストを参照。 factoryClassName - javax.xml.validation.SchemaFactoryの実装を提供する完全指定のファクトリ・クラス名。classLoader - ファクトリ・クラスのロードに使用されるClassLoader。 nullの場合は、現在のThreadのコンテキストclassLoaderが、ファクトリ・クラスのロードに使用されます。 SchemaFactoryの新しいインスタンスIllegalArgumentException - factoryClassNameがnullの場合。または、ファクトリ・クラスをロードおよびインスタンス化できない場合。または、ファクトリ・クラスがschemLanguageパラメータで指定されたスキーマ言語をサポートしない場合。NullPointerException - schemaLanguageパラメータがnullである場合。newInstance(String schemaLanguage)public abstract boolean isSchemaLanguageSupported(String schemaLanguage)
指定されたスキーマがこのSchemaFactoryにサポートされているかを返します。
schemaLanguage - 返されるSchemaFactoryが理解するスキーマ言語を指定する。schemaLanguageは有効なスキーマ言語を指定する必要がある。SchemaFactoryがschemaLanguageをサポートしている場合はtrue、そうでない場合はfalse。NullPointerException - schemaLanguageがnullの場合。IllegalArgumentException - schemaLanguage.length()== 0またはschemaLanguageが有効なスキーマ言語を指定しない場合。public boolean getFeature(String name) throws SAXNotRecognizedException, SAXNotSupportedException
機能名は完全指定URIです。 SchemaFactoryは機能名を認識できますが、一時的にその値を返すことはできません。
独自のURIに基づいて作成された名前を使って、実装者が独自の機能を作成することもできます(推奨)。
name - 機能名。null以外の完全指定URIで表される。SAXNotRecognizedException - 機能値を割り当てられない、または取得できない場合。SAXNotSupportedException - SchemaFactoryが機能名を認識するだけで、現時点ではその値を判断できない場合。NullPointerException - nameがnullの場合。setFeature(String, boolean)public void setFeature(String name, boolean value) throws SAXNotRecognizedException, SAXNotSupportedException
このSchemaFactory、このファクトリによって作成されたSchema、さらにそれらのSchemaによって作成されたValidatorおよびValidatorHandlerの機能を設定します。
実装時および開発時には、newSchema()によって返される特別なSchemaオブジェクトの処理方法に特に注意するようにします。 たとえば、場合によっては、SchemaFactoryとクラスが、異なる実装からのスキーマを実際にロードするときに、SchemaFactoryの機能を自動的に継承できないことがあります。 開発時には、セキュリティ処理などの機能を両方の場所で明示的に設定するようにしてください。
機能名は完全指定URIです。 SchemaFactoryは機能の値を表示できますが、現在の値を変更することはできません。
実装はすべて、XMLConstants.FEATURE_SECURE_PROCESSING機能をサポートしている必要があります。 この機能については次のとおりです。
true: 実装は実装限界に準拠するXML処理を制限します。 例には、エンティティ拡張制限や大容量のリソースを消費するXMLスキーマが含まれます。 セキュリティ上の理由からXML処理が制限される場合は、登録済みのErrorHandler.fatalError(SAXParseException exception)へ呼出しを介して報告されます。 setErrorHandler(ErrorHandler errorHandler)を参照してください。
false: 実装は実装限界に関係なく、XML仕様に従ってXMLを処理します。
name - 機能名。null以外の完全指定URIで表される。value - 機能の要求された値(trueまたはfalse)。SAXNotRecognizedException - 機能値を割り当てられない、または取得できない場合。SAXNotSupportedException - SchemaFactoryが機能名を認識するだけで、要求された値を設定できない場合。NullPointerException - nameがnullの場合。getFeature(String)public void setProperty(String name, Object object) throws SAXNotRecognizedException, SAXNotSupportedException
プロパティ名は完全指定URIです。 SchemaFactoryはプロパティ名を認識できますが、現在の値を変更することはできません。
JAXP 1.5またはそれ以降を実装する実装はすべて、XMLConstants.ACCESS_EXTERNAL_DTDおよびXMLConstants.ACCESS_EXTERNAL_SCHEMAプロパティをサポートしている必要があります。
スキーマ・ファイル内の外部DTDへのアクセスが、XMLConstants.ACCESS_EXTERNAL_DTDプロパティで指定されたプロトコルに制限されます。 このプロパティの制限が原因で新しいスキーマの作成中にアクセスが拒否された場合は、newSchema(Source)、newSchema(File)、newSchema(URL)、またはnewSchema(Source[])メソッドによってSAXExceptionがスローされます。
xmlソース・ファイル内の外部DTDへのアクセスが、XMLConstants.ACCESS_EXTERNAL_DTDプロパティで指定されたプロトコルに制限されます。 このプロパティの制限が原因で検証中にアクセスが拒否された場合は、Validator.validate(Source)またはValidator.validate(Source, Result)メソッドによってSAXExceptionがスローされます。
schemaLocation属性によって設定された外部参照へのアクセスが、XMLConstants.ACCESS_EXTERNAL_SCHEMAプロパティで指定されたプロトコルに制限されます。 このプロパティの制限が原因で検証中にアクセスが拒否された場合は、Validator.validate(Source)またはValidator.validate(Source, Result)メソッドによってSAXExceptionがスローされます。
ImportおよびInclude要素によって設定された外部参照へのアクセスが、XMLConstants.ACCESS_EXTERNAL_SCHEMAプロパティで指定されたプロトコルに制限されます。 このプロパティの制限が原因で新しいスキーマの作成中にアクセスが拒否された場合は、newSchema(Source)、newSchema(File)、newSchema(URL)、またはnewSchema(Source[])メソッドによってSAXExceptionがスローされます。
name - プロパティ名。null以外の完全指定URIで表される。object - 要求されたプロパティ値。SAXNotRecognizedException - プロパティ値を割り当てられない、または取得できない場合。SAXNotSupportedException - SchemaFactoryがプロパティ名を認識するだけで、要求された値を設定できない場合。NullPointerException - nameがnullの場合。public Object getProperty(String name) throws SAXNotRecognizedException, SAXNotSupportedException
プロパティ名は完全指定URIです。 SchemaFactoryはプロパティ名を認識できますが、一時的にその値を返すことはできません。
SchemaFactoryは特定のプロパティ名を認識する必要はありません。
独自のURIに基づいて作成された名前を使って、実装者が独自のプロパティを作成することもできます(推奨)。
name - プロパティ名。null以外の完全指定URIで表される。SAXNotRecognizedException - プロパティ値を割り当てられない、または取得できない場合。SAXNotSupportedException - XMLReaderがプロパティ名を認識するだけで、現時点ではその値を判断できない場合。NullPointerException - nameがnullの場合。setProperty(String, Object)public abstract void setErrorHandler(ErrorHandler errorHandler)
newSchemaメソッドの呼出しで発生したエラーを受け取るようにErrorHandlerを設定します。
エラー・ハンドラを使用して、スキーマ構文解析時のエラー処理をカスタマイズできます。 ErrorHandlerを設定すると、スキーマの解析で発見されたエラーはまずErrorHandlerに送られます。
エラー・ハンドラはハンドラからSAXExceptionをスローして、スキーマの解析をただちに中断することができます。 または、エラーを画面に出力したり、ErrorHandlerから正常に戻って処理を続行させたりすることもできます。
Throwable (またはその派生クラスのインスタンス)がErrorHandlerからスローされると、newSchemaメソッドの呼出し元には同じThrowableオブジェクトがスローされます。
SchemaFactoryは、最初にErrorHandlerへ報告してからでないと、SAXExceptionをスローすることができません。
アプリケーションではSchemaの構文解析中でもこのメソッドを呼び出すことができます。
ErrorHandlerがnullの場合、実装は次のErrorHandlerが設定されたかのように動作します。
class DraconianErrorHandler implementsErrorHandler{ public void fatalError(SAXParseExceptione ) throwsSAXException{ throw e; } public void error(SAXParseExceptione ) throwsSAXException{ throw e; } public void warning(SAXParseExceptione ) throwsSAXException{ // noop } }
新しいSchemaFactoryオブジェクトが作成されると、最初にこのフィールドはnullに設定されます。 このフィールドは、このSchemaFactoryから作成されたSchema、Validator、またはValidatorHandlerに継承されません。
errorHandler - 設定する新しいエラー・ハンドラ。 このパラメータはnullも可。 public abstract ErrorHandler getErrorHandler()
SchemaFactoryに設定されている現在のErrorHandlerを取得します。setErrorHandler(ErrorHandler)メソッドによって最後に設定されたオブジェクトを返す。または、このSchemaFactoryが作成されてから、そのメソッドが呼び出されていない場合はnullを返す。setErrorHandler(ErrorHandler)public abstract void setResourceResolver(LSResourceResolver resourceResolver)
LSResourceResolverを設定します。
SchemaFactoryは、スキーマの解析中に外部リソースの場所を確認する必要があるときにLSResourceResolverを使用しますが、「外部リソースの検索」を厳密に構成するものはスキーマ言語により異なります。 たとえば、W3C XML Schemaでは、<include>または<import>されたファイル、およびスキーマ・ファイルから参照されたDTDなどが含まれます。
アプリケーションではSchemaの構文解析中でもこのメソッドを呼び出すことができます。
LSResourceResolverがnullの場合、実装は次のLSResourceResolverが設定されたかのように動作します。
class DumbDOMResourceResolver implementsLSResourceResolver{ publicLSInputresolveResource( String publicId, String systemId, String baseURI) { return null; // always return null } }
LSResourceResolverがRuntimeException (またはその派生クラスのインスタンス)をスローすると、SchemaFactoryは構文解析を異常終了し、newSchemaメソッドの呼出し元は同じRuntimeExceptionを受け取ります。
新しいSchemaFactoryオブジェクトが作成されると、最初にこのフィールドはnullに設定されます。 このフィールドは、このSchemaFactoryから作成されたSchema、Validator、またはValidatorHandlerに継承されません。
resourceResolver - 設定する新しいリソース・リゾルバ。 このパラメータはnullも可。 public abstract LSResourceResolver getResourceResolver()
SchemaFactoryに設定されている現在のLSResourceResolverを取得します。setResourceResolver(LSResourceResolver)メソッドによって最後に設定されたオブジェクトを返す。または、このSchemaFactoryが作成されてから、そのメソッドが呼び出されていない場合はnullを返す。setErrorHandler(ErrorHandler)public Schema newSchema(Source schema) throws SAXException
指定されたソースをスキーマとして構文解析し、それをスキーマとして返します。
これはnewSchema(Source[] schemas)の簡易メソッドです。
schema - スキーマを表すソース。schemaの構文解析からの新しいSchema。SAXException - 構文解析時にSAXエラーが発生した場合。NullPointerException - schemaがnullである場合。public Schema newSchema(File schema) throws SAXException
指定されたFileをスキーマとして構文解析し、それをSchemaとして返します。
これはnewSchema(Source schema)の簡易メソッドです。
schema - スキーマを表すファイル。schemaの構文解析からの新しいSchema。SAXException - 構文解析時にSAXエラーが発生した場合。NullPointerException - schemaがnullである場合。public Schema newSchema(URL schema) throws SAXException
指定されたURLをスキーマとして構文解析し、それをSchemaとして返します。
これはnewSchema(Source schema)の簡易メソッドです。
schema - スキーマを表すURL。schemaの構文解析からの新しいSchema。SAXException - 構文解析時にSAXエラーが発生した場合。NullPointerException - schemaがnullである場合。public abstract Schema newSchema(Source[] schemas) throws SAXException
呼び出される側はすべてのSourceを読み取り、それらを1つのスキーマに結合します。 この組み合わせの正確なセマンティックスは、このSchemaFactoryオブジェクトが作成されたスキーマ言語によって異なります。
ErrorHandlerが設定されている場合、呼び出される側はソースに見つかったすべてのエラーをハンドラに報告します。 ハンドラは例外をスローすると、スキーマのコンパイルを中断します。そして同じ例外がこのメソッドからスローされます。 また、エラーがハンドラに報告された後、呼び出される側はエラーをスローすることによって以降の処理を中断できます。 エラー・ハンドラが設定されていない場合は、呼び出される側がソースに見つかった最初のエラーをスローします。
結果として得られるスキーマには、指定されたソースからのコンポーネントが含まれます。 これらすべてのソースを、schemaLocationと名前空間の適切な値を使用して、異なるtargetNamespaceを持つ固有のコンポーネントを持たない1つのスキーマ・ドキュメントにインポートした場合でも、インポート要素がソースとして同じ順序になっていれば同じ結果が得られます。 XML Schema勧告のセクション4.2.3に、これに関するプロセッサのオプションが記載されています。 プロセッサはJAXPスキーマ・ソースとXMLスキーマのインポートを一貫して扱う必要がありますが、JAXP準拠のパーサー間の動作は異なってもかまいません。特に、schemaLocationで提供される情報にかかわらず、パーサーは指定された名前空間の最初の<import>以外をすべて無視できます。
解析された一連のスキーマに、XML Schema仕様のセクション5.1に示すようなエラーが含まれる場合、エラーをErrorHandlerに報告する必要があります。
RELAX NGの場合でschemas.length!=1のとき、このメソッドはUnsupportedOperationExceptionをスローする必要があります。
schemas - 解析される入力。 SchemaFactoryはSAXSource、StreamSource、StAXSource、およびDOMSource認識する必要がある。 入力スキーマはXMLドキュメントまたはXML要素であることが必要でnullは不可。 下位互換性のために、ドキュメントと要素以外のすべてを受け渡した結果は実装に依存している。 実装は、入力を認識し処理するか、IllegalArgumentExceptionをスローする必要がある。 Schemaオブジェクトを返す。 エラーが報告された場合、返されたSchemaオブジェクトが意味を持つことは保証されない。 SAXException - 指定された入力の処理時にエラーが発見された場合。 ErrorHandlerが設定されている場合、エラーは最初にそれらに報告される。 setErrorHandler(ErrorHandler)を参照してください。 NullPointerException - schemasパラメータ自体がnullか、配列内の項目がnullである場合。IllegalArgumentException - 配列内の項目がこのメソッドによって認識されない場合。UnsupportedOperationException - スキーマ言語がこの処理をサポートしていない場合。public abstract Schema newSchema() throws SAXException
Schemaオブジェクトを作成します。
返されるSchemaオブジェクトの正確なセマンティックスは、このSchemaFactoryが作成されたスキーマ言語によって異なります。
さらに、実装では実装固有のプロパティまたは機能を使用して、このメソッドのセマンティックスを変更できます。
実装時および開発時には、この特殊なSchemaによるSchemaFactoryの機能セットの処理方法に特に注意するようにします。 たとえば、場合によっては、SchemaFactoryとクラスが、異なる実装からのスキーマを実際にロードするときに、SchemaFactoryの機能を自動的に継承できないことがあります。 開発時には、セキュリティ処理などの機能を両方の場所で明示的に設定するようにしてください。
XML Schemaの場合、このメソッドはドキュメントに指定された場所のヒントを使用して、検証を実行するSchemaオブジェクトを作成します。
返されるSchemaオブジェクトは、ドキュメントでスキーマの場所のヒントの同じURLを参照している場合、それらは常に同じスキーマ・ドキュメントに解決されるものとみなします。 この想定によって、実装ではスキーマ・ドキュメントの解析結果を再利用できるため、同じスキーマに対する複数の検証の実行が速くなります。
スキーマの場所のヒントを使用することで、サービス妨害攻撃を受けやすくなるので注意してください。
RELAX NGではこの処理をサポートしていません。
Schemaオブジェクトを返す。UnsupportedOperationException - この処理が呼び出される側によってサポートされていない場合。SAXException - この処理はサポートされているが、何らかの理由により失敗した場合。 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。 そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Documentation Redistribution Policyも参照してください。