6

実行時に XML 構成ファイルを生成するために Apache Commons-Configuration ライブラリを使用する Tomcat 5.5 Web アプリケーションがあります。Commons-Configuration は、javax.xml.transformJAXP 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.TransformerFactoryJVisualVM を介して実行時に検証される)
  • ディレクトリ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...ます。それはフォールバック値であるべきではありませんか?

4

2 に答える 2

9

自分で問題を見つけました。apache-tomcat-5.5.23-compatJava 1.4.2 から移行していたので、ファイルがインストールされていることがわかりました。解決策は、ディレクトリの下のすべて$CATALINA_HOME/common/endorsed(特にxercesImpl.jarxml-apis.jar) とbin/jmx.jarファイルを削除することでした。

于 2012-09-06T11:11:45.123 に答える
0

GlassfishサーバーV3.1でも同じ問題が発生し、xalan-2.7.0.jarを $GLASSFISH_HOME\lib\endorsed ディレクトリに配置することで問題が解決しました。

于 2014-01-08T08:03:27.057 に答える