私はいくつかのフレーバーでこの質問をしました、そして私は正しい質問をしていないと思います。Xalanは、Javaで承認された標準を実装しているため、特定のVM/ClassLoaderで実装できるのは1つだけだと思います。
それで本当ですか?2つのXalan実装を同じシステムクラスローダーで「ライブ」にすることはできませんか?または、可能であれば、どのように?
私はいくつかのフレーバーでこの質問をしました、そして私は正しい質問をしていないと思います。Xalanは、Javaで承認された標準を実装しているため、特定のVM/ClassLoaderで実装できるのは1つだけだと思います。
それで本当ですか?2つのXalan実装を同じシステムクラスローダーで「ライブ」にすることはできませんか?または、可能であれば、どのように?
これは驚くべき答えのようです:
Xalanの実装ごとに、個別のクラスローダーを使用し、ファイルを追加します。
META-INF\services\
と呼ばれる
javax.xml.transform.TransformerFactory
それを編集して、クラスローダーが使用するXalan実装のみを配置します。例:
com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl
注:ここでの良い点は、通常のクラスローディング委任とは対照的に、最初META-INF\services
に現在のクラスローダーで検索され、クラスが親、システム、次に子クラスローダーで検索されることです。
jdkにはいくつかのxalanバージョンが含まれています。ほとんどの使用法では、私の個人的な経験では、このバージョンを使用するだけで十分です。以前のバージョンであったとしても、最近、新しいxalan開発はありますか?付属の強力なテスト済みバージョンを使用することをお勧めします。
同じjdkでトランスフォーマーをxslすることは良い考えではないと思います(私がそれができると思っていても)。jdkではなくxalanの更新バージョンを本当に使用する必要がある場合は、次のFAQを参照できます:http://xml.apache.org/xalan-j/faq.html#faq-N100EF
埋め込まれたものだけを使用して、大きなアプリケーションのすべての特定のxalan依存関係を取り除きました。FOPとしてのライブラリは、以前は特定のxalan jarを必要とするふりをしていましたが、それがなくても問題なく動作し、多くのクラス読み込みの問題を解決しました(xalanがパッケージ化されている場合に問題が発生するjava eeアプリサーバー)。