You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jersey 1升级至Jersey 2(含Spring插件)适配JDK1.8遇错求助

问题分析与解决方案

我来帮你一步步拆解当前遇到的两个核心问题,给出针对性的解决思路:

一、Jersey 1.8 在 JDK 1.8 + JBoss EAP 6.4 下的响应绑定错误(AbstractMethodError)

问题根源

你碰到的java.lang.AbstractMethodError主要有两个原因:

  • Jersey 1.8依赖的Jackson版本(1.9.9.redhat-4)与JDK 1.8存在兼容性问题,无法适配JDK 1.8的新特性;
  • JBoss EAP 6.4自带的Jackson模块和应用内的Jackson版本产生了类加载冲突。
    另外,Jersey 1.x系列本身是为JDK 1.6/1.7设计的,官方早已停止维护,对JDK 1.8的支持先天不足。

临时解决方案(若坚持使用Jersey 1.8)

  1. 升级Jackson兼容版本:将Jackson依赖升级到JDK 1.8兼容的1.9.x分支(如1.9.13),确保和Jersey 1.8兼容。在POM中更新:
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-core-asl</artifactId>
    <version>1.9.13</version>
</dependency>
<dependency>
    <groupId>org.codehaus.jackson</groupId>
    <artifactId>jackson-mapper-asl</artifactId>
    <version>1.9.13</version>
</dependency>
  1. 排除JBoss自带Jackson模块:在项目根目录添加jboss-deployment-structure.xml,强制应用使用自身打包的Jackson版本:
<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <module name="org.codehaus.jackson.jackson-core-asl"/>
            <module name="org.codehaus.jackson.jackson-mapper-asl"/>
        </exclusions>
    </deployment>
</jboss-deployment-structure>

注意:这只是临时 workaround,长远来看强烈建议升级到Jersey 2.x。


二、升级Jersey 2.4.1后出现的NoSuchMethodError: javax.ws.rs.core.Application.getProperties()

问题根源

JBoss EAP 6.4默认自带的是JAX-RS 1.1规范(对应jsr311-api),而Jersey 2.x必须依赖JAX-RS 2.0规范。尽管你在POM中引入了jboss-jaxrs-api_2.0_spec,但JBoss的模块加载优先级高于应用依赖,程序依然使用了服务器自带的旧版API——旧API的Application类并没有getProperties()方法,因此抛出异常。

解决方案

  1. 排除JBoss自带JAX-RS模块:创建/修改jboss-deployment-structure.xml,阻止服务器加载自带的JAX-RS相关模块,让应用使用自身打包的JAX-RS 2.0 API:
<jboss-deployment-structure>
    <deployment>
        <exclusions>
            <module name="javax.ws.rs.api"/>
            <module name="org.jboss.resteasy.resteasy-jaxrs"/>
        </exclusions>
    </deployment>
</jboss-deployment-structure>
  1. 彻底清理旧版JAX-RS依赖:通过mvn dependency:tree排查所有依赖,确保任何引入jsr311-api的依赖都被排除。比如针对axis2-transport-local,在POM中添加排除规则:
<dependency>
    <groupId>org.apache.axis2</groupId>
    <artifactId>axis2-transport-local</artifactId>
    <!-- 其他配置 -->
    <exclusions>
        <exclusion>
            <groupId>javax.ws.rs</groupId>
            <artifactId>jsr311-api</artifactId>
        </exclusion>
    </exclusions>
</dependency>
  1. 修正JBoss模块配置:你之前注释module.xml中的resteasy-jaxrs依赖导致模块找不到,是因为应用原本依赖了服务器的JAX-RS模块。现在我们已经排除了服务器的JAX-RS模块,应该移除module.xml中相关的resteasy配置,让Jersey 2.x自行管理依赖。

长远优化方案

如果条件允许,建议直接升级到JBoss EAP 7.x版本:

  • EAP 7.x原生支持JDK 1.8和JAX-RS 2.0规范,与Jersey 2.x的兼容性极佳,能彻底避免这类依赖冲突;
  • EAP 7.x的性能、稳定性比6.4更优,更适配JDK 1.8的运行环境。

内容的提问来源于stack exchange,提问作者Visagan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:46:35