fastjson升级不兼容的问题
一. 问题描述
又日在EDI值班时, 某研发前来询问一种令他困惑的现象, EDI线上流程执行时, 出现函数无法解析的Exception.
二. 尝试路径
这个问题出现在升级fastjson(1.28 –> 1.58)之后, 怀疑是版本不兼容导致.
- 首先尝试用升级后的版本来重新编译函数所在的工程, 然后Deploy到私服, 重新上线.
结果导致错误升级为:"NoClassDefFoundError:can not initialize class XXX"
. - 增加日志信息, 发现是由于类冲突.
原因是Deploy函数工程时, 其pom.xml文件内依赖了不同版本的google-collections
.删除后复现原始问题. - 增加日志信息, 发现是
类型转换错误"java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to com.alibaba.fastjson.JSONObject", 原因时fastjson在1.28和1.58的jsonObject.getJSONArray(anway)方法不兼容导致的, 老版本会针对集合内的元素进行JSONObject转换, 新版本则直接new JSONArray(list). 导致执行迭代方法的时候出现不一致的情况.
- 首先尝试用升级后的版本来重新编译函数所在的工程, 然后Deploy到私服, 重新上线.
三. 反思
- 尽量用成熟的第三方工具,优先google,apache然后再国内的工具包.
- 丰富日志后再行动.