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 2cbf7d2617..5c18c09661 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 @@ -21,6 +21,9 @@ import java.lang.reflect.Method; import java.util.Arrays; import org.springframework.context.MessageSource; +import org.jetbrains.annotations.NotNull; +import org.reactivestreams.Publisher; + import org.springframework.core.CoroutinesUtils; import org.springframework.core.DefaultParameterNameDiscoverer; import org.springframework.core.KotlinDetector; @@ -200,7 +203,7 @@ public class InvocableHandlerMethod extends HandlerMethod { Method method = getBridgedMethod(); try { if (KotlinDetector.isSuspendingFunction(method)) { - return CoroutinesUtils.invokeSuspendingFunction(method, getBean(), args); + return invokeSuspendingFunction(method, args); } return method.invoke(getBean(), args); } @@ -228,4 +231,12 @@ public class InvocableHandlerMethod extends HandlerMethod { } } + /** + * Invokes Kotlin coroutine suspended function. + */ + @NotNull + protected Publisher invokeSuspendingFunction(Method method, Object[] args) { + return CoroutinesUtils.invokeSuspendingFunction(method, getBean(), args); + } + }