Skip to content

Commit 0111329

Browse files
committed
Consistently introspect constructor-provided JmsTemplate
See gh-32501
1 parent 8cb9018 commit 0111329

File tree

3 files changed

+20
-14
lines changed

3 files changed

+20
-14
lines changed

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

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate<Destination>
5959

6060
private @Nullable JmsOperations jmsTemplate;
6161

62-
private MessageConverter jmsMessageConverter = new MessagingMessageConverter();
62+
private MessageConverter jmsMessageConverter;
6363

6464
private boolean converterSet;
6565

@@ -71,6 +71,7 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate<Destination>
7171
* Requires {@link #setConnectionFactory} or {@link #setJmsTemplate} to be called.
7272
*/
7373
public JmsMessagingTemplate() {
74+
this.jmsMessageConverter = new MessagingMessageConverter();
7475
}
7576

7677
/**
@@ -79,23 +80,27 @@ public JmsMessagingTemplate() {
7980
* @since 4.1.2
8081
*/
8182
public JmsMessagingTemplate(ConnectionFactory connectionFactory) {
82-
this.jmsTemplate = new JmsTemplate(connectionFactory);
83+
this(new JmsTemplate(connectionFactory));
8384
}
8485

8586
/**
86-
* Create a {@code JmsMessagingTemplate} instance with the {@link JmsOperations} to use.
87-
* @since 7.0
87+
* Create a {@code JmsMessagingTemplate} instance with the {@link JmsTemplate} to use.
8888
*/
89-
public JmsMessagingTemplate(JmsOperations jmsTemplate) {
89+
public JmsMessagingTemplate(JmsTemplate jmsTemplate) {
9090
Assert.notNull(jmsTemplate, "JmsTemplate must not be null");
9191
this.jmsTemplate = jmsTemplate;
92+
this.jmsMessageConverter = new MessagingMessageConverter(jmsTemplate.getMessageConverter());
9293
}
9394

9495
/**
95-
* Create a {@code JmsMessagingTemplate} instance with the {@link JmsTemplate} to use.
96+
* Create a {@code JmsMessagingTemplate} instance with the {@link JmsOperations} to use.
97+
* @since 7.0
9698
*/
97-
public JmsMessagingTemplate(JmsTemplate jmsTemplate) {
98-
this((JmsOperations) jmsTemplate);
99+
public JmsMessagingTemplate(JmsOperations jmsTemplate) {
100+
Assert.notNull(jmsTemplate, "JmsTemplate must not be null");
101+
this.jmsTemplate = jmsTemplate;
102+
this.jmsMessageConverter = (jmsTemplate instanceof JmsTemplate template ?
103+
new MessagingMessageConverter(template.getMessageConverter()) : new MessagingMessageConverter());
99104
}
100105

101106

@@ -104,8 +109,10 @@ public JmsMessagingTemplate(JmsTemplate jmsTemplate) {
104109
* @since 4.1.2
105110
*/
106111
public void setConnectionFactory(ConnectionFactory connectionFactory) {
107-
if (this.jmsTemplate instanceof JmsAccessor template) {
112+
if (this.jmsTemplate instanceof JmsAccessor accessor) {
113+
JmsTemplate template = new JmsTemplate(accessor);
108114
template.setConnectionFactory(connectionFactory);
115+
this.jmsTemplate = template;
109116
}
110117
else {
111118
this.jmsTemplate = new JmsTemplate(connectionFactory);

spring-jms/src/test/java/org/springframework/jms/core/JmsClientTests.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import org.springframework.jms.InvalidDestinationException;
4343
import org.springframework.jms.MessageNotReadableException;
4444
import org.springframework.jms.StubTextMessage;
45+
import org.springframework.jms.support.converter.SimpleMessageConverter;
4546
import org.springframework.jms.support.destination.DestinationResolutionException;
4647
import org.springframework.messaging.Message;
4748
import org.springframework.messaging.MessagingException;
@@ -70,14 +71,15 @@ class JmsClientTests {
7071
@Captor
7172
private ArgumentCaptor<MessageCreator> messageCreator;
7273

73-
@Mock
74+
@Mock(strictness = Mock.Strictness.LENIENT)
7475
private JmsTemplate jmsTemplate;
7576

7677
private JmsClient jmsClient;
7778

7879

7980
@BeforeEach
8081
void setup() {
82+
given(this.jmsTemplate.getMessageConverter()).willReturn(new SimpleMessageConverter());
8183
this.jmsClient = JmsClient.create(this.jmsTemplate);
8284
}
8385

spring-jms/src/test/java/org/springframework/jms/core/JmsMessagingTemplateTests.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ class JmsMessagingTemplateTests {
8080

8181
@BeforeEach
8282
void setup() {
83+
given(this.jmsTemplate.getMessageConverter()).willReturn(new SimpleMessageConverter());
8384
this.messagingTemplate = new JmsMessagingTemplate(this.jmsTemplate);
8485
}
8586

@@ -93,7 +94,6 @@ void payloadConverterIsConsistentConstructor() {
9394
MessageConverter messageConverter = mock();
9495
given(this.jmsTemplate.getMessageConverter()).willReturn(messageConverter);
9596
JmsMessagingTemplate messagingTemplate = new JmsMessagingTemplate(this.jmsTemplate);
96-
messagingTemplate.afterPropertiesSet();
9797
assertPayloadConverter(messagingTemplate, messageConverter);
9898
}
9999

@@ -174,9 +174,6 @@ void sendNoDefaultSet() {
174174

175175
@Test
176176
void sendPropertyInjection() {
177-
MessageConverter messageConverter = new SimpleMessageConverter();
178-
given(this.jmsTemplate.getMessageConverter()).willReturn(messageConverter);
179-
180177
this.messagingTemplate = new JmsMessagingTemplate();
181178
this.messagingTemplate.setJmsTemplate(this.jmsTemplate);
182179
this.messagingTemplate.setDefaultDestinationName("myQueue");

0 commit comments

Comments
 (0)