2012-09-05 8 views
5

実行時に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...として再パッケージ化されています。 は、をフォールバック値にする必要はありませんか?

+0

'CATALINA_HOME/lib'をチェックしましたか? – Brad

+0

Tomcat 5.5は '$ CATALINA_HOME/lib'を使用しません。 AfaikはTomcat 6+です。 '$ CATALINA_HOME/server'、' common'、 'shared'を無駄にチェックしました。 – Jonathan

+0

'org.apache.xalan.processor.TransformerFactoryImpl'クラスは、古いJDK1.4の設定からのものである可能性がありますので、私はあなたの' CLASSPATH'のどこかに怪しいxalan.jarがあることを期待しています – Brad

答えて

8

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

0

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

関連する問題