fastjson报NoSuchMethodError诡异

一个神奇的bug,2017年的一个工程A依赖fastjson1.2.7编译出了一个jar包,fastjson中有一个类SerializeConfig,这个类继承了一个put(Object k,Object v)的方法,所以编译出的jar包字节码里写的方法签名就是descriptor: (Ljava/lang/Object;Ljava/lang/Object;)Z。现在一个工程B使用工程A编译出的jar包,但是工程B里有fastjson的依赖1.2.60,在1.2.7之后(确切版本不知道),SerializeConfig这个类不再继承别人了,自己写了一个put(Type type, ObjectSerializer value),一个put(Object type, Object value),这时候有两个put方法。但是在fastjson1.2.60时,作者一不小心,删除了put(Object type,Object value)方法,导致运行时报NoSuchMethodError,注意时Error,不是Exception,在1.2.61,作者恢复了这个方法。 另外在研究这个错误的时候,发现有时候报NoClassDefFoundError,有时候报NoSuchMethodError,测试了一下,JVM在第一次加载出错类的时候,会报NoSuchMethodError,然后第二次再加载这个类的时候,直接报NoClassDefFoundError,不再尝试初始化了。

java.lang.NoSuchMethodError: com.alibaba.fastjson.serializer.SerializeConfig.put(Ljava/lang/Object;Ljava/lang/Object;)Z
	at com.XX.bst.XX.common.annotation.XXX.<clinit>(XXXX)
	at Test.lambda$main$0(Test.java:7)
	at java.lang.Thread.run(Thread.java:748)
java.lang.NoClassDefFoundError: Could not initialize class XXXX.XX
	at Test.lambda$main$1(Test.java:15)
	at java.lang.Thread.run(Thread.java:748)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FastjsonFastjson2都是JSON库,用于处理JSON格式的数据。 Fastjson2是Fastjson项目的重要升级,旨在为未来十年提供高性能的JSON库。相比于原来的FastjsonFastjson2在性能上有了很大的提升,并且更加安全。它完全删除了autoType白名单,提升了安全性。 在使用上,导入Fastjson2的依赖后,与原来的Fastjson在代码上基本相同。唯一的区别是在Fastjson2中,将`jsonArray.toJavaList`方法转变为`jsonArray.toList`。 总结来说,FastjsonFastjson2都是用于处理JSON数据的库,但Fastjson2是Fastjson的升级版本,提供了更高的性能和更好的安全性。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [fastjson2 介绍及使用](https://blog.csdn.net/qq_33697094/article/details/128114939)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Fastjson2你开始使用了吗?来看看源码解析](https://blog.csdn.net/chenxuyuana/article/details/125581066)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值