AbstractJAXRS E找不到资源类:cxf 3.2.8和websphere 9.0.5.3

问题描述

我正在使用WebSphere 9.0.5.3,并将CXF核心库从3.1.x迁移到3.2.x之后,我遇到了这个问题:

 AbstractJAXRS E   No resource classes found

使用CXF 3.1.x时,一切正常,我的服务器正常工作,我的其余服务也正常工作。

ps1:我已经禁用了WebSphere的JAXRSEngine并使用了自己的库(在共享的隔离包中),正如我所说的,它在以前的版本中可以正常工作

ps2:我已经修改了类加载器策略(多个-

通过一些调试,我发现WebSphere甚至没有加载我的类(用@path注释)

ps3:由于CXF 3.2.x已将jaxrs-ws-rs升级到2.1.1 支持JAX-RS最新的2.1规范,即使该规范向后 与jaxrs 2.0兼容

并且我已经升级了所有与CXF JAXRS相关的罐子,并且仍然有 同样的问题

PS4:我的应用程序在Tomcat 8和Wildfly / JBoss上正常运行,因此 我认为我的资源类没有问题

PS5:在同一个jar中,其他类也已加载,因此WebSphere正在过滤资源类而不加载它们

这里的主要问题是为什么Websphere无法加载我的资源类,而我刚刚升级了jar并保留了旧配置?

解决方法

IBM WebSphere Application Server不提供对JAXRS 2.1的直接支持。但是,您尝试的仍然可能。除了将“ com.ibm.websphere.jaxrs.server.DisableIBMJAXRS20Engine”属性设置为“ true”之外,您还应该通过命令提示符或管理控制台将JAXRS提供程序设置为“ 2.0 spec”,有关详细信息,请参见以下内容:{{3 }}

除此之外,如果您需要JAX-RS 2.1 API,则需要将API与您的应用程序打包在一起。您可能还需要使用上一父类加载或将它们打包在与您的应用程序关联的隔离共享库中。这两种方法都会带来类加载的风险。