実行時にApache Commons-Configurationライブラリを使用してXML設定ファイルを生成するTomcat 5.5 Webアプリケーションがあります。 Commons-Configurationは、これを達成するためにjavax.xml.transform
JAXP APIを使用します。デフォルトで誤った実装を使用しているJAXP XSLTトランス
のJava 7にアップグレードしているので、操作は、次のエラーメッセージで失敗します
Caused by: javax.xml.transform.TransformerFactoryConfigurationError: Provider org.apache.xalan.processor.TransformerFactoryImpl not found
at javax.xml.transform.TransformerFactory.newInstance(Unknown Source)
以前のリリースでは、私が代わりにプラットフォームのデフォルトのXSLTの実装に依存する、xalan.jarを同梱たことがありません。
私がチェックしたいくつかの点:
- で検証私のアプリケーションのJARファイル、ライブラリのjarファイル、またはTomcatの瓶
- に
javax.xml.transform.TransformerFactory
システムプロパティが設定されていない(のいずれにもMETA-INF/services/javax.xml.transform.TransformerFactory
エントリはありませんJVisualVMによるランタイム) - 0で実行
jre/lib
ディレクトリ
にはjaxp.properties
ファイルはありませんは、次の出力を生成します。
JAXP: find factoryId =javax.xml.transform.TransformerFactory
JAXP: loaded from fallback value: org.apache.xalan.processor.TransformerFactoryImpl
このフォールバック値はどこから来ていますか?オラクル社ではXalanトランスを出荷していますが、1.7以降はcom.sun.org.apache.xalan.processor...
として再パッケージ化されています。 は、をフォールバック値にする必要はありませんか?
'CATALINA_HOME/lib'をチェックしましたか? – Brad
Tomcat 5.5は '$ CATALINA_HOME/lib'を使用しません。 AfaikはTomcat 6+です。 '$ CATALINA_HOME/server'、' common'、 'shared'を無駄にチェックしました。 – Jonathan
'org.apache.xalan.processor.TransformerFactoryImpl'クラスは、古いJDK1.4の設定からのものである可能性がありますので、私はあなたの' CLASSPATH'のどこかに怪しいxalan.jarがあることを期待しています – Brad