2017-05-12 3 views
0

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」が任意のマジック(も「真」の値を持つ)

答えて

0

はあなたのcontext.xmlに以下の設定を試してみました持っていませんでしたか? <Loader delegate="false"/> tomcat docs

関連する問題