【问题标题】:AbstractJAXRS E No resource classes found : cxf 3.2.8 and websphere 9.0.5.3AbstractJAXRS E 未找到资源类:cxf 3.2.8 和 websphere 9.0.5.3
【发布时间】:2021-02-09 16:41:35
【问题描述】:

我正在使用 WebSphere 9.0.5.3,在将 CXF-core lib 从 3.1.x 迁移到 3.2.x 后,我遇到了这个问题:

 AbstractJAXRS E   No resource classes found

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

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

ps2:我已经修改了类加载器策略(Multiple - 单)

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

ps3:已经将 jaxrs-ws-rs 升级到 2.1.1,因为 CXF 3.2.x 支持 JAX-RS 最新的 2.1 规范,即使这个规范是落后的 与 jaxrs 2.0 兼容

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

PS4:我的应用程序在 tomcat 8 和 Wildfly/JBoss 上运行良好,所以 我认为我的资源类没有问题

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

这里的主要问题是为什么 websphere 没有加载我刚刚升级 jar 并保留旧配置的资源类?

【问题讨论】:

    标签: rest web-services jax-rs websphere


    【解决方案1】:

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

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

    【讨论】:

    • 我已经尝试过 jax-rs 2.0 规范和默认的 jax-rs 2.0 提供程序,但仍然有同样的问题(问题:jax-rs 版本对 websphere 的类加载策略有影响吗?所以它在加载应用程序时会跳过我的资源类?)
    • 我可以在我的应用程序中提供 jaxrs-2.1 jar 时设置 jaxrs-2.0 规范吗?
    • Aziz,我最初的回答不正确。我已使用您可能想尝试的选项对其进行了编辑。
    • 所以我在耳朵下添加了 CXF-libs,在共享库下添加了 javax-ws-rs 2.1 jar,并且我将 JAXRS-provider 设置为 2.0 规范,但我仍然有同样的问题我想念或做错了什么? (ps更改类加载器策略会导致很多错误,例如我的例子)
    • 确保 JAX-RS API JAR 位于 隔离 共享库中 - 这将确保在 WebSphere 提供的 JAX-RS API 之前加载它们。您的应用程序类是否正在加载?您可能需要更新(或创建)您的 web.xml 文件 - 否则,Web 容器将不知道您的应用中有 JAX-RS 实现。
    猜你喜欢
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 2017-11-15
    • 2017-09-19
    • 1970-01-01
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多