Skip to content

Commit e440eb8

Browse files
committed
Consistently handle invocation exceptions in TypeProxyInvocationHandler
Closes gh-30764 (cherry picked from commit 3cb746c)
1 parent 02cbee5 commit e440eb8

File tree

1 file changed

+6
-8
lines changed

1 file changed

+6
-8
lines changed

spring-core/src/main/java/org/springframework/core/SerializableTypeWrapper.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@
2222
import java.lang.reflect.Field;
2323
import java.lang.reflect.GenericArrayType;
2424
import java.lang.reflect.InvocationHandler;
25-
import java.lang.reflect.InvocationTargetException;
2625
import java.lang.reflect.Method;
2726
import java.lang.reflect.ParameterizedType;
2827
import java.lang.reflect.Proxy;
@@ -204,19 +203,18 @@ public Object invoke(Object proxy, Method method, Object[] args) throws Throwabl
204203
return forTypeProvider(new MethodInvokeTypeProvider(this.provider, method, -1));
205204
}
206205
else if (Type[].class == method.getReturnType() && ObjectUtils.isEmpty(args)) {
207-
Type[] result = new Type[((Type[]) method.invoke(this.provider.getType())).length];
206+
Object returnValue = ReflectionUtils.invokeMethod(method, this.provider.getType());
207+
if (returnValue == null) {
208+
return null;
209+
}
210+
Type[] result = new Type[((Type[]) returnValue).length];
208211
for (int i = 0; i < result.length; i++) {
209212
result[i] = forTypeProvider(new MethodInvokeTypeProvider(this.provider, method, i));
210213
}
211214
return result;
212215
}
213216

214-
try {
215-
return method.invoke(this.provider.getType(), args);
216-
}
217-
catch (InvocationTargetException ex) {
218-
throw ex.getTargetException();
219-
}
217+
return ReflectionUtils.invokeMethod(method, this.provider.getType(), args);
220218
}
221219
}
222220

0 commit comments

Comments
 (0)