diff --git a/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/main/java/com/alipay/sofa/runtime/invoke/DynamicJvmServiceProxyFinder.java b/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/main/java/com/alipay/sofa/runtime/invoke/DynamicJvmServiceProxyFinder.java index 3eb95f260..bc936cb31 100644 --- a/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/main/java/com/alipay/sofa/runtime/invoke/DynamicJvmServiceProxyFinder.java +++ b/sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/main/java/com/alipay/sofa/runtime/invoke/DynamicJvmServiceProxyFinder.java @@ -180,9 +180,6 @@ public DynamicJvmServiceInvoker(ClassLoader clientClassloader, @Override protected Object doInvoke(MethodInvocation invocation) throws Throwable { try { - Method targetMethod = invocation.getMethod(); - Object[] targetArguments = invocation.getArguments(); - SofaLogger .debug(">> Start in Cross App JVM service invoke, the service interface is - " + getInterfaceType()); @@ -191,16 +188,8 @@ protected Object doInvoke(MethodInvocation invocation) throws Throwable { ReplayContext.setPlaceHolder(); } - // check whether skip serialize or not - if (!serialize || SofaRuntimeProperties.isSkipJvmSerialize(clientClassloader.get())) { - ClassLoader tcl = Thread.currentThread().getContextClassLoader(); - try { - pushThreadContextClassLoader(getServiceClassLoader()); - return targetMethod.invoke(targetService, targetArguments); - } finally { - pushThreadContextClassLoader(tcl); - } - } + Method targetMethod = invocation.getMethod(); + Object[] targetArguments = invocation.getArguments(); if (TOSTRING_METHOD.equalsIgnoreCase(targetMethod.getName()) && targetMethod.getParameterTypes().length == 0) { @@ -214,14 +203,24 @@ protected Object doInvoke(MethodInvocation invocation) throws Throwable { } Class[] oldArgumentTypes = targetMethod.getParameterTypes(); - - final Object[] arguments = (Object[]) hessianTransport(targetArguments, null); - final Class[] argumentTypes = (Class[]) hessianTransport(oldArgumentTypes, null); - - Method transformMethod = getTargetMethod(targetMethod, argumentTypes); - Object retVal = transformMethod.invoke(targetService, arguments); - - return hessianTransport(retVal, getClientClassloader()); + Method transformMethod; + // check whether skip serialize or not + if (!serialize || SofaRuntimeProperties.isSkipJvmSerialize(clientClassloader.get())) { + ClassLoader tcl = Thread.currentThread().getContextClassLoader(); + try { + pushThreadContextClassLoader(getServiceClassLoader()); + transformMethod = getTargetMethod(targetMethod, oldArgumentTypes); + return transformMethod.invoke(targetService, targetArguments); + } finally { + pushThreadContextClassLoader(tcl); + } + } else { + Object[] arguments = (Object[]) hessianTransport(targetArguments, null); + Class[] argumentTypes = (Class[]) hessianTransport(oldArgumentTypes, null); + transformMethod = getTargetMethod(targetMethod, argumentTypes); + Object retVal = transformMethod.invoke(targetService, arguments); + return hessianTransport(retVal, getClientClassloader()); + } } catch (InvocationTargetException ex) { throw ex.getTargetException(); } finally {