Skip to content

Commit 35af7ff

Browse files
snicolljhoeller
authored andcommitted
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 (cherry picked from commit b275a06)
1 parent 5e904dd commit 35af7ff

File tree

4 files changed

+231
-178
lines changed

4 files changed

+231
-178
lines changed

spring-jms/src/main/java/org/springframework/jms/core/JmsMessagingTemplate.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate<Destination>
5050

5151
private MessageConverter jmsMessageConverter = new MessagingMessageConverter();
5252

53+
private boolean converterSet;
54+
5355
private String defaultDestinationName;
5456

5557

@@ -126,6 +128,7 @@ public JmsTemplate getJmsTemplate() {
126128
public void setJmsMessageConverter(MessageConverter jmsMessageConverter) {
127129
Assert.notNull(jmsMessageConverter, "MessageConverter must not be null");
128130
this.jmsMessageConverter = jmsMessageConverter;
131+
this.converterSet = true;
129132
}
130133

131134
/**
@@ -155,7 +158,11 @@ public String getDefaultDestinationName() {
155158

156159
@Override
157160
public void afterPropertiesSet() {
158-
Assert.notNull(getJmsTemplate(), "Property 'connectionFactory' or 'jmsTemplate' is required");
161+
Assert.notNull(this.jmsTemplate, "Property 'connectionFactory' or 'jmsTemplate' is required");
162+
if (!this.converterSet && this.jmsTemplate.getMessageConverter() != null) {
163+
((MessagingMessageConverter) this.jmsMessageConverter)
164+
.setPayloadConverter(this.jmsTemplate.getMessageConverter());
165+
}
159166
}
160167

161168

spring-jms/src/main/java/org/springframework/jms/support/converter/MessagingMessageConverter.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,15 @@ public MessagingMessageConverter() {
5454
this(new SimpleMessageConverter(), new SimpleJmsHeaderMapper());
5555
}
5656

57+
/**
58+
* Create an instance with the specific payload converter.
59+
* @param payloadConverter the payload converter to use
60+
* @since 4.3.12
61+
*/
62+
public MessagingMessageConverter(MessageConverter payloadConverter) {
63+
this(payloadConverter, new SimpleJmsHeaderMapper());
64+
}
65+
5766
/**
5867
* Create an instance with the specified payload converter and
5968
* header mapper.

0 commit comments

Comments
 (0)