Skip to content

Commit 85cecb6

Browse files
committed
Consistent parameter retrieval across InvocableHandlerMethod variants
See gh-22900
1 parent f56c70d commit 85cecb6

File tree

1 file changed

+8
-12
lines changed

1 file changed

+8
-12
lines changed

spring-messaging/src/main/java/org/springframework/messaging/handler/invocation/reactive/InvocableHandlerMethod.java

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -109,12 +109,8 @@ public ParameterNameDiscoverer getParameterNameDiscoverer() {
109109
}
110110

111111
/**
112-
* Configure a reactive registry. This is needed for cases where the response
113-
* is fully handled within the controller in combination with an async void
114-
* return value.
115-
* <p>By default this is an instance of {@link ReactiveAdapterRegistry} with
116-
* default settings.
117-
* @param registry the registry to use
112+
* Configure a reactive adapter registry. This is needed for async return values.
113+
* <p>By default this is a {@link ReactiveAdapterRegistry} with default settings.
118114
*/
119115
public void setReactiveAdapterRegistry(ReactiveAdapterRegistry registry) {
120116
this.reactiveAdapterRegistry = registry;
@@ -125,11 +121,10 @@ public void setReactiveAdapterRegistry(ReactiveAdapterRegistry registry) {
125121
* Invoke the method for the given exchange.
126122
* @param message the current message
127123
* @param providedArgs optional list of argument values to match by type
128-
* @return a Mono with the result from the invocation.
124+
* @return a Mono with the result from the invocation
129125
*/
130126
@SuppressWarnings("KotlinInternalInJava")
131127
public Mono<Object> invoke(Message<?> message, Object... providedArgs) {
132-
133128
return getMethodArgumentValues(message, providedArgs).flatMap(args -> {
134129
Object value;
135130
try {
@@ -157,16 +152,17 @@ public Mono<Object> invoke(Message<?> message, Object... providedArgs) {
157152

158153
MethodParameter returnType = getReturnType();
159154
ReactiveAdapter adapter = this.reactiveAdapterRegistry.getAdapter(returnType.getParameterType());
160-
return isAsyncVoidReturnType(returnType, adapter) ?
161-
Mono.from(adapter.toPublisher(value)) : Mono.justOrEmpty(value);
155+
return (isAsyncVoidReturnType(returnType, adapter) ?
156+
Mono.from(adapter.toPublisher(value)) : Mono.justOrEmpty(value));
162157
});
163158
}
164159

165160
private Mono<Object[]> getMethodArgumentValues(Message<?> message, Object... providedArgs) {
161+
MethodParameter[] parameters = getMethodParameters();
166162
if (ObjectUtils.isEmpty(getMethodParameters())) {
167163
return EMPTY_ARGS;
168164
}
169-
MethodParameter[] parameters = getMethodParameters();
165+
170166
List<Mono<Object>> argMonos = new ArrayList<>(parameters.length);
171167
for (MethodParameter parameter : parameters) {
172168
parameter.initParameterNameDiscovery(this.parameterNameDiscoverer);
@@ -196,7 +192,7 @@ private Mono<Object[]> getMethodArgumentValues(Message<?> message, Object... pro
196192
private void logArgumentErrorIfNecessary(MethodParameter parameter, Throwable ex) {
197193
// Leave stack trace for later, if error is not handled...
198194
String exMsg = ex.getMessage();
199-
if (!exMsg.contains(parameter.getExecutable().toGenericString())) {
195+
if (exMsg != null && !exMsg.contains(parameter.getExecutable().toGenericString())) {
200196
if (logger.isDebugEnabled()) {
201197
logger.debug(formatArgumentError(parameter, exMsg));
202198
}

0 commit comments

Comments
 (0)