org.springframework.messaging.handler.invocation

## Class InvocableHandlerMethod

- java.lang.Object
- - org.springframework.messaging.handler.HandlerMethod
  - - org.springframework.messaging.handler.invocation.InvocableHandlerMethod

    public class InvocableHandlerMethod
    extends HandlerMethod

Extension of `HandlerMethod` that invokes the underlying method with argument values resolved from the current HTTP request through a list of `HandlerMethodArgumentResolver`.

Since:
  4.0
Author:
  Rossen Stoyanchev, Juergen Hoeller

### Nested Class Summary

### Nested classes/interfaces inherited from class org.springframework.messaging.handler.HandlerMethod

`HandlerMethod.HandlerMethodParameter`

### Field Summary

### Fields inherited from class org.springframework.messaging.handler.HandlerMethod

`defaultLogger, logger`

### Constructor Summary

Constructors
Constructor and Description
`InvocableHandlerMethod(HandlerMethod handlerMethod)` Create an instance from a `HandlerMethod`.
`InvocableHandlerMethod(Object bean, Method method)` Create an instance from a bean instance and a method.
`InvocableHandlerMethod(Object bean, String methodName, Class<?>... parameterTypes)` Construct a new handler method with the given bean instance, method name and parameters.

### Method Summary

All Methods Instance Methods Concrete Methods
`protected Object` `doInvoke(Object... args)` Invoke the handler method with the given argument values.
`protected Object[]` `getMethodArgumentValues(Message<?> message, Object... providedArgs)` Get the method argument values for the current message, checking the provided argument values and falling back to the configured argument resolvers.
`Object` `invoke(Message<?> message, Object... providedArgs)` Invoke the method after resolving its argument values in the context of the given message.
`void` `setMessageMethodArgumentResolvers(HandlerMethodArgumentResolverComposite argumentResolvers)` Set `HandlerMethodArgumentResolvers` to use to use for resolving method argument values.
`void` `setParameterNameDiscoverer(org.springframework.core.ParameterNameDiscoverer parameterNameDiscoverer)` Set the ParameterNameDiscoverer for resolving parameter names when needed (e.g.

### Methods inherited from class org.springframework.messaging.handler.HandlerMethod

`assertTargetBean, createWithResolvedBean, equals, findProvidedArgument, formatArgumentError, formatInvokeError, getBean, getBeanType, getBridgedMethod, getLogger, getMethod, getMethodAnnotation, getMethodParameters, getResolvedFromHandlerMethod, getReturnType, getReturnValueType, getShortLogMessage, hashCode, hasMethodAnnotation, isVoid, setLogger, toString`

### Methods inherited from class java.lang.Object

`clone, finalize, getClass, notify, notifyAll, wait, wait, wait`

### Constructor Detail

#### InvocableHandlerMethod

    public InvocableHandlerMethod(HandlerMethod handlerMethod)

Create an instance from a `HandlerMethod`.

#### InvocableHandlerMethod

    public InvocableHandlerMethod(Object bean,
                                  Method method)

Create an instance from a bean instance and a method.

#### InvocableHandlerMethod

    public InvocableHandlerMethod(Object bean,
                                  String methodName,
                                  Class<?>... parameterTypes)
                           throws NoSuchMethodException

Construct a new handler method with the given bean instance, method name and parameters.

Parameters:
  `bean` - the object bean
  `methodName` - the method name
  `parameterTypes` - the method parameter types
Throws:
  `NoSuchMethodException` - when the method cannot be found

### Method Detail

#### setMessageMethodArgumentResolvers

    public void setMessageMethodArgumentResolvers(HandlerMethodArgumentResolverComposite argumentResolvers)

Set `HandlerMethodArgumentResolvers` to use to use for resolving method argument values.

#### setParameterNameDiscoverer

    public void setParameterNameDiscoverer(org.springframework.core.ParameterNameDiscoverer parameterNameDiscoverer)

Set the ParameterNameDiscoverer for resolving parameter names when needed (e.g. default request attribute name).

Default is a `DefaultParameterNameDiscoverer`.

#### invoke

    @Nullable
    public Object invoke(Message<?> message,
                                   Object... providedArgs)
                            throws Exception

Invoke the method after resolving its argument values in the context of the given message.

Argument values are commonly resolved through `HandlerMethodArgumentResolvers`. The `providedArgs` parameter however may supply argument values to be used directly, i.e. without argument resolution.

Delegates to `getMethodArgumentValues(org.springframework.messaging.Message<?>, java.lang.Object...)` and calls `doInvoke(java.lang.Object...)` with the resolved arguments.

Parameters:
  `message` - the current message being processed
  `providedArgs` - "given" arguments matched by type, not resolved
Returns:
  the raw value returned by the invoked method
Throws:
  `Exception` - raised if no suitable argument resolver can be found, or if the method raised an exception
See Also:
  `getMethodArgumentValues(org.springframework.messaging.Message<?>, java.lang.Object...)`, `doInvoke(java.lang.Object...)`

#### getMethodArgumentValues

    protected Object[] getMethodArgumentValues(Message<?> message,
                                               Object... providedArgs)
                                        throws Exception

Get the method argument values for the current message, checking the provided argument values and falling back to the configured argument resolvers.

The resulting array will be passed into `doInvoke(java.lang.Object...)`.

Throws:
  `Exception`
Since:
  5.1.2

#### doInvoke

    @Nullable
    protected Object doInvoke(Object... args)
                                 throws Exception

Invoke the handler method with the given argument values.

Throws:
  `Exception`