diff --git a/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/InvocableHandlerMethod.java b/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/InvocableHandlerMethod.java index a7409e6f11..b9430fdb9a 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/InvocableHandlerMethod.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/InvocableHandlerMethod.java @@ -127,10 +127,11 @@ public class InvocableHandlerMethod extends HandlerMethod { * @since 5.1.2 */ protected Object[] getMethodArgumentValues(Message message, Object... providedArgs) throws Exception { - if (ObjectUtils.isEmpty(getMethodParameters())) { + MethodParameter[] parameters = getMethodParameters(); + if (ObjectUtils.isEmpty(parameters)) { return EMPTY_ARGS; } - MethodParameter[] parameters = getMethodParameters(); + Object[] args = new Object[parameters.length]; for (int i = 0; i < parameters.length; i++) { MethodParameter parameter = parameters[i]; diff --git a/spring-web/src/main/java/org/springframework/web/method/support/InvocableHandlerMethod.java b/spring-web/src/main/java/org/springframework/web/method/support/InvocableHandlerMethod.java index 37eef7ada0..e5c71b44f3 100644 --- a/spring-web/src/main/java/org/springframework/web/method/support/InvocableHandlerMethod.java +++ b/spring-web/src/main/java/org/springframework/web/method/support/InvocableHandlerMethod.java @@ -147,10 +147,11 @@ public class InvocableHandlerMethod extends HandlerMethod { protected Object[] getMethodArgumentValues(NativeWebRequest request, @Nullable ModelAndViewContainer mavContainer, Object... providedArgs) throws Exception { - if (ObjectUtils.isEmpty(getMethodParameters())) { + MethodParameter[] parameters = getMethodParameters(); + if (ObjectUtils.isEmpty(parameters)) { return EMPTY_ARGS; } - MethodParameter[] parameters = getMethodParameters(); + Object[] args = new Object[parameters.length]; for (int i = 0; i < parameters.length; i++) { MethodParameter parameter = parameters[i]; diff --git a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/InvocableHandlerMethod.java b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/InvocableHandlerMethod.java index c108c13cfd..4c9052ecda 100644 --- a/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/InvocableHandlerMethod.java +++ b/spring-webflux/src/main/java/org/springframework/web/reactive/result/method/InvocableHandlerMethod.java @@ -110,12 +110,9 @@ public class InvocableHandlerMethod extends HandlerMethod { } /** - * Configure a reactive registry. This is needed for cases where the response - * is fully handled within the controller in combination with an async void - * return value. - *

By default this is an instance of {@link ReactiveAdapterRegistry} with - * default settings. - * @param registry the registry to use + * Configure a reactive registry. This is needed for cases where the response is fully + * handled within the controller in combination with an async void return value. + *

By default this is a {@link ReactiveAdapterRegistry} with default settings. */ public void setReactiveAdapterRegistry(ReactiveAdapterRegistry registry) { this.reactiveAdapterRegistry = registry; @@ -171,10 +168,11 @@ public class InvocableHandlerMethod extends HandlerMethod { private Mono getMethodArgumentValues( ServerWebExchange exchange, BindingContext bindingContext, Object... providedArgs) { - if (ObjectUtils.isEmpty(getMethodParameters())) { + MethodParameter[] parameters = getMethodParameters(); + if (ObjectUtils.isEmpty(parameters)) { return EMPTY_ARGS; } - MethodParameter[] parameters = getMethodParameters(); + List> argMonos = new ArrayList<>(parameters.length); for (MethodParameter parameter : parameters) { parameter.initParameterNameDiscovery(this.parameterNameDiscoverer); @@ -198,7 +196,7 @@ public class InvocableHandlerMethod extends HandlerMethod { } } return Mono.zip(argMonos, values -> - Stream.of(values).map(o -> o != NO_ARG_VALUE ? o : null).toArray()); + Stream.of(values).map(value -> value != NO_ARG_VALUE ? value : null).toArray()); } private void logArgumentErrorIfNecessary(ServerWebExchange exchange, MethodParameter parameter, Throwable ex) {