Spring Integration应用war包部署Weblogic 12.2.1.3失败问题求助
问题根因
该报错为Weblogic自带依赖和应用依赖版本不兼容导致的类校验错误:
- Weblogic 12.2.1.3内置的
jackson-core版本低于2.10,该版本中JsonFactory尚未实现TokenStreamFactory接口 - 你的Spring Integration应用引入的
jackson-databind版本≥2.10,该版本中MapperBuilder.streamFactory()方法的返回值为TokenStreamFactory类型 - Weblogic默认类加载机制优先加载服务器自带的jar包,运行时加载到低版本
jackson-core类,和高版本jackson-databind类不匹配,因此抛出该异常。
IDE和jar包运行时直接使用应用内部配置的依赖版本,无服务器自带旧包的干扰,所以运行正常。你之前尝试排除spring-starter-json替换为gson的方案不生效,大概率是未调整Weblogic的类加载优先级,或是应用其他依赖仍间接引入了Jackson相关类。
解决方案
按以下步骤处理即可解决问题:
- 第一步:在war包的
WEB-INF目录下新增weblogic.xml配置文件,指定优先加载应用内部的Jackson依赖,覆盖服务器自带的低版本包
配置示例:<?xml version="1.0" encoding="UTF-8"?> <weblogic-web-app xmlns="http://xmlns.oracle.com/weblogic/weblogic-web-app" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.9/weblogic-web-app.xsd"> <container-descriptor> <prefer-application-packages> <package-name>com.fasterxml.jackson.*</package-name> </prefer-application-packages> <prefer-application-resources> <resource-name>com.fasterxml.jackson.*</resource-name> </prefer-application-resources> </container-descriptor> </weblogic-web-app> - 第二步:统一应用内所有Jackson组件的版本,确保
jackson-core、jackson-databind、jackson-annotations等相关依赖的版本完全一致,建议使用2.13.x及以上的稳定版本,避免应用内部出现版本冲突。 - 第三步:如果业务场景确实不需要使用Jackson,可彻底排除所有Jackson相关的传递依赖,同时检查Spring Integration组件是否存在硬依赖Jackson的模块,按需做适配替换即可。
内容的提问来源于stack exchange,提问作者Aron Mosha
相关产品推荐
相关产品推荐

