org.springframework.web.bind.annotation.support
Class HandlerMethodInvoker

java.lang.Object
  extended by org.springframework.web.bind.annotation.support.HandlerMethodInvoker
Direct Known Subclasses:
AnnotationMethodHandlerAdapter.PortletHandlerMethodInvoker, AnnotationMethodHandlerAdapter.ServletHandlerMethodInvoker

public class HandlerMethodInvoker
extends java.lang.Object

Support class for invoking an annotated handler method. Operates on the introspection results of a HandlerMethodResolver for a specific handler type.

Used by AnnotationMethodHandlerAdapter and AnnotationMethodHandlerAdapter.

Since:
2.5.2
Author:
Juergen Hoeller, Arjen Poutsma
See Also:
invokeHandlerMethod(java.lang.reflect.Method, java.lang.Object, org.springframework.web.context.request.NativeWebRequest, org.springframework.ui.ExtendedModelMap)

Field Summary
private  WebBindingInitializer bindingInitializer
           
private  WebArgumentResolver[] customArgumentResolvers
           
private static Log logger
          We'll create a lot of these objects, so we don't want a new logger every time.
private  HttpMessageConverter[] messageConverters
           
private  HandlerMethodResolver methodResolver
           
private static java.lang.String MODEL_KEY_PREFIX_STALE
           
private  ParameterNameDiscoverer parameterNameDiscoverer
           
private  SessionAttributeStore sessionAttributeStore
           
private  SimpleSessionStatus sessionStatus
           
 
Constructor Summary
HandlerMethodInvoker(HandlerMethodResolver methodResolver)
           
HandlerMethodInvoker(HandlerMethodResolver methodResolver, WebBindingInitializer bindingInitializer)
           
HandlerMethodInvoker(HandlerMethodResolver methodResolver, WebBindingInitializer bindingInitializer, SessionAttributeStore sessionAttributeStore, ParameterNameDiscoverer parameterNameDiscoverer, WebArgumentResolver[] customArgumentResolvers, HttpMessageConverter[] messageConverters)
           
 
Method Summary
protected  void addReturnValueAsModelAttribute(java.lang.reflect.Method handlerMethod, java.lang.Class handlerType, java.lang.Object returnValue, ExtendedModelMap implicitModel)
           
private  java.lang.Object checkValue(java.lang.String name, java.lang.Object value, java.lang.Class paramType)
           
protected  WebDataBinder createBinder(NativeWebRequest webRequest, java.lang.Object target, java.lang.String objectName)
           
protected  HttpInputMessage createHttpInputMessage(NativeWebRequest webRequest)
          Return a HttpInputMessage for the given NativeWebRequest.
protected  HttpOutputMessage createHttpOutputMessage(NativeWebRequest webRequest)
          Return a HttpOutputMessage for the given NativeWebRequest.
protected  void doBind(WebDataBinder binder, NativeWebRequest webRequest)
           
private  void doBind(WebDataBinder binder, NativeWebRequest webRequest, boolean validate, boolean failOnErrors)
           
private  java.lang.Class<?> getHttpEntityType(MethodParameter methodParam)
           
private  java.lang.String getRequiredParameterName(MethodParameter methodParam)
           
protected  void initBinder(java.lang.Object handler, java.lang.String attrName, WebDataBinder binder, NativeWebRequest webRequest)
           
 java.lang.Object invokeHandlerMethod(java.lang.reflect.Method handlerMethod, java.lang.Object handler, NativeWebRequest webRequest, ExtendedModelMap implicitModel)
           
protected  boolean isBindingCandidate(java.lang.Object value)
          Determine whether the given value qualifies as a "binding candidate", i.e.
protected  java.lang.String parseDefaultValueAttribute(java.lang.String value)
           
protected  void raiseMissingCookieException(java.lang.String cookieName, java.lang.Class paramType)
           
protected  void raiseMissingHeaderException(java.lang.String headerName, java.lang.Class paramType)
           
protected  void raiseMissingParameterException(java.lang.String paramName, java.lang.Class paramType)
           
protected  void raiseSessionRequiredException(java.lang.String message)
           
private  java.lang.Object readWithMessageConverters(MethodParameter methodParam, HttpInputMessage inputMessage, java.lang.Class paramType)
           
protected  java.lang.Object resolveCommonArgument(MethodParameter methodParameter, NativeWebRequest webRequest)
           
private  java.lang.Object resolveCookieValue(java.lang.String cookieName, boolean required, java.lang.String defaultValue, MethodParameter methodParam, NativeWebRequest webRequest, java.lang.Object handlerForInitBinderCall)
           
protected  java.lang.Object resolveCookieValue(java.lang.String cookieName, java.lang.Class paramType, NativeWebRequest webRequest)
          Resolves the given @CookieValue annotation.
protected  java.lang.Object resolveDefaultValue(java.lang.String value)
           
private  java.lang.Object[] resolveHandlerArguments(java.lang.reflect.Method handlerMethod, java.lang.Object handler, NativeWebRequest webRequest, ExtendedModelMap implicitModel)
           
private  HttpEntity resolveHttpEntityRequest(MethodParameter methodParam, NativeWebRequest webRequest)
           
private  java.lang.Object[] resolveInitBinderArguments(java.lang.Object handler, java.lang.reflect.Method initBinderMethod, WebDataBinder binder, NativeWebRequest webRequest)
           
private  WebDataBinder resolveModelAttribute(java.lang.String attrName, MethodParameter methodParam, ExtendedModelMap implicitModel, NativeWebRequest webRequest, java.lang.Object handler)
           
protected  java.lang.String resolvePathVariable(java.lang.String pathVarName, java.lang.Class paramType, NativeWebRequest webRequest)
          Resolves the given @PathVariable annotation.
private  java.lang.Object resolvePathVariable(java.lang.String pathVarName, MethodParameter methodParam, NativeWebRequest webRequest, java.lang.Object handlerForInitBinderCall)
           
protected  java.lang.Object resolveRequestBody(MethodParameter methodParam, NativeWebRequest webRequest, java.lang.Object handler)
          Resolves the given @RequestBody annotation.
private  java.lang.Object resolveRequestHeader(java.lang.String headerName, boolean required, java.lang.String defaultValue, MethodParameter methodParam, NativeWebRequest webRequest, java.lang.Object handlerForInitBinderCall)
           
private  java.util.Map resolveRequestHeaderMap(java.lang.Class<? extends java.util.Map> mapType, NativeWebRequest webRequest)
           
private  java.lang.Object resolveRequestParam(java.lang.String paramName, boolean required, java.lang.String defaultValue, MethodParameter methodParam, NativeWebRequest webRequest, java.lang.Object handlerForInitBinderCall)
           
private  java.util.Map resolveRequestParamMap(java.lang.Class<? extends java.util.Map> mapType, NativeWebRequest webRequest)
           
protected  java.lang.Object resolveStandardArgument(java.lang.Class<?> parameterType, NativeWebRequest webRequest)
           
 void updateModelAttributes(java.lang.Object handler, java.util.Map<java.lang.String,java.lang.Object> mavModel, ExtendedModelMap implicitModel, NativeWebRequest webRequest)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

MODEL_KEY_PREFIX_STALE

private static final java.lang.String MODEL_KEY_PREFIX_STALE

logger

private static final Log logger
We'll create a lot of these objects, so we don't want a new logger every time.


methodResolver

private final HandlerMethodResolver methodResolver

bindingInitializer

private final WebBindingInitializer bindingInitializer

sessionAttributeStore

private final SessionAttributeStore sessionAttributeStore

parameterNameDiscoverer

private final ParameterNameDiscoverer parameterNameDiscoverer

customArgumentResolvers

private final WebArgumentResolver[] customArgumentResolvers

messageConverters

private final HttpMessageConverter[] messageConverters

sessionStatus

private final SimpleSessionStatus sessionStatus
Constructor Detail

HandlerMethodInvoker

public HandlerMethodInvoker(HandlerMethodResolver methodResolver)

HandlerMethodInvoker

public HandlerMethodInvoker(HandlerMethodResolver methodResolver,
                            WebBindingInitializer bindingInitializer)

HandlerMethodInvoker

public HandlerMethodInvoker(HandlerMethodResolver methodResolver,
                            WebBindingInitializer bindingInitializer,
                            SessionAttributeStore sessionAttributeStore,
                            ParameterNameDiscoverer parameterNameDiscoverer,
                            WebArgumentResolver[] customArgumentResolvers,
                            HttpMessageConverter[] messageConverters)
Method Detail

invokeHandlerMethod

public final java.lang.Object invokeHandlerMethod(java.lang.reflect.Method handlerMethod,
                                                  java.lang.Object handler,
                                                  NativeWebRequest webRequest,
                                                  ExtendedModelMap implicitModel)
                                           throws java.lang.Exception
Throws:
java.lang.Exception

updateModelAttributes

public final void updateModelAttributes(java.lang.Object handler,
                                        java.util.Map<java.lang.String,java.lang.Object> mavModel,
                                        ExtendedModelMap implicitModel,
                                        NativeWebRequest webRequest)
                                 throws java.lang.Exception
Throws:
java.lang.Exception

resolveHandlerArguments

private java.lang.Object[] resolveHandlerArguments(java.lang.reflect.Method handlerMethod,
                                                   java.lang.Object handler,
                                                   NativeWebRequest webRequest,
                                                   ExtendedModelMap implicitModel)
                                            throws java.lang.Exception
Throws:
java.lang.Exception

initBinder

protected void initBinder(java.lang.Object handler,
                          java.lang.String attrName,
                          WebDataBinder binder,
                          NativeWebRequest webRequest)
                   throws java.lang.Exception
Throws:
java.lang.Exception

resolveInitBinderArguments

private java.lang.Object[] resolveInitBinderArguments(java.lang.Object handler,
                                                      java.lang.reflect.Method initBinderMethod,
                                                      WebDataBinder binder,
                                                      NativeWebRequest webRequest)
                                               throws java.lang.Exception
Throws:
java.lang.Exception

resolveRequestParam

private java.lang.Object resolveRequestParam(java.lang.String paramName,
                                             boolean required,
                                             java.lang.String defaultValue,
                                             MethodParameter methodParam,
                                             NativeWebRequest webRequest,
                                             java.lang.Object handlerForInitBinderCall)
                                      throws java.lang.Exception
Throws:
java.lang.Exception

resolveRequestParamMap

private java.util.Map resolveRequestParamMap(java.lang.Class<? extends java.util.Map> mapType,
                                             NativeWebRequest webRequest)

resolveRequestHeader

private java.lang.Object resolveRequestHeader(java.lang.String headerName,
                                              boolean required,
                                              java.lang.String defaultValue,
                                              MethodParameter methodParam,
                                              NativeWebRequest webRequest,
                                              java.lang.Object handlerForInitBinderCall)
                                       throws java.lang.Exception
Throws:
java.lang.Exception

resolveRequestHeaderMap

private java.util.Map resolveRequestHeaderMap(java.lang.Class<? extends java.util.Map> mapType,
                                              NativeWebRequest webRequest)

resolveRequestBody

protected java.lang.Object resolveRequestBody(MethodParameter methodParam,
                                              NativeWebRequest webRequest,
                                              java.lang.Object handler)
                                       throws java.lang.Exception
Resolves the given @RequestBody annotation.

Throws:
java.lang.Exception

resolveHttpEntityRequest

private HttpEntity resolveHttpEntityRequest(MethodParameter methodParam,
                                            NativeWebRequest webRequest)
                                     throws java.lang.Exception
Throws:
java.lang.Exception

readWithMessageConverters

private java.lang.Object readWithMessageConverters(MethodParameter methodParam,
                                                   HttpInputMessage inputMessage,
                                                   java.lang.Class paramType)
                                            throws java.lang.Exception
Throws:
java.lang.Exception

getHttpEntityType

private java.lang.Class<?> getHttpEntityType(MethodParameter methodParam)

resolveCookieValue

private java.lang.Object resolveCookieValue(java.lang.String cookieName,
                                            boolean required,
                                            java.lang.String defaultValue,
                                            MethodParameter methodParam,
                                            NativeWebRequest webRequest,
                                            java.lang.Object handlerForInitBinderCall)
                                     throws java.lang.Exception
Throws:
java.lang.Exception

resolveCookieValue

protected java.lang.Object resolveCookieValue(java.lang.String cookieName,
                                              java.lang.Class paramType,
                                              NativeWebRequest webRequest)
                                       throws java.lang.Exception
Resolves the given @CookieValue annotation.

Throws an UnsupportedOperationException by default.

Throws:
java.lang.Exception

resolvePathVariable

private java.lang.Object resolvePathVariable(java.lang.String pathVarName,
                                             MethodParameter methodParam,
                                             NativeWebRequest webRequest,
                                             java.lang.Object handlerForInitBinderCall)
                                      throws java.lang.Exception
Throws:
java.lang.Exception

resolvePathVariable

protected java.lang.String resolvePathVariable(java.lang.String pathVarName,
                                               java.lang.Class paramType,
                                               NativeWebRequest webRequest)
                                        throws java.lang.Exception
Resolves the given @PathVariable annotation.

Throws an UnsupportedOperationException by default.

Throws:
java.lang.Exception

getRequiredParameterName

private java.lang.String getRequiredParameterName(MethodParameter methodParam)

checkValue

private java.lang.Object checkValue(java.lang.String name,
                                    java.lang.Object value,
                                    java.lang.Class paramType)

resolveModelAttribute

private WebDataBinder resolveModelAttribute(java.lang.String attrName,
                                            MethodParameter methodParam,
                                            ExtendedModelMap implicitModel,
                                            NativeWebRequest webRequest,
                                            java.lang.Object handler)
                                     throws java.lang.Exception
Throws:
java.lang.Exception

isBindingCandidate

protected boolean isBindingCandidate(java.lang.Object value)
Determine whether the given value qualifies as a "binding candidate", i.e. might potentially be subject to bean-style data binding later on.


raiseMissingParameterException

protected void raiseMissingParameterException(java.lang.String paramName,
                                              java.lang.Class paramType)
                                       throws java.lang.Exception
Throws:
java.lang.Exception

raiseMissingHeaderException

protected void raiseMissingHeaderException(java.lang.String headerName,
                                           java.lang.Class paramType)
                                    throws java.lang.Exception
Throws:
java.lang.Exception

raiseMissingCookieException

protected void raiseMissingCookieException(java.lang.String cookieName,
                                           java.lang.Class paramType)
                                    throws java.lang.Exception
Throws:
java.lang.Exception

raiseSessionRequiredException

protected void raiseSessionRequiredException(java.lang.String message)
                                      throws java.lang.Exception
Throws:
java.lang.Exception

createBinder

protected WebDataBinder createBinder(NativeWebRequest webRequest,
                                     java.lang.Object target,
                                     java.lang.String objectName)
                              throws java.lang.Exception
Throws:
java.lang.Exception

doBind

private void doBind(WebDataBinder binder,
                    NativeWebRequest webRequest,
                    boolean validate,
                    boolean failOnErrors)
             throws java.lang.Exception
Throws:
java.lang.Exception

doBind

protected void doBind(WebDataBinder binder,
                      NativeWebRequest webRequest)
               throws java.lang.Exception
Throws:
java.lang.Exception

createHttpInputMessage

protected HttpInputMessage createHttpInputMessage(NativeWebRequest webRequest)
                                           throws java.lang.Exception
Return a HttpInputMessage for the given NativeWebRequest.

Throws an UnsupportedOperation1Exception by default.

Throws:
java.lang.Exception

createHttpOutputMessage

protected HttpOutputMessage createHttpOutputMessage(NativeWebRequest webRequest)
                                             throws java.lang.Exception
Return a HttpOutputMessage for the given NativeWebRequest.

Throws an UnsupportedOperationException by default.

Throws:
java.lang.Exception

parseDefaultValueAttribute

protected java.lang.String parseDefaultValueAttribute(java.lang.String value)

resolveDefaultValue

protected java.lang.Object resolveDefaultValue(java.lang.String value)

resolveCommonArgument

protected java.lang.Object resolveCommonArgument(MethodParameter methodParameter,
                                                 NativeWebRequest webRequest)
                                          throws java.lang.Exception
Throws:
java.lang.Exception

resolveStandardArgument

protected java.lang.Object resolveStandardArgument(java.lang.Class<?> parameterType,
                                                   NativeWebRequest webRequest)
                                            throws java.lang.Exception
Throws:
java.lang.Exception

addReturnValueAsModelAttribute

protected final void addReturnValueAsModelAttribute(java.lang.reflect.Method handlerMethod,
                                                    java.lang.Class handlerType,
                                                    java.lang.Object returnValue,
                                                    ExtendedModelMap implicitModel)