当前位置: 首页 > 知识库问答 >
问题:

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

堵凯
2023-03-14

我试图覆盖JAX-WS web服务的Apache CXF实现。根据JAX-WS=当安装Apache CXF时,它“窃取”默认的JDK JAX-WS实现,如何解决?,我正在尝试创建/覆盖提供程序实现。

有了这个配置,我们就有了javax。xml。ws。spi。至少在两个JAR中提供程序:/tomcat/lib/cxf rt frontend jaxws-*。jar和我们自己的jar/tomcat/webapps/appX/WEB-INF/META-INF/services)。

由于默认的行为是先加载webapp资源,所以我们希望先获取我们自己的jar。但事实并非如此。

在进行一些调试时,Tomcat的类加载器的getResources方法(“resource name”)似乎正在返回一个枚举,其中第一个元素(如果是on)来自/Tomcat/lib。因为WS-Provider使用的是第一个元素,所以它仍然使用最初的CXF实现。

默认类加载器是ParallelWebappClassLoader。我们已经切换到WebappClassLoader,但它保留了相同的问题。

然后,我们创建了自己的类加载器,扩展了WebappClassLoader,只覆盖了getResources方法(以删除/tomcat/lib/cxf-rt前端jaxws-*.jar jax-ws提供程序实现),它现在可以工作了。但这只是一个让它工作的解决方案,真的没有必要这么做。

那么,你知道类加载器是如何工作的吗。getResources(字符串名称)应该首先返回webapp条目吗?

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

共有1个答案

盛超
2023-03-14

您是否尝试在您的上下文中设置以下内容。xml<代码>

 类似资料:
  • 我对maven的类加载顺序有一个问题。 我知道,自maven版本2.0.9以来,类加载一直是确定性的,并且在pom中使用顺序。我不清楚传递依赖关系。maven是否首先加载所有顶级依赖项,然后加载传递依赖项。或者加载具有所有传递依赖项的顶级依赖项,然后加载下一个顶级依赖项。 我知道在完全正确的maven设置中,顺序没有问题,但我在依赖项中有一些重复的类,我想知道使用哪一个。排除可传递依赖项是没有选择

  • 我在Tomcat中实现自己的身份验证过滤器时遇到了一些问题。当我部署项目时,我得到以下日志: 原因:java。lang.ClassCastException:类com。somename。第。sso。卡蒙达。无法将KeyDoppessAuthenticationProvider强制转换为类org。卡蒙达。bpm。发动机Rest安全授权。AuthenticationProvider(com.somen

  • 我非常需要帮助,但在网上找不到关于这个特定主题的任何东西(许多相关的问题没有得到回答)。 具体来说,我需要能够从中央和外部代码存储库下载代码(JAR)。这是由引导代码完成的,引导代码需要将其添加到类装入器的类路径中,以便以后使用。这就是我们进入这个已经讨论了很多次的话题的时候。我不喜欢黑客,所以我尝试了以下方法: 尝试#1:创建一个为此目的配置的URLClassLoader实例,然后通过它调用代码

  • 问题内容: 我在以下情况下有一个关于保证的问题(请注意,问题不是 “如何以其他方式做到这一点?” ,实际上是关于以下情况下的类加载顺序)更好地了解类加载的工作原理)。 这是一个假设的场景…一个 .war 文件具有以下(部分)目录结构: 两个 Bunny.class 文件均已导入,并引用了 acme.jar中的 其他类。 __ Bunny.class 在 WEB-INF /班/ … 是具有相同的名称

  • 问题内容: 我正在使用cdh5 quickstart vm,并且我有一个像这样的文件(此处不完整): 我使用了这个脚本: 该脚本有效,但是生成的文件为空,您有什么想法吗? 问题答案: 最后,只有此模式有效:如果我添加或删除与该配置不同的空格,那么我将出现错误(我还为元组添加了“名称”,并在其为空时指定了“ null”,并更改了作者之间的顺序和来源,但即使没有这种配置,它仍然是错误的) 工作脚本是这

  • 问题内容: 我在其他地方找不到这个问题的明确答案,因此我将在这里尝试: 是否有某种方法(以编程方式或其他方式)来获取Application Classloader加载时所加载的JAR /类列表的确切顺序?应用程序类加载器,我是指在应用程序服务器(WLS,WAS,JBoss …)中加载EAR应用程序的类加载器,但显然,它适用于任何类加载器。 因此,概括地说,我想找出的是由指定类加载器加载的JAR的列