ページの先頭行へ戻る
Interstage Application Server V13.1.0 使用上の注意
FUJITSU Software

2.12.21 XML処理(JAXP)を使用する際の注意事項

V10.0以降のバージョンに同梱しているJDKでは、2つのJAXP実装を提供しています。

表2.1 各JDKにおけるJAXP実装の相違

JDKバージョン

V10.0.0より前

V10.x

V11.x

V12.x

V13.x

5.0

Oracle社の提供するJAXP実装

※1

(-)

(-)

(-)

6

※1

(-)

(-)

7

(-)

(-)

※1

(-)

8

(-)

(-)

(-)

Oracle社の提供するJAXP実装

OpenJDKの提供するJAXP実装

※1)

(-):同梱されていません。

デフォルトのJAXP実装の変更

OpenJDK 8ではApache Xalanプロジェクトの提供するJAXP実装は、提供しておりません。


JAXP実装のバージョン変更に伴い、以下の点で注意が必要です。

XSLTの処理中のエラーについて

XSLTの処理中にエラーが発生した場合に、例外をスローしなくなります。
javax.xml.transform.ErrorListenerの仕様では、XSLTの処理中にエラーが発生しても、例外をスローしないことになっています。
詳細は、javax.xml.transform.ErrorListenerのJavaDocを参照してください。

XSLTの処理中にエラーが発生した場合のエラーハンドリング詳細についてはjavax.xml.transform.ErrorListener の JavaDocを参照してください。

javax.xml.parsers.SAXParser#setProperty()メソッド使用時の注意

javax.xml.parsers.SAXParser#setProperty()メソッドを使用してFeatureを設定できません。
Oracle社の提供するJAXP実装では、FeatureをsetProperty()メソッドで設定することが可能でした。しかし、Apache Xalanプロジェクトの提供するJAXP実装では、PropertyとFeatureを明確に区別するように変更されたため、setProperty()メソッドでFeatureを設定することができません。

setProperty()メソッドでFeatureを設定しようとした場合、以下の例外が発生する場合があります。

org.xml.sax.SAXNotRecognizedException: Property 'XXXX' is not recognized.

XXXX:設定しようとしたFeature名

その場合は、SAXParserを取得するSAXParserFactoryのsetFeature()メソッドを使用しFeatureを設定するように変更してください。

XML文書のエンコーディング指定の解釈について

XML文書のエンコーディング指定の解釈が厳格になります。
Apache Xalanプロジェクトの提供するJAXP実装では、XML文書のxml宣言に指定するencoding属性の値を解釈する際に、XMLの仕様に沿ったチェックを行うようになります。
そのため、IANA(Internet Assigned Numbers Authority)で規定されていないエンコード名をencoding属性の値として指定した場合、以下の例外が発生する場合があります。

org.xml.sax.SAXParseException: Invalid encoding name "XXXX".

XXXXはencoding属性に指定したエンコーディング名

たとえば、IANAに規定されていない「Shift-JIS」というエンコーディング名をxml文書のencoding属性に指定している場合、Apache Xalanプロジェクトの提供するJAXP実装では、例外が発生するようになります。(IANAでは「Shift_JIS」と規定されています。)
その場合は、XML文書のxml宣言中にあるencoding属性の値をIANAで規定されている正しいエンコーディング名に変更してください。