jms browser implemented
This commit is contained in:
parent
e7d9acf13b
commit
26b6354875
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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.";
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user