2626import jakarta .jms .ConnectionFactory ;
2727import jakarta .jms .JMSException ;
2828import jakarta .jms .Message ;
29+ import jakarta .jms .QueueBrowser ;
30+ import jakarta .jms .Session ;
2931import jakarta .jms .TextMessage ;
3032import jakarta .xml .soap .MessageFactory ;
3133import jakarta .xml .soap .SOAPConstants ;
3234import jakarta .xml .soap .SOAPException ;
3335import org .apache .activemq .ActiveMQConnectionFactory ;
36+ import org .awaitility .Awaitility ;
3437import org .junit .jupiter .api .Test ;
3538
3639import org .springframework .beans .factory .annotation .Autowired ;
4043import org .springframework .jms .annotation .EnableJms ;
4144import org .springframework .jms .annotation .JmsListener ;
4245import org .springframework .jms .config .DefaultJmsListenerContainerFactory ;
46+ import org .springframework .jms .core .BrowserCallback ;
47+ import org .springframework .jms .core .JmsTemplate ;
4348import org .springframework .jms .core .MessagePostProcessor ;
4449import org .springframework .messaging .handler .annotation .SendTo ;
4550import org .springframework .messaging .support .MessageBuilder ;
@@ -60,6 +65,9 @@ class JmsMessageSenderIntegrationTests {
6065
6166 private static final MessageFactory messageFactory = createMessageFactory ();
6267
68+ @ Autowired
69+ private ConnectionFactory connectionFactory ;
70+
6371 @ Autowired
6472 private JmsMessageSender messageSender ;
6573
@@ -100,6 +108,7 @@ void testSendAndReceiveQueueBytesMessagePermanentQueue() throws Exception {
100108 assertNonEmptyByteMessage (message );
101109 return createEmptySoapMessage ();
102110 });
111+ waitForReply (responseQueueName );
103112
104113 SoapMessage response = (SoapMessage ) connection .receive (new SaajSoapMessageFactory (messageFactory ));
105114 assertThat (response ).isNotNull ();
@@ -203,6 +212,18 @@ private static MessageFactory createMessageFactory() {
203212 }
204213 }
205214
215+ private void waitForReply (String destinationName ) {
216+ JmsTemplate jmsTemplate = new JmsTemplate (this .connectionFactory );
217+ Awaitility .await ()
218+ .atMost (Duration .ofSeconds (3 ))
219+ .until (() -> jmsTemplate .browse (destinationName , new BrowserCallback <Boolean >() {
220+ @ Override
221+ public Boolean doInJms (Session session , QueueBrowser browser ) throws JMSException {
222+ return browser .getEnumeration ().hasMoreElements ();
223+ }
224+ }));
225+ }
226+
206227 static class TestJmsListener {
207228
208229 private ThrowingFunction <jakarta .jms .Message , Object > messageHandler ;
@@ -239,7 +260,7 @@ public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(Connection
239260 @ Bean
240261 JmsMessageSender messageSender (ConnectionFactory connectionFactory ) {
241262 JmsMessageSender messageSender = new JmsMessageSender (connectionFactory );
242- messageSender .setReceiveTimeout (Duration .ofSeconds (2 ).toMillis ());
263+ messageSender .setReceiveTimeout (Duration .ofSeconds (1 ).toMillis ());
243264 return messageSender ;
244265 }
245266
0 commit comments