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)
|
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(SAXParseException
e ) throwsSAXException
{ throw e; } public void error(SAXParseException
e ) throwsSAXException
{ throw e; } public void warning(SAXParseException
e ) 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
{ publicLSInput
resolveResource( 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, 2014, Oracle and/or its affiliates. All rights reserved.