Browse Source

Consistently introspect constructor-provided JmsTemplate

See gh-32501
pull/35163/head
Juergen Hoeller 6 months ago
parent
commit
0111329214
  1. 25
      spring-jms/src/main/java/org/springframework/jms/core/JmsMessagingTemplate.java
  2. 4
      spring-jms/src/test/java/org/springframework/jms/core/JmsClientTests.java
  3. 5
      spring-jms/src/test/java/org/springframework/jms/core/JmsMessagingTemplateTests.java

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

@ -59,7 +59,7 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate<Destination>
private @Nullable JmsOperations jmsTemplate; private @Nullable JmsOperations jmsTemplate;
private MessageConverter jmsMessageConverter = new MessagingMessageConverter(); private MessageConverter jmsMessageConverter;
private boolean converterSet; private boolean converterSet;
@ -71,6 +71,7 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate<Destination>
* Requires {@link #setConnectionFactory} or {@link #setJmsTemplate} to be called. * Requires {@link #setConnectionFactory} or {@link #setJmsTemplate} to be called.
*/ */
public JmsMessagingTemplate() { public JmsMessagingTemplate() {
this.jmsMessageConverter = new MessagingMessageConverter();
} }
/** /**
@ -79,23 +80,27 @@ public class JmsMessagingTemplate extends AbstractMessagingTemplate<Destination>
* @since 4.1.2 * @since 4.1.2
*/ */
public JmsMessagingTemplate(ConnectionFactory connectionFactory) { public JmsMessagingTemplate(ConnectionFactory connectionFactory) {
this.jmsTemplate = new JmsTemplate(connectionFactory); this(new JmsTemplate(connectionFactory));
} }
/** /**
* Create a {@code JmsMessagingTemplate} instance with the {@link JmsOperations} to use. * Create a {@code JmsMessagingTemplate} instance with the {@link JmsTemplate} to use.
* @since 7.0
*/ */
public JmsMessagingTemplate(JmsOperations jmsTemplate) { public JmsMessagingTemplate(JmsTemplate jmsTemplate) {
Assert.notNull(jmsTemplate, "JmsTemplate must not be null"); Assert.notNull(jmsTemplate, "JmsTemplate must not be null");
this.jmsTemplate = jmsTemplate; 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) { public JmsMessagingTemplate(JmsOperations jmsTemplate) {
this((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<Destination>
* @since 4.1.2 * @since 4.1.2
*/ */
public void setConnectionFactory(ConnectionFactory connectionFactory) { 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); template.setConnectionFactory(connectionFactory);
this.jmsTemplate = template;
} }
else { else {
this.jmsTemplate = new JmsTemplate(connectionFactory); this.jmsTemplate = new JmsTemplate(connectionFactory);

4
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.InvalidDestinationException;
import org.springframework.jms.MessageNotReadableException; import org.springframework.jms.MessageNotReadableException;
import org.springframework.jms.StubTextMessage; import org.springframework.jms.StubTextMessage;
import org.springframework.jms.support.converter.SimpleMessageConverter;
import org.springframework.jms.support.destination.DestinationResolutionException; import org.springframework.jms.support.destination.DestinationResolutionException;
import org.springframework.messaging.Message; import org.springframework.messaging.Message;
import org.springframework.messaging.MessagingException; import org.springframework.messaging.MessagingException;
@ -70,7 +71,7 @@ class JmsClientTests {
@Captor @Captor
private ArgumentCaptor<MessageCreator> messageCreator; private ArgumentCaptor<MessageCreator> messageCreator;
@Mock @Mock(strictness = Mock.Strictness.LENIENT)
private JmsTemplate jmsTemplate; private JmsTemplate jmsTemplate;
private JmsClient jmsClient; private JmsClient jmsClient;
@ -78,6 +79,7 @@ class JmsClientTests {
@BeforeEach @BeforeEach
void setup() { void setup() {
given(this.jmsTemplate.getMessageConverter()).willReturn(new SimpleMessageConverter());
this.jmsClient = JmsClient.create(this.jmsTemplate); this.jmsClient = JmsClient.create(this.jmsTemplate);
} }

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

@ -80,6 +80,7 @@ class JmsMessagingTemplateTests {
@BeforeEach @BeforeEach
void setup() { void setup() {
given(this.jmsTemplate.getMessageConverter()).willReturn(new SimpleMessageConverter());
this.messagingTemplate = new JmsMessagingTemplate(this.jmsTemplate); this.messagingTemplate = new JmsMessagingTemplate(this.jmsTemplate);
} }
@ -93,7 +94,6 @@ class JmsMessagingTemplateTests {
MessageConverter messageConverter = mock(); MessageConverter messageConverter = mock();
given(this.jmsTemplate.getMessageConverter()).willReturn(messageConverter); given(this.jmsTemplate.getMessageConverter()).willReturn(messageConverter);
JmsMessagingTemplate messagingTemplate = new JmsMessagingTemplate(this.jmsTemplate); JmsMessagingTemplate messagingTemplate = new JmsMessagingTemplate(this.jmsTemplate);
messagingTemplate.afterPropertiesSet();
assertPayloadConverter(messagingTemplate, messageConverter); assertPayloadConverter(messagingTemplate, messageConverter);
} }
@ -174,9 +174,6 @@ class JmsMessagingTemplateTests {
@Test @Test
void sendPropertyInjection() { void sendPropertyInjection() {
MessageConverter messageConverter = new SimpleMessageConverter();
given(this.jmsTemplate.getMessageConverter()).willReturn(messageConverter);
this.messagingTemplate = new JmsMessagingTemplate(); this.messagingTemplate = new JmsMessagingTemplate();
this.messagingTemplate.setJmsTemplate(this.jmsTemplate); this.messagingTemplate.setJmsTemplate(this.jmsTemplate);
this.messagingTemplate.setDefaultDestinationName("myQueue"); this.messagingTemplate.setDefaultDestinationName("myQueue");

Loading…
Cancel
Save