2017-05-12 77 views
0

我試圖覆蓋JAX-WS Web服務的Apache CXF實現。根據JAX-WS = When Apache CXF is installed it "steals" default JDK JAX-WS implementation, how to solve?,我試圖創建/覆蓋Provider實現。Tomcat的類加載器getResources結果順序(webapp第一個)

使用該配置,我們在至少兩個jar包中包含javax.xml.ws.spi.Provider:/tomcat/lib/cxf-rt-frontend-jaxws-*.jar並在我們自己的jar/Tomcat的/ webapps /目錄APPX/WEB-INF/META-INF /服務)。

通過首先加載webapp資源的默認行爲,我們期望首先獲取我們自己的jar。但事實並非如此。

做了一些調試,似乎Tomcat的類加載器的getResources(「resource-name」)方法正在返回Enumeration,其中第一個元素如果從/ tomcat/lib開啓。由於WS Provider正在使用第一個元素,它仍然使用原始的CXF實現。

默認的類加載器是ParallelWebappClassLoader。我們已經切換到WebappClassLoader,但它保持了同樣的問題。

然後,我們創建了自己的類加載器擴展WebappClassLoader,只有重寫getResources方法(除去/tomcat/lib/cxf-rt-frontend-jaxws-*.jar JAX-WS提供程序實現),這是現在加工。但這只是一個解決方案,使其工作,它確實不應該有必要這樣做。

那麼,關於ClassLoader.getResources(String name)如何首先返回webapp條目的任何想法?

應該已經是默認值,但searchExternalFirst =「假」沒有任何魔法(也有「真」)

回答

0

您是否嘗試過設置你的context.xml以下? <Loader delegate="false"/> 描述在tomcat docs