This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch fix/ibmmq-10-upgrade-with-lang-fix
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 6b3d1d8aa936270f46cdae18973f23a574329dff
Author: Guillaume Nodet <[email protected]>
AuthorDate: Thu Jul 30 15:31:43 2026 +0200

    chore: add diagnostic error handler to IBM MQ reply-to test
    
    Capture the actual exception thrown during reply sending that is
    normally swallowed by Spring DMLC's error handler. This will reveal
    why JmsReplyToIbmMQTest.testCustomJMSReplyToInOut fails with MQ 10.0.
    
    Co-Authored-By: Claude Opus 4.6 <[email protected]>
---
 .../component/jms/issues/JmsReplyToIbmMQTest.java  | 38 ++++++++++++++++++++--
 1 file changed, 36 insertions(+), 2 deletions(-)

diff --git 
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsReplyToIbmMQTest.java
 
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsReplyToIbmMQTest.java
index e8f246898327..9f68d129d142 100644
--- 
a/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsReplyToIbmMQTest.java
+++ 
b/components/camel-jms/src/test/java/org/apache/camel/component/jms/issues/JmsReplyToIbmMQTest.java
@@ -16,10 +16,15 @@
  */
 package org.apache.camel.component.jms.issues;
 
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
+
 import jakarta.jms.ConnectionFactory;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.jms.JmsComponent;
 import org.apache.camel.component.jms.JmsTestHelper;
 import org.apache.camel.test.infra.ibmmq.common.ConnectionFactoryHelper;
 import org.apache.camel.test.infra.ibmmq.services.IbmMQService;
@@ -28,24 +33,45 @@ import org.apache.camel.test.junit6.CamelTestSupport;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.condition.DisabledOnOs;
 import org.junit.jupiter.api.extension.RegisterExtension;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import static 
org.apache.camel.component.jms.JmsComponent.jmsComponentAutoAcknowledge;
 import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.fail;
 
 @DisabledOnOs(architectures = { "aarch64", "aarch_64" }, disabledReason = "IBM 
MQ has no Linux ARM64 native image")
 public class JmsReplyToIbmMQTest extends CamelTestSupport {
 
+    private static final Logger LOG = 
LoggerFactory.getLogger(JmsReplyToIbmMQTest.class);
+
     @RegisterExtension
     public static IbmMQService service = IbmMQServiceFactory.createService();
 
+    // Captures any error thrown during reply sending (normally swallowed by 
Spring DMLC)
+    private final AtomicReference<Throwable> listenerError = new 
AtomicReference<>();
+    private final CountDownLatch errorLatch = new CountDownLatch(1);
+
     @Test
-    public void testCustomJMSReplyToInOut() {
+    public void testCustomJMSReplyToInOut() throws Exception {
         JmsTestHelper.waitForJmsConsumerRoutes(context, "request");
 
         template.sendBody("jms:queue:DEV.QUEUE.1", "What is your name?");
 
         String reply
                 = consumer.receiveBody("jms:queue:DEV.QUEUE.2", 20000, 
String.class);
+
+        if (reply == null) {
+            // Check if the listener error handler captured an exception
+            if (errorLatch.await(2, TimeUnit.SECONDS)) {
+                Throwable error = listenerError.get();
+                LOG.error("Reply was null — listener error handler captured 
exception", error);
+                fail("Reply was null. Listener error: " + error, error);
+            } else {
+                fail("Reply was null and no listener error was captured within 
timeout");
+            }
+        }
+
         assertEquals("My name is Camel", reply);
     }
 
@@ -68,7 +94,15 @@ public class JmsReplyToIbmMQTest extends CamelTestSupport {
         ConnectionFactory connectionFactory
                 = ConnectionFactoryHelper.createConnectionFactory(
                         service.queueManager(), service.channel(), 
service.listenerPort());
-        camelContext.addComponent("jms", 
jmsComponentAutoAcknowledge(connectionFactory));
+        JmsComponent jms = jmsComponentAutoAcknowledge(connectionFactory);
+        // Install a custom error handler to capture the actual exception
+        // instead of Spring DMLC silently logging it
+        jms.getConfiguration().setErrorHandler(t -> {
+            LOG.error("MSQ MQ JMS error handler caught exception during 
message processing", t);
+            listenerError.set(t);
+            errorLatch.countDown();
+        });
+        camelContext.addComponent("jms", jms);
         return camelContext;
     }
 }

Reply via email to