JAX-WS WebサービスのApache CXF実装をオーバーライドしようとしています。 JAX-WS = When Apache CXF is installed it "steals" default JDK JAX-WS implementation, how to solve?に従って、私はプロバイダの実装を作成/オーバーライドしようとしています。TomcatのクラスローダーgetResources結果の順序(webapp first)
この設定では、少なくとも2つのjar:/tomcat/lib/cxf-rt-frontend-jaxws-*.jar内のjavax.xml.ws.spi.Providerと、独自のjar/tomcat/webapps/appX/WEB-INF/META-INF/services)を実行します。
最初にwebappリソースを読み込むデフォルトの動作では、最初に独自のjarファイルを取得する予定でした。しかし、そうではありません。
いくつかのデバッグを行うと、getResources( "resource-name")のTomcatのクラスローダーのメソッドは、/ tomcat/libからの最初の要素の列挙を返しているようです。 WS Providerは最初の要素を使用しているため、元のCXF実装を使用しています。
デフォルトのクラスローダーはParallelWebappClassLoaderでした。 WebappClassLoaderに切り替えましたが、同じ問題が続きました。
次に、getResourcesメソッドをオーバーライドするだけで(/tomcat/lib/cxf-rt-frontend-jaxws-*.jar jax-wsプロバイダーの実装を削除する)、WebappClassLoaderを拡張した独自のクラスローダーを作成しました。ワーキング。しかし、これはそれを機能させるための単なる解決策にすぎません。本当にこれを行う必要はありません。
したがって、ClassLoader.getResources(String name)が最初にwebappエントリを返す方法に関する考え方はありますか?
はすでにデフォルト値である必要がありますが、searchExternalFirst =「false」が任意のマジック(も「真」の値を持つ)