gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 23:20:59 27 4
gpt4 key购买 nike

我正在尝试覆盖 JAX-WS Web 服务的 Apache CXF 实现。根据 JAX-WS = When Apache CXF is installed it "steals" default JDK JAX-WS implementation, how to solve? ,我正在尝试创建/覆盖 Provider 实现。

使用该配置,我们至少在两个 jar 中有 javax.xml.ws.spi.Provider:/tomcat/lib/cxf-rt-frontend-jaxws-*.jar 和我们自己的 jar/tomcat/webapps/appX/WEB-INF/META-INF/services)。

使用首先加载 webapp 资源的默认行为,我们期望首先获取我们自己的 jar。但事实并非如此。

做一些调试,Tomcat 类加载器的 getResources("resource-name") 方法似乎返回一个枚举,其中第一个元素来自/tomcat/lib。由于 WS Provider 使用的是第一个元素,因此它仍在使用原始的 CXF 实现。

默认的类加载器是 ParallelWebappClassLoader。我们已经切换到 WebappClassLoader,但它仍然存在同样的问题。

然后我们创建了自己的类加载器,扩展了 WebappClassLoader,仅重写了 getResources 方法(以删除/tomcat/lib/cxf-rt-frontend-jaxws-*.jar jax-ws 提供程序实现),它现在可以工作了.但这只是使其工作的解决方案,确实没有必要这样做。

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

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

最佳答案

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

关于Tomcat的类加载器getResources结果顺序(webapp优先),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43937571/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com