TomcatにWebアプリケーションがあります。アプリケーションには2つのSAXParserFactory実装が必要です。1つはJDKのデフォルトの実装com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl
で、もう1つはxercesからのものですorg.apache.xerces.jaxp.SAXParserFactoryImpl
。
ここに問題があります。次のように、特定の順序で1つの実装のみSAXParserFactory.newInstance()
を選択します。
- javax.xml.parsers.SAXParserFactoryシステムプロパティを使用します。
- 上記で定義したシステムプロパティと同じ値でキー設定された実装クラスの名前を含むプロパティファイルには、JAVA_HOME(jdkがインストールされている親ディレクトリ)/lib/jaxp.propertiesを使用します。
- 可能な場合は、Services API(JAR仕様で詳しく説明されています)を使用して、クラス名を判別します。Services APIは、ランタイムで使用可能なjar内のファイルMETA-INF / services/javax.xml.parsers.SAXParserFactoryでクラス名を検索します。
- プラットフォームのデフォルトのSAXParserFactoryインスタンス。
javax.xml.parsers.SAXParserFactoryのさまざまなクラス名をさまざまなjarファイルで構成しようとしました。しかし、それはクラスローダー全体の範囲です。Tomcatでは、すべてのアプリケーションライブラリが1つのクラスローダーにロードされます。たとえば、A.jarの構成ファイルはB.jarの構成を上書きし、最終的にはすべてのアプリケーションがA.jarから構成を取得します。
だから私の質問は、これら2つのSAXParserFactory実装を1つのWebアプリケーションでどのように特定できるかということです。ありがとうございました。