diff --git a/spring-jms/src/main/java/org/springframework/jms/core/JmsMessagingTemplate.java b/spring-jms/src/main/java/org/springframework/jms/core/JmsMessagingTemplate.java index f644f7aba0d..84fe8129a7b 100644 --- a/spring-jms/src/main/java/org/springframework/jms/core/JmsMessagingTemplate.java +++ b/spring-jms/src/main/java/org/springframework/jms/core/JmsMessagingTemplate.java @@ -59,7 +59,7 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate private @Nullable JmsOperations jmsTemplate; - private MessageConverter jmsMessageConverter = new MessagingMessageConverter(); + private MessageConverter jmsMessageConverter; private boolean converterSet; @@ -71,6 +71,7 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate * Requires {@link #setConnectionFactory} or {@link #setJmsTemplate} to be called. */ public JmsMessagingTemplate() { + this.jmsMessageConverter = new MessagingMessageConverter(); } /** @@ -79,23 +80,27 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate * @since 4.1.2 */ public JmsMessagingTemplate(ConnectionFactory connectionFactory) { - this.jmsTemplate = new JmsTemplate(connectionFactory); + this(new JmsTemplate(connectionFactory)); } /** - * Create a {@code JmsMessagingTemplate} instance with the {@link JmsOperations} to use. - * @since 7.0 + * Create a {@code JmsMessagingTemplate} instance with the {@link JmsTemplate} to use. */ - public JmsMessagingTemplate(JmsOperations jmsTemplate) { + public JmsMessagingTemplate(JmsTemplate jmsTemplate) { Assert.notNull(jmsTemplate, "JmsTemplate must not be null"); this.jmsTemplate = jmsTemplate; + this.jmsMessageConverter = new MessagingMessageConverter(jmsTemplate.getMessageConverter()); } /** - * Create a {@code JmsMessagingTemplate} instance with the {@link JmsTemplate} to use. + * Create a {@code JmsMessagingTemplate} instance with the {@link JmsOperations} to use. + * @since 7.0 */ - public JmsMessagingTemplate(JmsTemplate jmsTemplate) { - this((JmsOperations) jmsTemplate); + public JmsMessagingTemplate(JmsOperations jmsTemplate) { + Assert.notNull(jmsTemplate, "JmsTemplate must not be null"); + this.jmsTemplate = jmsTemplate; + this.jmsMessageConverter = (jmsTemplate instanceof JmsTemplate template ? + new MessagingMessageConverter(template.getMessageConverter()) : new MessagingMessageConverter()); } @@ -104,8 +109,10 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate * @since 4.1.2 */ public void setConnectionFactory(ConnectionFactory connectionFactory) { - if (this.jmsTemplate instanceof JmsAccessor template) { + if (this.jmsTemplate instanceof JmsAccessor accessor) { + JmsTemplate template = new JmsTemplate(accessor); template.setConnectionFactory(connectionFactory); + this.jmsTemplate = template; } else { this.jmsTemplate = new JmsTemplate(connectionFactory); diff --git a/spring-jms/src/test/java/org/springframework/jms/core/JmsClientTests.java b/spring-jms/src/test/java/org/springframework/jms/core/JmsClientTests.java index 687b9ba1a96..a7731d2798a 100644 --- a/spring-jms/src/test/java/org/springframework/jms/core/JmsClientTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/core/JmsClientTests.java @@ -42,6 +42,7 @@ import org.mockito.stubbing.Answer; import org.springframework.jms.InvalidDestinationException; import org.springframework.jms.MessageNotReadableException; import org.springframework.jms.StubTextMessage; +import org.springframework.jms.support.converter.SimpleMessageConverter; import org.springframework.jms.support.destination.DestinationResolutionException; import org.springframework.messaging.Message; import org.springframework.messaging.MessagingException; @@ -70,7 +71,7 @@ class JmsClientTests { @Captor private ArgumentCaptor messageCreator; - @Mock + @Mock(strictness = Mock.Strictness.LENIENT) private JmsTemplate jmsTemplate; private JmsClient jmsClient; @@ -78,6 +79,7 @@ class JmsClientTests { @BeforeEach void setup() { + given(this.jmsTemplate.getMessageConverter()).willReturn(new SimpleMessageConverter()); this.jmsClient = JmsClient.create(this.jmsTemplate); } diff --git a/spring-jms/src/test/java/org/springframework/jms/core/JmsMessagingTemplateTests.java b/spring-jms/src/test/java/org/springframework/jms/core/JmsMessagingTemplateTests.java index 3a650eda9a8..653843918da 100644 --- a/spring-jms/src/test/java/org/springframework/jms/core/JmsMessagingTemplateTests.java +++ b/spring-jms/src/test/java/org/springframework/jms/core/JmsMessagingTemplateTests.java @@ -80,6 +80,7 @@ class JmsMessagingTemplateTests { @BeforeEach void setup() { + given(this.jmsTemplate.getMessageConverter()).willReturn(new SimpleMessageConverter()); this.messagingTemplate = new JmsMessagingTemplate(this.jmsTemplate); } @@ -93,7 +94,6 @@ class JmsMessagingTemplateTests { MessageConverter messageConverter = mock(); given(this.jmsTemplate.getMessageConverter()).willReturn(messageConverter); JmsMessagingTemplate messagingTemplate = new JmsMessagingTemplate(this.jmsTemplate); - messagingTemplate.afterPropertiesSet(); assertPayloadConverter(messagingTemplate, messageConverter); } @@ -174,9 +174,6 @@ class JmsMessagingTemplateTests { @Test void sendPropertyInjection() { - MessageConverter messageConverter = new SimpleMessageConverter(); - given(this.jmsTemplate.getMessageConverter()).willReturn(messageConverter); - this.messagingTemplate = new JmsMessagingTemplate(); this.messagingTemplate.setJmsTemplate(this.jmsTemplate); this.messagingTemplate.setDefaultDestinationName("myQueue");