Class AbstractAdaptableMessageListener
- All Implemented Interfaces:
MessageListener
,SessionAwareMessageListener<Message>
- Direct Known Subclasses:
MessageListenerAdapter
,MessagingMessageListenerAdapter
MessageListener
adapter providing the necessary
infrastructure to extract the payload of a JMS Message
.- Since:
- 4.1
- Author:
- Juergen Hoeller, Stephane Nicoll
- See Also:
-
Field Summary
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected Message
buildMessage
(Session session, Object result) Build a JMS message to be sent as response based on the given result object.protected Object
extractMessage
(Message message) Extract the message body from the given JMS message.protected DestinationResolver
Return the DestinationResolver for this adapter.protected MessageConverter
Return the converter that will convert incoming JMS messages to listener method arguments, and objects returned from listener methods back to JMS messages.protected final MessagingMessageConverter
Return theMessagingMessageConverter
for this listener, being able to convertMessage
.protected Destination
getResponseDestination
(Message request, Message response, Session session) Determine a response destination for the given message.protected QosSettings
Return theQosSettings
to use when sending a response, ornull
if the defaults should be used.protected void
Handle the given exception that arose during listener execution.protected void
handleResult
(Object result, Message request, Session session) Handle the given result object returned from the listener method, sending a response message back.void
Standard JMSMessageListener
entry point.abstract void
Callback for processing a received JMS message.protected void
postProcessProducer
(MessageProducer producer, Message response) Post-process the given message producer before using it to send the response.protected void
postProcessResponse
(Message request, Message response) Post-process the given response message before it will be sent.protected Object
preProcessResponse
(Object result) Pre-process the given result before it is converted to aMessage
.protected Destination
resolveDefaultResponseDestination
(Session session) Resolve the default response destination into a JMSDestination
, using this accessor'sDestinationResolver
in case of a destination name.protected void
sendResponse
(Session session, Destination destination, Message response) Send the given response message to the given destination.void
setDefaultResponseDestination
(Destination destination) Set the default destination to send response messages to.void
setDefaultResponseQueueName
(String destinationName) Set the name of the default response queue to send response messages to.void
setDefaultResponseTopicName
(String destinationName) Set the name of the default response topic to send response messages to.void
setDestinationResolver
(DestinationResolver destinationResolver) Set the DestinationResolver that should be used to resolve response destination names for this adapter.void
setHeaderMapper
(JmsHeaderMapper headerMapper) Set theJmsHeaderMapper
implementation to use to map the standard JMS headers.void
setMessageConverter
(MessageConverter messageConverter) Set the converter that will convert incoming JMS messages to listener method arguments, and objects returned from listener methods back to JMS messages.void
setResponseQosSettings
(QosSettings responseQosSettings) Set theQosSettings
to use when sending a response.
-
Field Details
-
logger
Logger available to subclasses.
-
-
Constructor Details
-
AbstractAdaptableMessageListener
public AbstractAdaptableMessageListener()
-
-
Method Details
-
setDefaultResponseDestination
Set the default destination to send response messages to. This will be applied in case of a request message that does not carry a "JMSReplyTo" field.Response destinations are only relevant for listener methods that return result objects, which will be wrapped in a response message and sent to a response destination.
Alternatively, specify a "defaultResponseQueueName" or "defaultResponseTopicName", to be dynamically resolved via the DestinationResolver.
- See Also:
-
setDefaultResponseQueueName(String)
setDefaultResponseTopicName(String)
getResponseDestination(jakarta.jms.Message, jakarta.jms.Message, jakarta.jms.Session, java.lang.Object)
-
setDefaultResponseQueueName
Set the name of the default response queue to send response messages to. This will be applied in case of a request message that does not carry a "JMSReplyTo" field.Alternatively, specify a JMS Destination object as "defaultResponseDestination".
-
setDefaultResponseTopicName
Set the name of the default response topic to send response messages to. This will be applied in case of a request message that does not carry a "JMSReplyTo" field.Alternatively, specify a JMS Destination object as "defaultResponseDestination".
-
setDestinationResolver
Set the DestinationResolver that should be used to resolve response destination names for this adapter.The default resolver is a DynamicDestinationResolver. Specify a JndiDestinationResolver for resolving destination names as JNDI locations.
-
getDestinationResolver
Return the DestinationResolver for this adapter. -
setMessageConverter
Set the converter that will convert incoming JMS messages to listener method arguments, and objects returned from listener methods back to JMS messages.The default converter is a
SimpleMessageConverter
, which is able to handleBytesMessages
,TextMessages
andObjectMessages
. -
getMessageConverter
Return the converter that will convert incoming JMS messages to listener method arguments, and objects returned from listener methods back to JMS messages. -
setHeaderMapper
Set theJmsHeaderMapper
implementation to use to map the standard JMS headers. By default, aSimpleJmsHeaderMapper
is used.- See Also:
-
getMessagingMessageConverter
Return theMessagingMessageConverter
for this listener, being able to convertMessage
. -
setResponseQosSettings
Set theQosSettings
to use when sending a response. Can be set tonull
to indicate that the broker's defaults should be used.- Parameters:
responseQosSettings
- the QoS settings to use when sending a response ornull
to use the default values.- Since:
- 5.0
-
getResponseQosSettings
Return theQosSettings
to use when sending a response, ornull
if the defaults should be used.- Since:
- 5.0
-
onMessage
Standard JMSMessageListener
entry point.Delegates the message to the target listener method, with appropriate conversion of the message argument. In case of an exception, the
handleListenerException(Throwable)
method will be invoked.Note: Does not support sending response messages based on result objects returned from listener methods. Use the
SessionAwareMessageListener
entry point (typically through a Spring message listener container) for handling result objects as well.- Specified by:
onMessage
in interfaceMessageListener
- Parameters:
message
- the incoming JMS message- See Also:
-
onMessage
Description copied from interface:SessionAwareMessageListener
Callback for processing a received JMS message.Implementors are supposed to process the given Message, typically sending reply messages through the given Session.
- Specified by:
onMessage
in interfaceSessionAwareMessageListener<Message>
- Parameters:
message
- the received JMS message (nevernull
)session
- the underlying JMS Session (nevernull
)- Throws:
JMSException
- if thrown by JMS methods
-
handleListenerException
Handle the given exception that arose during listener execution. The default implementation logs the exception at error level.This method only applies when used as standard JMS
MessageListener
. In case of the SpringSessionAwareMessageListener
mechanism, exceptions get handled by the caller instead.- Parameters:
ex
- the exception to handle- See Also:
-
extractMessage
Extract the message body from the given JMS message.- Parameters:
message
- the JMSMessage
- Returns:
- the content of the message, to be passed into the listener method as an argument
- Throws:
MessageConversionException
- if the message could not be extracted
-
handleResult
Handle the given result object returned from the listener method, sending a response message back.- Parameters:
result
- the result object to handle (nevernull
)request
- the original request messagesession
- the JMS Session to operate on (may benull
)- Throws:
ReplyFailureException
- if the response message could not be sent- See Also:
-
buildMessage(jakarta.jms.Session, java.lang.Object)
postProcessResponse(jakarta.jms.Message, jakarta.jms.Message)
getResponseDestination(jakarta.jms.Message, jakarta.jms.Message, jakarta.jms.Session, java.lang.Object)
sendResponse(jakarta.jms.Session, jakarta.jms.Destination, jakarta.jms.Message)
-
buildMessage
Build a JMS message to be sent as response based on the given result object.- Parameters:
session
- the JMS Session to operate onresult
- the content of the message, as returned from the listener method- Returns:
- the JMS
Message
(nevernull
) - Throws:
JMSException
- if thrown by JMS API methods- See Also:
-
preProcessResponse
Pre-process the given result before it is converted to aMessage
.- Parameters:
result
- the result of the invocation- Returns:
- the payload response to handle, either the
result
argument or any other object (for instance wrapping the result). - Since:
- 4.3
-
postProcessResponse
Post-process the given response message before it will be sent.The default implementation sets the response's correlation id to the request message's correlation id, if any; otherwise to the request message id.
- Parameters:
request
- the original incoming JMS messageresponse
- the outgoing JMS message about to be sent- Throws:
JMSException
- if thrown by JMS API methods- See Also:
-
getResponseDestination
protected Destination getResponseDestination(Message request, Message response, Session session) throws JMSException Determine a response destination for the given message.The default implementation first checks the JMS Reply-To
Destination
of the supplied request; if that is notnull
it is returned; if it isnull
, then the configureddefault response destination
is returned; if this too isnull
, then anInvalidDestinationException
is thrown.- Parameters:
request
- the original incoming JMS messageresponse
- the outgoing JMS message about to be sentsession
- the JMS Session to operate on- Returns:
- the response destination (never
null
) - Throws:
JMSException
- if thrown by JMS API methodsInvalidDestinationException
- if noDestination
can be determined- See Also:
-
resolveDefaultResponseDestination
@Nullable protected Destination resolveDefaultResponseDestination(Session session) throws JMSException Resolve the default response destination into a JMSDestination
, using this accessor'sDestinationResolver
in case of a destination name.- Returns:
- the located
Destination
- Throws:
JMSException
- if resolution failed- See Also:
-
sendResponse
protected void sendResponse(Session session, Destination destination, Message response) throws JMSException Send the given response message to the given destination.- Parameters:
response
- the JMS message to senddestination
- the JMS destination to send tosession
- the JMS session to operate on- Throws:
JMSException
- if thrown by JMS API methods- See Also:
-
postProcessProducer
Post-process the given message producer before using it to send the response.The default implementation is empty.
- Parameters:
producer
- the JMS message producer that will be used to send the messageresponse
- the outgoing JMS message about to be sent- Throws:
JMSException
- if thrown by JMS API methods
-