使用jvm-sandbox时报NoClassDefFoundError错误

使用jvm-sandbox,修改指定方法返回值,运行到下方代码的JSONObject时报错:
java.lang.NoClassDefFoundError:com/alibaba/fastjson/JSONObject。

尝试查看自己的fastjson的版本和目标系统里面的fastjson,版本也是一致的。
尝试用如下方式修改其他方法返回值,发现有的会报这个错误,有些又不报错。

有些懵了,求解:使用jvm-sandbox时为啥会出现如此报错,有何解决方案不?

import com.alibaba.fastjson.JSONObject;
new EventWatchBuilder(moduleEventWatcher)
      .onClass("com.mice.micetools.out.QueryCztStatusHandle")
      .onBehavior("queryCztStatus")
      .onWatch(new AdviceListener() {
          @Override
          protected void afterReturning(Advice advice) throws Throwable {
              String stringObj = "{\"status\":\"09\",\"respCode\":\"S\"}";
              JSONObject jsonObject1 = JSONObject.parseObject(stringObj);
              Class<?> cl;
              try {
                  cl = Class.forName("com.mice.micetools.out.bean.QueryCztStatusRes");
              }catch (ClassNotFoundException e){
                  e.printStackTrace();
                  return;
              }
              ProcessController.returnImmediately(jsonObject1.toJavaObject(cl));
          }
      });

贴下报错堆栈


2022-10-14 11:27:44 default WARN  on-event: event|RETURN|4910|4910|1006 occur an error.
java.lang.NoClassDefFoundError: com/alibaba/fastjson/JSONObject
        at MiceMockModule$2.afterReturning(MiceMockModule.java:118)
        at com.alibaba.jvm.sandbox.api.listener.ext.AdviceAdapterListener.switchEvent(AdviceAdapterListener.java:118)
        at com.alibaba.jvm.sandbox.api.listener.ext.AdviceAdapterListener.onEvent(AdviceAdapterListener.java:39)
        at com.alibaba.jvm.sandbox.core.enhance.weaver.EventListenerHandler.handleEvent(EventListenerHandler.java:117)
        at com.alibaba.jvm.sandbox.core.enhance.weaver.EventListenerHandler.handleOnEnd(EventListenerHandler.java:437)
        at com.alibaba.jvm.sandbox.core.enhance.weaver.EventListenerHandler.handleOnReturn(EventListenerHandler.java:371)
        at java.com.alibaba.jvm.sandbox.spy.Spy.spyMethodOnReturn(Spy.java:192)
        at .service.czt.out.QueryCztStatusHandle.queryCztStatus(QueryCztStatusHandle.java:52)
        at com.mice.micetools.service.czt.helper.CztApplyHelper.getCztApply(CztApplyHelper.java:98)
        at com.mice.micetools.service.czt.impl.CztProjectServiceImpl.queryCztApply(CztProjectServiceImpl.java:493)
        at com.mice.micetools.service.czt.impl.CztProjectServiceImpl$$FastClassBySpringCGLIB$$2ab6e8cd.invoke(<generated>)
        at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:652)
        at com.mice.micetools.service.czt.impl.CztProjectServiceImpl$$EnhancerBySpringCGLIB$$1891bfe.queryCztApply(<generated>)
        at com.mice.micetools.biz.czt.CztProjectFacadeImpl.queryCztApply(CztProjectFacadeImpl.java:52)
        at com.mice.micetools.biz.czt.CztProjectFacadeImpl$$FastClassBySpringCGLIB$$f8ca005a.invoke(<generated>)
        at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
        at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:721)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
        at com.mice.micetools.biz.aop.Mice2PlatformParamAdvice.invoke(Mice2PlatformParamAdvice.java:34)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        at com.mice.micetools.biz.aop.TravelMice2BizAdvice.invoke(TravelMice2BizAdvice.java:102)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
        at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:656)
        at com.mice.micetools.biz.czt.CztProjectFacadeImpl$$EnhancerBySpringCGLIB$$48cbbd62.queryCztApply(<generated>)
        at com.alibaba.dubbo.common.bytecode.Wrapper154.invokeMethod(Wrapper154.java)
at com.alibaba.dubbo.rpc.proxy.javassist.JavassistProxyFactory$1.doInvoke(JavassistProxyFactory.java:46)
        at com.alibaba.dubbo.rpc.proxy.AbstractProxyInvoker.invoke(AbstractProxyInvoker.java:72)
        at com.alibaba.dubbo.rpc.protocol.InvokerWrapper.invoke(InvokerWrapper.java:53)
        at com.alibaba.dubbo.rpc.filter.ExceptionFilter.invoke(ExceptionFilter.java:64)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.alibaba.dubbo.rpc.filter.TimeoutFilter.invoke(TimeoutFilter.java:42)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.alibaba.dubbo.rpc.protocol.dubbo.filter.TraceFilter.invoke(TraceFilter.java:78)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.pinganfu.industry.common.dubbo.filter.ErrorFilter.invoke(ErrorFilter.java:31)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.pinganfu.industry.common.dubbo.filter.AsyncFilter.invoke(AsyncFilter.java:17)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.alibaba.dubbo.monitor.support.MonitorFilter.invoke(MonitorFilter.java:75)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.yqb.industry.monitor.dubbo.TravelDubboCatFilter.invoke(TravelDubboCatFilter.java:64)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
at com.pingan.zues.utility.logging.performance.service.BaseDubboDigestFilter.invoke(BaseDubboDigestFilter.java:92)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.pingan.zues.utility.logging.trace.instrument.dubbo.DubboProviderTraceContextFilter.invoke(DubboProviderTraceContextFilter.java:42)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.pingan.zues.integration.group.dubbo.filter.SourceGroupProviderFilter.invoke(SourceGroupProviderFilter.java:46)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.pinganfu.cat.dubbo.CatTransaction.invoke(CatTransaction.java:61)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.alibaba.dubbo.rpc.protocol.webservice.attachment.RpcAttachmentFilter.invoke(RpcAttachmentFilter.java:25)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.alibaba.dubbo.rpc.filter.ContextFilter.invoke(ContextFilter.java:65)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.alibaba.dubbo.rpc.filter.GenericFilter.invoke(GenericFilter.java:88)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.alibaba.dubbo.rpc.filter.ClassLoaderFilter.invoke(ClassLoaderFilter.java:38)
        at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.alibaba.dubbo.rpc.filter.EchoFilter.invoke(EchoFilter.java:38)
 at com.alibaba.dubbo.rpc.protocol.ProtocolFilterWrapper$1.invoke(ProtocolFilterWrapper.java:91)
        at com.alibaba.dubbo.rpc.protocol.dubbo.DubboProtocol$1.reply(DubboProtocol.java:110)
        at com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.handleRequest(HeaderExchangeHandler.java:84)
        at com.alibaba.dubbo.remoting.exchange.support.header.HeaderExchangeHandler.received(HeaderExchangeHandler.java:170)
        at com.alibaba.dubbo.remoting.transport.DecodeHandler.received(DecodeHandler.java:52)
        at com.alibaba.dubbo.remoting.transport.dispatcher.ChannelEventRunnable.run(ChannelEventRunnable.java:82)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: com.alibaba.fastjson.JSONObject
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at com.alibaba.jvm.sandbox.core.classloader.RoutingURLClassLoader.access$601(RoutingURLClassLoader.java:22)
        at com.alibaba.jvm.sandbox.core.classloader.RoutingURLClassLoader$1.loadClass(RoutingURLClassLoader.java:105)
        at com.alibaba.jvm.sandbox.core.classloader.ClassLoadingLock.loadingInLock(ClassLoadingLock.java:55)
        at com.alibaba.jvm.sandbox.core.classloader.RoutingURLClassLoader.loadClass(RoutingURLClassLoader.java:64)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        ... 71 common frames omitted

没找到 这个依赖,检查下你的依赖导入

import com.alibaba.fastjson.JSONObject;

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>fastjson</artifactId>
	<version>1.2.73</version>
</dependency>

应该没问题吧,而且如果把afterReturning事件改成before事件,就不会报这个错,能返回修改后的对象。不知道是和目标系统有啥冲突还是怎么的。

你的被测项目里有fastjson依赖嘛,可以加上试试

有的,被测的方法里面还使用了com.alibaba.fastjson.JSON,而且还特意修改成了同一版本,还是报这个错