Class AbstractMethodMessageHandler<T>
- Type Parameters:
T
- the type of the Object that contains information mapping aHandlerMethod
to incoming messages
- All Implemented Interfaces:
Aware
,InitializingBean
,ApplicationContextAware
,MessageHandler
- Direct Known Subclasses:
SimpAnnotationMethodMessageHandler
Also supports discovering and invoking exception handling methods to process exceptions raised during message handling.
- Since:
- 4.0
- Author:
- Rossen Stoyanchev, Juergen Hoeller
-
Field Summary
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
Invoked by the containingBeanFactory
after it has set all bean properties and satisfiedBeanFactoryAware
,ApplicationContextAware
etc.protected abstract AbstractExceptionHandlerMethodResolver
createExceptionHandlerMethodResolverFor
(Class<?> beanType) protected HandlerMethod
createHandlerMethod
(Object handler, Method method) Create a HandlerMethod instance from an Object handler that is either a handler instance or a String-based bean name.protected final void
detectHandlerMethods
(Object handler) Detect if the given handler has any methods that can handle messages and if so register it with the extracted mapping information.Return the complete list of argument resolvers.Return the configured custom argument resolvers, if any.Return the configured custom return value handlers, if any.getDestination
(Message<?> message) Return the configured destination prefixes, if any.getDirectLookupDestinations
(T mapping) Return destinations contained in the mapping that are not patterns and are therefore suitable for direct lookups.protected @Nullable InvocableHandlerMethod
getExceptionHandlerMethod
(HandlerMethod handlerMethod, Exception exception) Find an@MessageExceptionHandler
method for the given exception.protected @Nullable org.apache.commons.logging.Log
Return a logger to set onInvocableHandlerMethod
.Return a map with all handler methods and their mappings.getLookupDestination
(@Nullable String destination) Check whether the given destination (of an incoming message) matches to one of the configured destination prefixes and if so return the remaining portion of the destination after the matched prefix.protected abstract Comparator<T>
getMappingComparator
(Message<?> message) Return a comparator for sorting matching mappings.getMappingForMethod
(Method method, Class<?> handlerType) Provide the mapping for a handler method.getMatchingMapping
(T mapping, Message<?> message) Check if a mapping matches the current message and return a possibly new mapping with conditions relevant to the current request.protected @Nullable org.apache.commons.logging.Log
Return a logger to set onHandlerMethodReturnValueHandlerComposite
.Return the complete list of return value handlers.protected void
handleMatch
(T mapping, HandlerMethod handlerMethod, String lookupDestination, Message<?> message) void
handleMessage
(Message<?> message) Handle the given message.protected void
handleMessageInternal
(Message<?> message, String lookupDestination) protected void
handleNoMatch
(Set<T> ts, String lookupDestination, Message<?> message) protected abstract List<? extends HandlerMethodArgumentResolver>
Return the list of argument resolvers to use.protected abstract List<? extends HandlerMethodReturnValueHandler>
Return the list of return value handlers to use.protected abstract boolean
Whether the given bean type should be introspected for messaging handling methods.protected void
processHandlerMethodException
(HandlerMethod handlerMethod, Exception exception, Message<?> message) protected void
registerExceptionHandlerAdvice
(MessagingAdviceBean bean, AbstractExceptionHandlerMethodResolver resolver) Subclasses can invoke this method to populate the MessagingAdviceBean cache (for example, to support "global"@MessageExceptionHandler
).protected void
registerHandlerMethod
(Object handler, Method method, T mapping) Register a handler method and its unique mapping.void
setApplicationContext
(@Nullable ApplicationContext applicationContext) Set the ApplicationContext that this object runs in.void
setArgumentResolvers
(@Nullable List<HandlerMethodArgumentResolver> argumentResolvers) Configure the complete list of supported argument types, effectively overriding the ones configured by default.void
setCustomArgumentResolvers
(@Nullable List<HandlerMethodArgumentResolver> customArgumentResolvers) Sets the list of customHandlerMethodArgumentResolver
s that will be used after resolvers for supported argument type.void
setCustomReturnValueHandlers
(@Nullable List<HandlerMethodReturnValueHandler> customReturnValueHandlers) Set the list of customHandlerMethodReturnValueHandler
s that will be used after return value handlers for known types.void
setDestinationPrefixes
(@Nullable Collection<String> prefixes) When this property is configured only messages to destinations matching one of the configured prefixes are eligible for handling.void
setReturnValueHandlers
(@Nullable List<HandlerMethodReturnValueHandler> returnValueHandlers) Configure the complete list of supported return value types, effectively overriding the ones configured by default.toString()
-
Field Details
-
logger
protected final org.apache.commons.logging.Log logger
-
-
Constructor Details
-
AbstractMethodMessageHandler
public AbstractMethodMessageHandler()
-
-
Method Details
-
setDestinationPrefixes
When this property is configured only messages to destinations matching one of the configured prefixes are eligible for handling. When there is a match the prefix is removed and only the remaining part of the destination is used for method-mapping purposes.By default, no prefixes are configured in which case all messages are eligible for handling.
-
getDestinationPrefixes
Return the configured destination prefixes, if any. -
setCustomArgumentResolvers
public void setCustomArgumentResolvers(@Nullable List<HandlerMethodArgumentResolver> customArgumentResolvers) Sets the list of customHandlerMethodArgumentResolver
s that will be used after resolvers for supported argument type. -
getCustomArgumentResolvers
Return the configured custom argument resolvers, if any. -
setCustomReturnValueHandlers
public void setCustomReturnValueHandlers(@Nullable List<HandlerMethodReturnValueHandler> customReturnValueHandlers) Set the list of customHandlerMethodReturnValueHandler
s that will be used after return value handlers for known types. -
getCustomReturnValueHandlers
Return the configured custom return value handlers, if any. -
setArgumentResolvers
Configure the complete list of supported argument types, effectively overriding the ones configured by default. This is an advanced option; for most use cases it should be sufficient to usesetCustomArgumentResolvers(java.util.List<org.springframework.messaging.handler.invocation.HandlerMethodArgumentResolver>)
. -
getArgumentResolvers
Return the complete list of argument resolvers. -
setReturnValueHandlers
public void setReturnValueHandlers(@Nullable List<HandlerMethodReturnValueHandler> returnValueHandlers) Configure the complete list of supported return value types, effectively overriding the ones configured by default. This is an advanced option; for most use cases it should be sufficient to usesetCustomReturnValueHandlers(java.util.List<org.springframework.messaging.handler.invocation.HandlerMethodReturnValueHandler>)
. -
getReturnValueHandlers
Return the complete list of return value handlers. -
setApplicationContext
Description copied from interface:ApplicationContextAware
Set the ApplicationContext that this object runs in. Normally this call will be used to initialize the object.Invoked after population of normal bean properties but before an init callback such as
InitializingBean.afterPropertiesSet()
or a custom init-method. Invoked afterResourceLoaderAware.setResourceLoader(org.springframework.core.io.ResourceLoader)
,ApplicationEventPublisherAware.setApplicationEventPublisher(org.springframework.context.ApplicationEventPublisher)
andMessageSourceAware
, if applicable.- Specified by:
setApplicationContext
in interfaceApplicationContextAware
- Parameters:
applicationContext
- the ApplicationContext object to be used by this object- See Also:
-
getApplicationContext
-
afterPropertiesSet
public void afterPropertiesSet()Description copied from interface:InitializingBean
Invoked by the containingBeanFactory
after it has set all bean properties and satisfiedBeanFactoryAware
,ApplicationContextAware
etc.This method allows the bean instance to perform validation of its overall configuration and final initialization when all bean properties have been set.
- Specified by:
afterPropertiesSet
in interfaceInitializingBean
-
initArgumentResolvers
Return the list of argument resolvers to use. Invoked only if the resolvers have not already been set viasetArgumentResolvers(java.util.List<org.springframework.messaging.handler.invocation.HandlerMethodArgumentResolver>)
.Subclasses should also take into account custom argument types configured via
setCustomArgumentResolvers(java.util.List<org.springframework.messaging.handler.invocation.HandlerMethodArgumentResolver>)
. -
initReturnValueHandlers
Return the list of return value handlers to use. Invoked only if the return value handlers have not already been set viasetReturnValueHandlers(java.util.List<org.springframework.messaging.handler.invocation.HandlerMethodReturnValueHandler>)
.Subclasses should also take into account custom return value types configured via
setCustomReturnValueHandlers(java.util.List<org.springframework.messaging.handler.invocation.HandlerMethodReturnValueHandler>)
. -
isHandler
Whether the given bean type should be introspected for messaging handling methods. -
detectHandlerMethods
Detect if the given handler has any methods that can handle messages and if so register it with the extracted mapping information.- Parameters:
handler
- the handler to check, either an instance of a Spring bean name
-
getMappingForMethod
Provide the mapping for a handler method.- Parameters:
method
- the method to provide a mapping forhandlerType
- the handler type, possibly a subtype of the method's declaring class- Returns:
- the mapping, or
null
if the method is not mapped
-
registerHandlerMethod
Register a handler method and its unique mapping.- Parameters:
handler
- the bean name of the handler or the handler instancemethod
- the method to registermapping
- the mapping conditions associated with the handler method- Throws:
IllegalStateException
- if another method was already registered under the same mapping
-
createHandlerMethod
Create a HandlerMethod instance from an Object handler that is either a handler instance or a String-based bean name. -
getDirectLookupDestinations
Return destinations contained in the mapping that are not patterns and are therefore suitable for direct lookups. -
getReturnValueHandlerLogger
Return a logger to set onHandlerMethodReturnValueHandlerComposite
.- Since:
- 5.1
-
getHandlerMethodLogger
Return a logger to set onInvocableHandlerMethod
.- Since:
- 5.1
-
registerExceptionHandlerAdvice
protected void registerExceptionHandlerAdvice(MessagingAdviceBean bean, AbstractExceptionHandlerMethodResolver resolver) Subclasses can invoke this method to populate the MessagingAdviceBean cache (for example, to support "global"@MessageExceptionHandler
).- Since:
- 4.2
-
getHandlerMethods
Return a map with all handler methods and their mappings. -
handleMessage
Description copied from interface:MessageHandler
Handle the given message.- Specified by:
handleMessage
in interfaceMessageHandler
- Parameters:
message
- the message to be handled- Throws:
MessagingException
- if the handler failed to process the message
-
getDestination
-
getLookupDestination
Check whether the given destination (of an incoming message) matches to one of the configured destination prefixes and if so return the remaining portion of the destination after the matched prefix.If there are no matching prefixes, return
null
.If there are no destination prefixes, return the destination as is.
-
handleMessageInternal
-
getMatchingMapping
Check if a mapping matches the current message and return a possibly new mapping with conditions relevant to the current request.- Parameters:
mapping
- the mapping to get a match formessage
- the message being handled- Returns:
- the match or
null
if there is no match
-
handleNoMatch
-
getMappingComparator
Return a comparator for sorting matching mappings. The returned comparator should sort 'better' matches higher.- Parameters:
message
- the current Message- Returns:
- the comparator, never
null
-
handleMatch
protected void handleMatch(T mapping, HandlerMethod handlerMethod, String lookupDestination, Message<?> message) -
processHandlerMethodException
protected void processHandlerMethodException(HandlerMethod handlerMethod, Exception exception, Message<?> message) -
getExceptionHandlerMethod
protected @Nullable InvocableHandlerMethod getExceptionHandlerMethod(HandlerMethod handlerMethod, Exception exception) Find an@MessageExceptionHandler
method for the given exception. The default implementation searches methods in the class hierarchy of the HandlerMethod first and if not found, it continues searching for additional@MessageExceptionHandler
methods among the configured MessagingAdviceBean, if any.- Parameters:
handlerMethod
- the method where the exception was raisedexception
- the raised exception- Returns:
- a method to handle the exception, or
null
- Since:
- 4.2
-
createExceptionHandlerMethodResolverFor
protected abstract AbstractExceptionHandlerMethodResolver createExceptionHandlerMethodResolverFor(Class<?> beanType) -
toString
-