Websphere 8.5.5.20补丁后REST接口抛javax.ws.rs.WebApplicationException咨询
根因说明
WebSphere 8.5.5.20补丁升级了内置的JAX-RS实现包版本,默认情况下WebSphere会优先加载服务器自带的类库,你应用中打包的jsr311-api 1.1.1、jersey-server 1.8和服务器内置的同类型包产生类加载冲突,是本次接口报错的核心原因。
解决方案
1. 修改应用类加载顺序(优先选择,操作成本最低)
操作步骤:
- 登录WebSphere管理控制台,依次进入「应用程序 > 应用程序类型 > WebSphere 企业应用程序」,点击目标应用进入配置页
- 找到「类加载和更新检测」选项进入
- 类加载顺序选择先加载应用类加载器的类,再加载父类加载器的类(父类最后)
- 保存配置后重启应用即可验证
2. 单独禁用WebSphere内置JAX-RS实现
如果你的应用有其他依赖需要保持父类优先的加载规则,可以单独关闭内置JAX-RS特性:
- 进入控制台「服务器 > 服务器类型 > WebSphere Application Server > 目标服务器 > 进程定义 > Java 虚拟机」
- 在「通用JVM参数」中添加配置:
-Dcom.ibm.websphere.jaxrs.disableIBMJAXRS=true
- 保存配置后重启服务器和应用
3. 调整依赖scope使用服务器内置JAX-RS实现
如果你的应用代码可以兼容WebSphere内置的JAX-RS版本,修改pom.xml中相关依赖的scope为provided,避免重复打包冲突:
<dependency> <groupId>javax.ws.rs</groupId> <artifactId>jsr311-api</artifactId> <version>1.1.1</version> <scope>provided</scope> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-server</artifactId> <version>1.8</version> <scope>provided</scope> </dependency>
4. 升级应用Jersey版本适配服务器版本
如果以上方案都不满足业务需求,可将应用的Jersey 1.x版本升级到和WebSphere 8.5.5.20内置版本兼容的最新1.x版本,消除版本差异导致的冲突。
内容的提问来源于stack exchange,提问作者james2611nov
相关产品推荐
相关产品推荐

