実行時に XML 構成ファイルを生成するために Apache Commons-Configuration ライブラリを使用する Tomcat 5.5 Web アプリケーションがあります。Commons-Configuration は、javax.xml.transform
JAXP API を使用してこれを実現します。
Java 7 にアップグレードしてから、操作は次のエラー メッセージで失敗します。
Caused by: javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found
at javax.xml.transform.TransformerFactory.newInstance(Unknown Source)
過去のリリースでは、xalan.jar をバンドルしたことはなく、代わりにプラットフォームのデフォルトの XSLT 実装に依存していました。
私がチェックしたいくつかのこと:
META-INF/services/javax.xml.transform.TransformerFactory
アプリケーション JAR ファイル、ライブラリ jar、Tomcat jar のいずれにもエントリがありません- システム プロパティが設定されていない(
javax.xml.transform.TransformerFactory
JVisualVM を介して実行時に検証される) - ディレクトリ
jaxp.properties
にファイルがありませんjre/lib
で実行すると-Djaxp.debug=1
、次の出力が生成されます。
JAXP: find factoryId =javax.xml.transform.TransformerFactory
JAXP: loaded from fallback value: org.apache.xalan.processor.TransformerFactoryImpl
このフォールバック値はどこから来たのですか? Oracle は Xalan トランスフォーマーを出荷していますが、1.7 以降では として再パッケージ化されていcom.sun.org.apache.xalan.processor...
ます。それはフォールバック値であるべきではありませんか?