Consistent parameter retrieval across InvocableHandlerMethod variants
See gh-22900
This commit is contained in:
parent
f56c70d2f0
commit
85cecb66e5
|
|
@ -109,12 +109,8 @@ public class InvocableHandlerMethod extends HandlerMethod {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Configure a reactive registry. This is needed for cases where the response
|
* Configure a reactive adapter registry. This is needed for async return values.
|
||||||
* is fully handled within the controller in combination with an async void
|
* <p>By default this is a {@link ReactiveAdapterRegistry} with default settings.
|
||||||
* return value.
|
|
||||||
* <p>By default this is an instance of {@link ReactiveAdapterRegistry} with
|
|
||||||
* default settings.
|
|
||||||
* @param registry the registry to use
|
|
||||||
*/
|
*/
|
||||||
public void setReactiveAdapterRegistry(ReactiveAdapterRegistry registry) {
|
public void setReactiveAdapterRegistry(ReactiveAdapterRegistry registry) {
|
||||||
this.reactiveAdapterRegistry = registry;
|
this.reactiveAdapterRegistry = registry;
|
||||||
|
|
@ -125,11 +121,10 @@ public class InvocableHandlerMethod extends HandlerMethod {
|
||||||
* Invoke the method for the given exchange.
|
* Invoke the method for the given exchange.
|
||||||
* @param message the current message
|
* @param message the current message
|
||||||
* @param providedArgs optional list of argument values to match by type
|
* @param providedArgs optional list of argument values to match by type
|
||||||
* @return a Mono with the result from the invocation.
|
* @return a Mono with the result from the invocation
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("KotlinInternalInJava")
|
@SuppressWarnings("KotlinInternalInJava")
|
||||||
public Mono<Object> invoke(Message<?> message, Object... providedArgs) {
|
public Mono<Object> invoke(Message<?> message, Object... providedArgs) {
|
||||||
|
|
||||||
return getMethodArgumentValues(message, providedArgs).flatMap(args -> {
|
return getMethodArgumentValues(message, providedArgs).flatMap(args -> {
|
||||||
Object value;
|
Object value;
|
||||||
try {
|
try {
|
||||||
|
|
@ -157,16 +152,17 @@ public class InvocableHandlerMethod extends HandlerMethod {
|
||||||
|
|
||||||
MethodParameter returnType = getReturnType();
|
MethodParameter returnType = getReturnType();
|
||||||
ReactiveAdapter adapter = this.reactiveAdapterRegistry.getAdapter(returnType.getParameterType());
|
ReactiveAdapter adapter = this.reactiveAdapterRegistry.getAdapter(returnType.getParameterType());
|
||||||
return isAsyncVoidReturnType(returnType, adapter) ?
|
return (isAsyncVoidReturnType(returnType, adapter) ?
|
||||||
Mono.from(adapter.toPublisher(value)) : Mono.justOrEmpty(value);
|
Mono.from(adapter.toPublisher(value)) : Mono.justOrEmpty(value));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
private Mono<Object[]> getMethodArgumentValues(Message<?> message, Object... providedArgs) {
|
private Mono<Object[]> getMethodArgumentValues(Message<?> message, Object... providedArgs) {
|
||||||
|
MethodParameter[] parameters = getMethodParameters();
|
||||||
if (ObjectUtils.isEmpty(getMethodParameters())) {
|
if (ObjectUtils.isEmpty(getMethodParameters())) {
|
||||||
return EMPTY_ARGS;
|
return EMPTY_ARGS;
|
||||||
}
|
}
|
||||||
MethodParameter[] parameters = getMethodParameters();
|
|
||||||
List<Mono<Object>> argMonos = new ArrayList<>(parameters.length);
|
List<Mono<Object>> argMonos = new ArrayList<>(parameters.length);
|
||||||
for (MethodParameter parameter : parameters) {
|
for (MethodParameter parameter : parameters) {
|
||||||
parameter.initParameterNameDiscovery(this.parameterNameDiscoverer);
|
parameter.initParameterNameDiscovery(this.parameterNameDiscoverer);
|
||||||
|
|
@ -196,7 +192,7 @@ public class InvocableHandlerMethod extends HandlerMethod {
|
||||||
private void logArgumentErrorIfNecessary(MethodParameter parameter, Throwable ex) {
|
private void logArgumentErrorIfNecessary(MethodParameter parameter, Throwable ex) {
|
||||||
// Leave stack trace for later, if error is not handled...
|
// Leave stack trace for later, if error is not handled...
|
||||||
String exMsg = ex.getMessage();
|
String exMsg = ex.getMessage();
|
||||||
if (!exMsg.contains(parameter.getExecutable().toGenericString())) {
|
if (exMsg != null && !exMsg.contains(parameter.getExecutable().toGenericString())) {
|
||||||
if (logger.isDebugEnabled()) {
|
if (logger.isDebugEnabled()) {
|
||||||
logger.debug(formatArgumentError(parameter, exMsg));
|
logger.debug(formatArgumentError(parameter, exMsg));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue