fastjson升级不兼容的问题

一. 问题描述

又日在EDI值班时, 某研发前来询问一种令他困惑的现象, EDI线上流程执行时, 出现函数无法解析的Exception.

二. 尝试路径

  1. 这个问题出现在升级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). 导致执行迭代方法的时候出现不一致的情况.

三. 反思

  1. 尽量用成熟的第三方工具,优先google,apache然后再国内的工具包.
  2. 丰富日志后再行动.

评论