diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/adapter/AbstractAdaptableMessageListener.java b/spring-jms/src/main/java/org/springframework/jms/listener/adapter/AbstractAdaptableMessageListener.java index 7603770c3d..10ae1cf820 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/adapter/AbstractAdaptableMessageListener.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/adapter/AbstractAdaptableMessageListener.java @@ -16,6 +16,7 @@ package org.springframework.jms.listener.adapter; +import javax.jms.BytesMessage; import javax.jms.Destination; import javax.jms.InvalidDestinationException; import javax.jms.JMSException; @@ -204,9 +205,9 @@ public abstract class AbstractAdaptableMessageListener /** * Extract the message body from the given JMS message. * @param message the JMS {@code Message} - * @return the content of the message, to be passed into the - * listener method as argument - * @throws MessageConversionException if the message could not be unmarshaled + * @return the content of the message, to be passed into the listener method + * as an argument + * @throws MessageConversionException if the message could not be extracted */ protected Object extractMessage(Message message) { try { @@ -408,7 +409,19 @@ public abstract class AbstractAdaptableMessageListener @Override protected Object extractPayload(Message message) throws JMSException { - return extractMessage(message); + Object payload = extractMessage(message); + if (message instanceof BytesMessage) { + try { + // In case the BytesMessage is going to be received as a user argument: + // reset it, otherwise it would appear empty to such processing code... + ((BytesMessage) message).reset(); + } + catch (JMSException ex) { + // Continue since the BytesMessage typically won't be used any further. + logger.debug("Failed to reset BytesMessage after payload extraction", ex); + } + } + return payload; } @Override