jms browser implemented

This commit is contained in:
Radek Davidek 2026-03-17 18:59:45 +01:00
parent e7d9acf13b
commit 26b6354875
2 changed files with 55 additions and 38 deletions

View File

@ -1,5 +1,28 @@
package cz.moneta.test.harness.connectors.messaging;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
import javax.jms.BytesMessage;
import javax.jms.JMSConsumer;
import javax.jms.JMSContext;
import javax.jms.JMSException;
import javax.jms.JMSRuntimeException;
import javax.jms.Message;
import javax.jms.TextMessage;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import com.ibm.mq.jms.MQConnectionFactory;
import com.ibm.msg.client.wmq.WMQConstants;
import cz.moneta.test.harness.connectors.Connector;
import cz.moneta.test.harness.messaging.MessageContentType;
import cz.moneta.test.harness.messaging.MqMessageFormat;
@ -9,22 +32,6 @@ import cz.moneta.test.harness.messaging.exception.MessagingDestinationException;
import cz.moneta.test.harness.messaging.exception.MessagingTimeoutException;
import cz.moneta.test.harness.support.messaging.ImqRequest;
import com.ibm.mq.jms.MQConnectionFactory;
import com.ibm.msg.client.wmq.WMQConstants;
import org.apache.commons.lang3.StringUtils;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import javax.jms.*;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;
/**
* IBM MQ connector using JMS client with Jakarta JMS API. Supports
* multi-instance Queue Manager, SSL/TLS, and multiple message formats.
@ -277,36 +284,27 @@ public class IbmMqConnector implements Connector {
public List<ReceivedMessage> browse(String queueName, String messageSelector, MqMessageFormat format,
int maxMessages) {
List<ReceivedMessage> messages = new ArrayList<>();
javax.jms.Queue queue = getQueue(queueName);
MessageConsumer consumer = (MessageConsumer) (messageSelector == null || messageSelector.isBlank()
? jmsContext.createConsumer(queue)
: jmsContext.createConsumer(queue, messageSelector));
int count = 0;
try {
while (count < maxMessages) {
Message message = consumer.receiveNoWait();
try (javax.jms.QueueBrowser browser = (messageSelector == null || messageSelector.isBlank())
? jmsContext.createBrowser(queue)
: jmsContext.createBrowser(queue, messageSelector)) {
if (message == null) {
break;
Enumeration<?> enumeration = browser.getEnumeration();
int count = 0;
while (enumeration.hasMoreElements() && count < maxMessages) {
Message message = (Message) enumeration.nextElement();
if (message != null) {
ReceivedMessage received = decodeMessage(message, queueName, format);
messages.add(received);
count++;
}
ReceivedMessage received = decodeMessage(message, queueName, format);
messages.add(received);
count++;
}
return messages;
} catch (Exception e) {
} catch (JMSException e) {
throw new MessagingDestinationException("Failed to browse queue: " + queueName, e);
} finally {
try {
consumer.close();
} catch (JMSException e) {
LOG.warn("Failed to close consumer", e);
}
}
}

View File

@ -0,0 +1,19 @@
package cz.moneta.test.system.messaging;
import java.util.List;
import cz.moneta.test.harness.annotations.TestCase;
import cz.moneta.test.harness.annotations.TestScenario;
import cz.moneta.test.harness.endpoints.imq.ImqFirstVisionQueue;
import cz.moneta.test.harness.messaging.ReceivedMessage;
@TestScenario(name = "IBM MQ Browse Test")
public class ImqBrowseTest {
@TestCase(name = "Browse messages in queue")
public void browseMessagesInQueue(cz.moneta.test.dsl.Harness harness) {
List<ReceivedMessage> peeked = harness.withImqFirstVision().fromQueue(ImqFirstVisionQueue.PAYMENT_NOTIFICATIONS)
.browse(10);
assert !peeked.isEmpty() : "Expected to find messages in the queue, but it was empty.";
}
}