我试图覆盖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"没有任何魔法(也没有"真正的"值)