Reuse JmsTemplate's MessageConverter in JmsMessagingTemplate

This commit makes sure that any custom MessageConverter set in a
JmsTemplate used by a JmsMessagingTemplate is reused as the payload
converter of the message.

Issue: SPR-15965
This commit is contained in:
Stephane Nicoll
2017-09-18 14:27:47 +02:00
parent 7aa956a920
commit b275a06d16
3 changed files with 60 additions and 2 deletions

View File

@@ -52,6 +52,8 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate<Destination>
private MessageConverter jmsMessageConverter = new MessagingMessageConverter();
private boolean converterSet;
@Nullable
private String defaultDestinationName;
@@ -131,6 +133,7 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate<Destination>
public void setJmsMessageConverter(MessageConverter jmsMessageConverter) {
Assert.notNull(jmsMessageConverter, "MessageConverter must not be null");
this.jmsMessageConverter = jmsMessageConverter;
this.converterSet = true;
}
/**
@@ -162,6 +165,10 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate<Destination>
@Override
public void afterPropertiesSet() {
Assert.notNull(this.jmsTemplate, "Property 'connectionFactory' or 'jmsTemplate' is required");
if (!this.converterSet && this.jmsTemplate.getMessageConverter() != null) {
((MessagingMessageConverter) this.jmsMessageConverter)
.setPayloadConverter(this.jmsTemplate.getMessageConverter());
}
}
private JmsTemplate obtainJmsTemplate() {

View File

@@ -55,6 +55,15 @@ public class MessagingMessageConverter implements MessageConverter, Initializing
this(new SimpleMessageConverter(), new SimpleJmsHeaderMapper());
}
/**
* Create an instance with the specific payload converter.
* @param payloadConverter the payload converter to use
* @since 4.3.12
*/
public MessagingMessageConverter(MessageConverter payloadConverter) {
this(payloadConverter, new SimpleJmsHeaderMapper());
}
/**
* Create an instance with the specified payload converter and
* header mapper.