2626import jakarta .jms .ConnectionFactory ;
2727import jakarta .jms .JMSException ;
2828import jakarta .jms .Message ;
29- import jakarta .jms .QueueBrowser ;
30- import jakarta .jms .Session ;
3129import jakarta .jms .TextMessage ;
3230import jakarta .xml .soap .MessageFactory ;
3331import jakarta .xml .soap .SOAPConstants ;
3432import jakarta .xml .soap .SOAPException ;
3533import org .apache .activemq .ActiveMQConnectionFactory ;
36- import org .awaitility .Awaitility ;
3734import org .jspecify .annotations .Nullable ;
38- import org .junit .jupiter .api .Disabled ;
3935import org .junit .jupiter .api .Test ;
4036
4137import org .springframework .beans .factory .annotation .Autowired ;
4541import org .springframework .jms .annotation .EnableJms ;
4642import org .springframework .jms .annotation .JmsListener ;
4743import org .springframework .jms .config .DefaultJmsListenerContainerFactory ;
48- import org .springframework .jms .core .BrowserCallback ;
49- import org .springframework .jms .core .JmsTemplate ;
5044import org .springframework .jms .core .MessagePostProcessor ;
5145import org .springframework .messaging .handler .annotation .SendTo ;
5246import org .springframework .messaging .support .MessageBuilder ;
@@ -82,13 +76,12 @@ void testSendAndReceiveQueueBytesMessageTemporaryQueue() throws Exception {
8276 try (WebServiceConnection connection = this .messageSender .createConnection (uri )) {
8377 SoapMessage soapRequest = new SaajSoapMessage (messageFactory .createMessage ());
8478 soapRequest .setSoapAction (SOAP_ACTION );
85- connection .send (soapRequest );
86-
8779 this .testJmsListener .handleMessage ((message ) -> {
8880 assertNonEmptyByteMessage (message );
8981 return createEmptySoapMessage ();
9082 });
9183
84+ connection .send (soapRequest );
9285 SoapMessage response = (SoapMessage ) connection .receive (new SaajSoapMessageFactory (messageFactory ));
9386 assertThat (response ).isNotNull ();
9487 assertThat (response .getSoapAction ()).isEqualTo (SOAP_ACTION );
@@ -97,22 +90,19 @@ void testSendAndReceiveQueueBytesMessageTemporaryQueue() throws Exception {
9790 }
9891
9992 @ Test
100- @ Disabled ("flaky" )
10193 void testSendAndReceiveQueueBytesMessagePermanentQueue () throws Exception {
10294 String responseQueueName = "SenderResponseQueue" ;
10395 URI uri = new URI ("jms:SenderRequestQueue?replyToName=" + responseQueueName + "&deliveryMode=NON_PERSISTENT" );
10496
10597 try (WebServiceConnection connection = this .messageSender .createConnection (uri )) {
10698 SoapMessage soapRequest = new SaajSoapMessage (messageFactory .createMessage ());
10799 soapRequest .setSoapAction (SOAP_ACTION );
108- connection .send (soapRequest );
109-
110100 this .testJmsListener .handleMessage ((message ) -> {
111101 assertNonEmptyByteMessage (message );
112102 return createEmptySoapMessage ();
113103 });
114- waitForReply (responseQueueName );
115104
105+ connection .send (soapRequest );
116106 SoapMessage response = (SoapMessage ) connection .receive (new SaajSoapMessageFactory (messageFactory ));
117107 assertThat (response ).isNotNull ();
118108 assertThat (response .getSoapAction ()).isEqualTo (SOAP_ACTION );
@@ -126,13 +116,12 @@ void testSendAndReceiveQueueTextMessage() throws Exception {
126116 try (WebServiceConnection connection = this .messageSender .createConnection (uri )) {
127117 SoapMessage soapRequest = new SaajSoapMessage (messageFactory .createMessage ());
128118 soapRequest .setSoapAction (SOAP_ACTION );
129- connection .send (soapRequest );
130-
131119 this .testJmsListener .handleMessage ((message ) -> {
132120 assertNonEmptyTextMessage (message );
133121 return createEmptySoapMessage ();
134122 });
135123
124+ connection .send (soapRequest );
136125 SoapMessage response = (SoapMessage ) connection .receive (new SaajSoapMessageFactory (messageFactory ));
137126 assertThat (response ).isNotNull ();
138127 assertThat (response .getSoapAction ()).isEqualTo (SOAP_ACTION );
@@ -142,17 +131,18 @@ void testSendAndReceiveQueueTextMessage() throws Exception {
142131
143132 @ Test
144133 void testSendNoResponse () throws Exception {
134+ JmsMessageSender customSender = new JmsMessageSender (this .connectionFactory );
135+ customSender .setReceiveTimeout (Duration .ofSeconds (1 ).toMillis ());
145136 URI uri = new URI ("jms:SenderRequestQueue?deliveryMode=NON_PERSISTENT" );
146- try (WebServiceConnection connection = this . messageSender .createConnection (uri )) {
137+ try (WebServiceConnection connection = customSender .createConnection (uri )) {
147138 SoapMessage soapRequest = new SaajSoapMessage (messageFactory .createMessage ());
148139 soapRequest .setSoapAction (SOAP_ACTION );
149- connection .send (soapRequest );
150-
151140 this .testJmsListener .handleMessage ((message ) -> {
152141 assertNonEmptyByteMessage (message );
153142 return null ;
154143 });
155144
145+ connection .send (soapRequest );
156146 SoapMessage response = (SoapMessage ) connection .receive (new SaajSoapMessageFactory (messageFactory ));
157147 assertThat (response ).isNull ();
158148 }
@@ -168,13 +158,12 @@ void testPostProcessor() throws Exception {
168158 try (JmsSenderConnection connection = (JmsSenderConnection ) this .messageSender .createConnection (uri )) {
169159 connection .setPostProcessor (processor );
170160 SoapMessage soapRequest = new SaajSoapMessage (messageFactory .createMessage ());
171- connection .send (soapRequest );
172-
173161 this .testJmsListener .handleMessage ((message ) -> {
174162 assertNonEmptyByteMessage (message );
175163 assertThat (message .getBooleanProperty ("processed" )).isTrue ();
176164 return null ;
177165 });
166+ connection .send (soapRequest );
178167 }
179168 }
180169
@@ -215,18 +204,6 @@ private static MessageFactory createMessageFactory() {
215204 }
216205 }
217206
218- private void waitForReply (String destinationName ) {
219- JmsTemplate jmsTemplate = new JmsTemplate (this .connectionFactory );
220- Awaitility .await ()
221- .atMost (Duration .ofSeconds (10 ))
222- .until (() -> jmsTemplate .browse (destinationName , new BrowserCallback <Boolean >() {
223- @ Override
224- public Boolean doInJms (Session session , QueueBrowser browser ) throws JMSException {
225- return browser .getEnumeration ().hasMoreElements ();
226- }
227- }));
228- }
229-
230207 static class TestJmsListener {
231208
232209 private ThrowingFunction <jakarta .jms .Message , @ Nullable Object > messageHandler ;
@@ -263,7 +240,7 @@ public DefaultJmsListenerContainerFactory jmsListenerContainerFactory(Connection
263240 @ Bean
264241 JmsMessageSender messageSender (ConnectionFactory connectionFactory ) {
265242 JmsMessageSender messageSender = new JmsMessageSender (connectionFactory );
266- messageSender .setReceiveTimeout (Duration .ofSeconds (1 ).toMillis ());
243+ messageSender .setReceiveTimeout (Duration .ofSeconds (5 ).toMillis ());
267244 return messageSender ;
268245 }
269246
0 commit comments