Arthas ognl ClassNotFoundException

背景

变更代码在部署环境有执行覆盖率需求,有得代码分支不便于直接构造请求,为了覆盖使用arthas直接调用目标方法

问题

ognl '@com.xxx.xxx.xxx.settle.utils.SettleJsonUtils@getSortJson()'
Failed to execute ognl, exception message: ognl.MethodFailedException: Method "getSortJson" failed for object com.xxx.xxx.xxx.settle.utils.SettleJsonUtils [java.lang.ClassNotFoundException: Unable to resolve class: com.xxx.xxx.xxx.settle.utils.SettleJsonUtils], please check $HOME/logs/arthas/arthas.log for more details. 

ClassNotFoundException确认路径正确但找不到类。

sc -d com.xxx.xxx.xxx.settle.utils.SettleJsonUtils

Arthas ognl ClassNotFoundException_第1张图片
可以看到类信息
ognl命令默认只会去 SystemClassLoader 里找类。 sc 命令会直接找所有JVM里加载的类,而tomcat的classloader是自己的,所以只有 sc 命令能找到。 ognl 命令要显式指定classloader 。

ognl -c 63c99f7 '@com.xxx.xxx.xxx.settle.utils.SettleJsonUtils@getSortJson("1")'
@String[1]

你可能感兴趣的:(java,jvm)