public abstract class AbstractAdaptableMessageListener extends Object implements MessageListener, SessionAwareMessageListener<Message>
MessageListener
adapter providing the necessary
infrastructure to extract the payload of a JMS Message
.MessageListener
,
SessionAwareMessageListener
Modifier and Type | Field and Description |
---|---|
protected Log |
logger
Logger available to subclasses.
|
Constructor and Description |
---|
AbstractAdaptableMessageListener() |
Modifier and Type | Method and Description |
---|---|
protected 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 |
getDestinationResolver()
Return the DestinationResolver for this adapter.
|
protected MessageConverter |
getMessageConverter()
Return the converter that will convert incoming JMS messages to
listener method arguments, and objects returned from listener
methods back to JMS messages.
|
protected MessagingMessageConverter |
getMessagingMessageConverter()
Return the
MessagingMessageConverter for this listener,
being able to convert Message . |
protected Destination |
getResponseDestination(Message request,
Message response,
Session session)
Determine a response destination for the given message.
|
protected QosSettings |
getResponseQosSettings()
Return the
QosSettings to use when sending a response,
or null if the defaults should be used. |
protected void |
handleListenerException(Throwable ex)
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 |
onMessage(Message message)
Standard JMS
MessageListener entry point. |
abstract void |
onMessage(Message message,
Session session)
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 a
Message . |
protected Destination |
resolveDefaultResponseDestination(Session session)
Resolve the default response destination into a JMS
Destination , using this
accessor's DestinationResolver 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 the
JmsHeaderMapper 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 the
QosSettings to use when sending a response. |
protected final Log logger
public void setDefaultResponseDestination(Destination destination)
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.
public void setDefaultResponseQueueName(String destinationName)
Alternatively, specify a JMS Destination object as "defaultResponseDestination".
public void setDefaultResponseTopicName(String destinationName)
Alternatively, specify a JMS Destination object as "defaultResponseDestination".
public void setDestinationResolver(DestinationResolver destinationResolver)
The default resolver is a DynamicDestinationResolver. Specify a JndiDestinationResolver for resolving destination names as JNDI locations.
protected DestinationResolver getDestinationResolver()
public void setMessageConverter(@Nullable MessageConverter messageConverter)
The default converter is a SimpleMessageConverter
, which is able
to handle BytesMessages
,
TextMessages
and
ObjectMessages
.
@Nullable protected MessageConverter getMessageConverter()
public void setHeaderMapper(JmsHeaderMapper headerMapper)
JmsHeaderMapper
implementation to use to map the standard
JMS headers. By default, a SimpleJmsHeaderMapper
is used.SimpleJmsHeaderMapper
protected final MessagingMessageConverter getMessagingMessageConverter()
MessagingMessageConverter
for this listener,
being able to convert Message
.public void setResponseQosSettings(@Nullable QosSettings responseQosSettings)
QosSettings
to use when sending a response. Can be set to
null
to indicate that the broker's defaults should be used.responseQosSettings
- the QoS settings to use when sending a response or
null
to use the default values.@Nullable protected QosSettings getResponseQosSettings()
QosSettings
to use when sending a response,
or null
if the defaults should be used.public void onMessage(Message message)
MessageListener
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.
onMessage
in interface MessageListener
message
- the incoming JMS messagehandleListenerException(java.lang.Throwable)
,
onMessage(javax.jms.Message, javax.jms.Session)
public abstract void onMessage(Message message, @Nullable Session session) throws JMSException
SessionAwareMessageListener
Implementors are supposed to process the given Message, typically sending reply messages through the given Session.
onMessage
in interface SessionAwareMessageListener<Message>
message
- the received JMS message (never null
)session
- the underlying JMS Session (never null
)JMSException
- if thrown by JMS methodsprotected void handleListenerException(Throwable ex)
This method only applies when used as standard JMS MessageListener
.
In case of the Spring SessionAwareMessageListener
mechanism,
exceptions get handled by the caller instead.
ex
- the exception to handleonMessage(javax.jms.Message)
protected Object extractMessage(Message message)
message
- the JMS Message
MessageConversionException
- if the message could not be extractedprotected void handleResult(Object result, Message request, @Nullable Session session)
result
- the result object to handle (never null
)request
- the original request messagesession
- the JMS Session to operate on (may be null
)ReplyFailureException
- if the response message could not be sentbuildMessage(javax.jms.Session, java.lang.Object)
,
postProcessResponse(javax.jms.Message, javax.jms.Message)
,
getResponseDestination(javax.jms.Message, javax.jms.Message, javax.jms.Session, java.lang.Object)
,
sendResponse(javax.jms.Session, javax.jms.Destination, javax.jms.Message)
protected Message buildMessage(Session session, Object result) throws JMSException
session
- the JMS Session to operate onresult
- the content of the message, as returned from the listener methodMessage
(never null
)JMSException
- if thrown by JMS API methodssetMessageConverter(org.springframework.jms.support.converter.MessageConverter)
protected Object preProcessResponse(Object result)
Message
.result
- the result of the invocationresult
argument
or any other object (for instance wrapping the result).protected void postProcessResponse(Message request, Message response) throws JMSException
The default implementation sets the response's correlation id to the request message's correlation id, if any; otherwise to the request message id.
request
- the original incoming JMS messageresponse
- the outgoing JMS message about to be sentJMSException
- if thrown by JMS API methodsMessage.setJMSCorrelationID(java.lang.String)
protected Destination getResponseDestination(Message request, Message response, Session session) throws JMSException
The default implementation first checks the JMS Reply-To
Destination
of the supplied request; if that is not null
it is returned; if it is null
, then the configured
default response destination
is returned; if this too is null
, then an
InvalidDestinationException
is thrown.
request
- the original incoming JMS messageresponse
- the outgoing JMS message about to be sentsession
- the JMS Session to operate onnull
)JMSException
- if thrown by JMS API methodsInvalidDestinationException
- if no Destination
can be determinedsetDefaultResponseDestination(javax.jms.Destination)
,
Message.getJMSReplyTo()
@Nullable protected Destination resolveDefaultResponseDestination(Session session) throws JMSException
Destination
, using this
accessor's DestinationResolver
in case of a destination name.Destination
JMSException
- if resolution failedsetDefaultResponseDestination(javax.jms.Destination)
,
setDefaultResponseQueueName(java.lang.String)
,
setDefaultResponseTopicName(java.lang.String)
,
setDestinationResolver(org.springframework.jms.support.destination.DestinationResolver)
protected void sendResponse(Session session, Destination destination, Message response) throws JMSException
response
- the JMS message to senddestination
- the JMS destination to send tosession
- the JMS session to operate onJMSException
- if thrown by JMS API methodspostProcessProducer(javax.jms.MessageProducer, javax.jms.Message)
,
Session.createProducer(javax.jms.Destination)
,
MessageProducer.send(javax.jms.Message)
protected void postProcessProducer(MessageProducer producer, Message response) throws JMSException
The default implementation is empty.
producer
- the JMS message producer that will be used to send the messageresponse
- the outgoing JMS message about to be sentJMSException
- if thrown by JMS API methods