Skip to content

Commit dbfc830

Browse files
glmappercaojie09
authored andcommitted
Fix skip jvm invoke (#511)
1 parent d217121 commit dbfc830

1 file changed

Lines changed: 20 additions & 21 deletions

File tree

sofa-boot-project/sofa-boot-core/runtime-sofa-boot/src/main/java/com/alipay/sofa/runtime/invoke/DynamicJvmServiceProxyFinder.java

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -180,9 +180,6 @@ public DynamicJvmServiceInvoker(ClassLoader clientClassloader,
180180
@Override
181181
protected Object doInvoke(MethodInvocation invocation) throws Throwable {
182182
try {
183-
Method targetMethod = invocation.getMethod();
184-
Object[] targetArguments = invocation.getArguments();
185-
186183
SofaLogger
187184
.debug(">> Start in Cross App JVM service invoke, the service interface is - "
188185
+ getInterfaceType());
@@ -191,16 +188,8 @@ protected Object doInvoke(MethodInvocation invocation) throws Throwable {
191188
ReplayContext.setPlaceHolder();
192189
}
193190

194-
// check whether skip serialize or not
195-
if (!serialize || SofaRuntimeProperties.isSkipJvmSerialize(clientClassloader.get())) {
196-
ClassLoader tcl = Thread.currentThread().getContextClassLoader();
197-
try {
198-
pushThreadContextClassLoader(getServiceClassLoader());
199-
return targetMethod.invoke(targetService, targetArguments);
200-
} finally {
201-
pushThreadContextClassLoader(tcl);
202-
}
203-
}
191+
Method targetMethod = invocation.getMethod();
192+
Object[] targetArguments = invocation.getArguments();
204193

205194
if (TOSTRING_METHOD.equalsIgnoreCase(targetMethod.getName())
206195
&& targetMethod.getParameterTypes().length == 0) {
@@ -214,14 +203,24 @@ protected Object doInvoke(MethodInvocation invocation) throws Throwable {
214203
}
215204

216205
Class[] oldArgumentTypes = targetMethod.getParameterTypes();
217-
218-
final Object[] arguments = (Object[]) hessianTransport(targetArguments, null);
219-
final Class[] argumentTypes = (Class[]) hessianTransport(oldArgumentTypes, null);
220-
221-
Method transformMethod = getTargetMethod(targetMethod, argumentTypes);
222-
Object retVal = transformMethod.invoke(targetService, arguments);
223-
224-
return hessianTransport(retVal, getClientClassloader());
206+
Method transformMethod;
207+
// check whether skip serialize or not
208+
if (!serialize || SofaRuntimeProperties.isSkipJvmSerialize(clientClassloader.get())) {
209+
ClassLoader tcl = Thread.currentThread().getContextClassLoader();
210+
try {
211+
pushThreadContextClassLoader(getServiceClassLoader());
212+
transformMethod = getTargetMethod(targetMethod, oldArgumentTypes);
213+
return transformMethod.invoke(targetService, targetArguments);
214+
} finally {
215+
pushThreadContextClassLoader(tcl);
216+
}
217+
} else {
218+
Object[] arguments = (Object[]) hessianTransport(targetArguments, null);
219+
Class[] argumentTypes = (Class[]) hessianTransport(oldArgumentTypes, null);
220+
transformMethod = getTargetMethod(targetMethod, argumentTypes);
221+
Object retVal = transformMethod.invoke(targetService, arguments);
222+
return hessianTransport(retVal, getClientClassloader());
223+
}
225224
} catch (InvocationTargetException ex) {
226225
throw ex.getTargetException();
227226
} finally {

0 commit comments

Comments
 (0)