Tomcat的类加载器getResources结果顺序(首先是webapp)

时间:2017-05-12 12:16:07

标签: tomcat jax-ws classloader

我试图覆盖JAX-WS Web服务的Apache CXF实现。根据{{​​3}},我尝试创建/覆盖Provider实现。

使用该配置,我们在javax.xml.ws.spi.Provider中至少包含两个jar:/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提供程序实现),并且&#39 ;现在正在工作。但这只是一个使它工作的解决方案,它真的不应该这样做。

那么,关于ClassLoader.getResources(String name)应该首先返回webapp条目的任何想法?

它应该已经是默认值,但是searchExternalFirst =" false"没有任何魔法(也没有"真正的"值)

1 个答案:

答案 0 :(得分:0)

您是否尝试在context.xml中设置以下内容?     <Loader delegate="false"/> 描述于tomcat docs