From 3cb746c3587e626b37760a3cc713cc80aa63763d Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Wed, 28 Jun 2023 15:45:40 +0200 Subject: [PATCH] Consistently handle invocation exceptions in TypeProxyInvocationHandler Closes gh-30764 --- .../core/SerializableTypeWrapper.java | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/spring-core/src/main/java/org/springframework/core/SerializableTypeWrapper.java b/spring-core/src/main/java/org/springframework/core/SerializableTypeWrapper.java index a8affc03b29..01e5a42b5ec 100644 --- a/spring-core/src/main/java/org/springframework/core/SerializableTypeWrapper.java +++ b/spring-core/src/main/java/org/springframework/core/SerializableTypeWrapper.java @@ -22,7 +22,6 @@ import java.io.Serializable; import java.lang.reflect.Field; import java.lang.reflect.GenericArrayType; import java.lang.reflect.InvocationHandler; -import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Proxy; @@ -204,19 +203,18 @@ final class SerializableTypeWrapper { return forTypeProvider(new MethodInvokeTypeProvider(this.provider, method, -1)); } else if (Type[].class == method.getReturnType() && ObjectUtils.isEmpty(args)) { - Type[] result = new Type[((Type[]) method.invoke(this.provider.getType())).length]; + Object returnValue = ReflectionUtils.invokeMethod(method, this.provider.getType()); + if (returnValue == null) { + return null; + } + Type[] result = new Type[((Type[]) returnValue).length]; for (int i = 0; i < result.length; i++) { result[i] = forTypeProvider(new MethodInvokeTypeProvider(this.provider, method, i)); } return result; } - try { - return method.invoke(this.provider.getType(), args); - } - catch (InvocationTargetException ex) { - throw ex.getTargetException(); - } + return ReflectionUtils.invokeMethod(method, this.provider.getType(), args); } }