SAXパーサの動作の差異を次の表に示します。
表A-3 SAXパーサの動作の差異
項番 | 条件 | XML Processorの動作 | |
---|---|---|---|
バージョン06-00の場合 | バージョン07-00以降の場合 | ||
1 | XMLReaderFactoryクラスのcreateXMLReader()メソッドを使用する場合 | システムプロパティ"org.xml.sax.driver"の値を用いてXMLReaderインスタンスの生成を試みます。 | 次の順序でXMLReaderインスタンスの生成を試みます。
|
2 | XMLReaderオブジェクトにContentHandlerオブジェクトを設定した場合 | エンティティをスキップしてもContentHandlerオブジェクトのskippedEntityメソッドは呼び出されません。 | エンティティをスキップすると,ContentHandlerオブジェクトのskippedEntityメソッドが呼び出されます。 |
3 | DeclHandlerクラスのexternalEntityDecl(String name, String publicId, String systemId)メソッド,および,DTDHandlerインタフェースのnotationDecl(String name, String publicId, String systemId)メソッドの引数systemIdがURLの場合 | URLが完全に解決されないことがあります。 | URLが完全に解決されます。 |
4 | XMLReaderクラスのsetEntityResolverメソッド,setDTDHandlerメソッド,setContentHandlerメソッド,setErrorHandlerメソッドの引数にnullを指定した場合 | NullPointerException例外が発生します。 | リゾルバやハンドラがクリアされます。 |
5 | ParserAdapterクラスのsetEntityResolverメソッド,setDTDHandlerメソッド,setContentHandlerメソッド,setErrorHandlerメソッドの引数にnullを指定した場合 | NullPointerException例外が発生します。 | リゾルバやハンドラがクリアされます。 |
6 | XMLFilterImplクラスのsetEntityResolverメソッド,setDTDHandlerメソッド,setContentHandlerメソッド,setErrorHandlerメソッド,setParentメソッドの引数にnullを指定した場合 | NullPointerException例外が発生します。 | リゾルバ,ハンドラ,および親リーダなどがクリアされます。 |
7 | SAXパーサのフィーチャー"http://xml.org/sax/features/namespaces"をfalseに設定し,かつ,フィーチャー"http://xml.org/sax/features/namespace-prefixes"をtrueに設定した場合 | 接頭辞"xml","xmlns"に対するstartPrefixMappingメソッドおよびendPrefixMappingメソッドが呼び出されます。 | 接頭辞"xml","xmlns"に対するstartPrefixMappingメソッドおよびendPrefixMappingメソッドは呼び出されません。 |
8 | ErrorHandlerインタフェースのfatalErrorメソッドの実装クラスでSAXExceptionを継承した例外クラスをスローする場合 | parse実行時にパーサがSAXExceptionをスローします。 | パーサはErrorHandlerインタフェースの実装クラスのfatalErrorメソッドがスローする例外をそのままスローします。 |
9 | SAXParserクラスのsetProperty()メソッドで,http://java.sun.com/xml/jaxp/properties/schemaLanguageプロパティに不当な文字列を指定した場合 | KECX01602-Eのエラーを通知します。 | KECX01903-Eのエラーを通知します。 |
10 | SAXParserクラスのsetProperty()メソッドで,http://java.sun.com/xml/jaxp/properties/schemaLanguageプロパティを指定する前にhttp://java.sun.com/xml/jaxp/properties/schemaSourceプロパティを指定した場合 | KECX01603-Eのエラーを通知します。 | KECX01904-Eのエラーを通知します。 |