Method not found: is$jacocoData
程序员文章站
2023-12-23 16:43:58
...
Background
最近有项目部署到DEV环境后,进行接口测试的时候,报出了Method not found: is$jacocoData的问题。然而本地环境确实正常的。
{
"status": 500,
"message": "Method not found: is$jacocoData",
"countryCode": "US",
"currencyCode": "USD",
"data": {
"serverName": "us-dev-mycis.synnex.org",
"requestURL": "......",
"requestId": "5b57c3f918034b000ca6f1be",
"errorMessage": "Method not found: is$jacocoData",
"errorType": "BIZERROR",
"classType": "com.synnex.base.service.exception.BizException",
"rootCauseStackTrace": "Method not found: is$jacocoData. com.synnex.base.service.exception.BizException: Method not found: is$jacocoData\n\tat com.synnex.address.service.validation.MD.MDServiceImpl.putMDAndUPS2Solr(MDServiceImpl.java:77)\n\tat com.synnex.address.service.validation.MD.MDServiceImpl$$FastClassBySpringCGLIB$$26b95161.invoke(<generated>)\n\tat org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)\n\tat org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:746)\n\tat org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)\n\tat org.springframework.cache.interceptor.CacheInterceptor.lambda$invoke$0(CacheInterceptor.java:53)\n\tat org.springframework.cache.interceptor.CacheAspectSupport.invokeOperation(CacheAspectSupport.java:337)\n\tat org.springframework.cache.interceptor.CacheAspectSupport.execute(CacheAspectSupport.java:392)\n"
}
}
经过分析发现,在部署dev环境时候,maven集成了jacoco来统计单元测试的代码覆盖率,而本地环境没有作相应的配置。
思路:
本地环境添加jacoco,然后进行debug,找到问题源头。
- 在IDEA的edit configuration中的VM option添加-javaagent:D:/code/git/springboot2-lib/src/main/resources/jacoco/jacocoagent.jar=output=tcpserver,address=127.0.0.1,port=10086,includes=com.synnex.*
(2)通过Debug找到了有问题的代码。在使用了反射的代码中,发现类多了一个字段jacocoData。因此在反序列化中就会报出Method not found: is$jacocoData的问题
Why:
为什么类会多jacocoData这么一个字段?
因为Jaococ使用asm实现字节码植入,是对指令级别上的字节码植入,从而可以定位到执行的代码行。
解决方案:
在反射遍历字段的时候,可以对字段进行判断看是否是复合字段,假如是复合字段就跳出,就可以解决这样的问题。
推荐阅读
-
Method not found: is$jacocoData
-
Error:Gradle DSL method not found: 'has()'
-
IDEA 单元测试报错:Class not found:xxxx springboot
-
windows7安装laravel homestead后,卡在SSH auth method: private key
-
?Not Found The requested URL /www/index.php was not found on this server.解决办法
-
No plugin found for prefix 'tomcat7'解决方案
-
IOS 出现错误reason: image not found的解决方案
-
cmake ios终端下执行提示错误 iOS version not found, tested: [5.0;5.1;6.0;6.1;7.0;8.3]的解决方案
-
C#模板方法模式(Template Method Pattern)实例教程
-
IOS 出现错误reason: image not found的解决方案