使用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,而且还特意修改成了同一版本,还是报这个错