From 560c91b87a0960f030e3d5c3d6cc2431348e0b1a Mon Sep 17 00:00:00 2001 From: Rajith Muditha Attapattu Date: Wed, 3 Jun 2009 03:12:03 +0000 Subject: This is a fix for QPID-1888 The SelectorTest contains a test case to catch this as the JMS tck does not have one. git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@781244 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/qpid/filter/PropertyExpression.java | 18 +++++++ .../qpid/test/client/message/SelectorTest.java | 61 ++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 java/systests/src/main/java/org/apache/qpid/test/client/message/SelectorTest.java diff --git a/java/client/src/main/java/org/apache/qpid/filter/PropertyExpression.java b/java/client/src/main/java/org/apache/qpid/filter/PropertyExpression.java index 2c05f5ce0f..09152f7f1b 100644 --- a/java/client/src/main/java/org/apache/qpid/filter/PropertyExpression.java +++ b/java/client/src/main/java/org/apache/qpid/filter/PropertyExpression.java @@ -204,6 +204,24 @@ public class PropertyExpression implements Expression } } }); + + JMS_PROPERTY_EXPRESSIONS.put("JMSMessageID", new Expression() + { + public Object evaluate(AbstractJMSMessage message) + { + try + { + return message.getJMSMessageID(); + } + catch (Exception e) + { + _logger.warn("Error evaluating property",e); + + return null; + } + + } + }); } diff --git a/java/systests/src/main/java/org/apache/qpid/test/client/message/SelectorTest.java b/java/systests/src/main/java/org/apache/qpid/test/client/message/SelectorTest.java new file mode 100644 index 0000000000..6de7012f8d --- /dev/null +++ b/java/systests/src/main/java/org/apache/qpid/test/client/message/SelectorTest.java @@ -0,0 +1,61 @@ +package org.apache.qpid.test.client.message; + +import javax.jms.Connection; +import javax.jms.Destination; +import javax.jms.Message; +import javax.jms.MessageConsumer; +import javax.jms.MessageProducer; +import javax.jms.Session; + +import junit.framework.Assert; + +import org.apache.log4j.Logger; +import org.apache.qpid.test.utils.QpidTestCase; + +public class SelectorTest extends QpidTestCase +{ + private static final Logger _logger = Logger.getLogger(SelectorTest.class); + + public void testSelectorWithJMSMessageID() throws Exception + { + Connection conn = getConnection(); + conn.start(); + Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE); + + Destination dest = session.createQueue("SelectorQueue"); + + MessageProducer prod = session.createProducer(dest); + MessageConsumer consumer = session.createConsumer(dest,"JMSMessageID IS NOT NULL"); + + for (int i=0; i<2; i++) + { + Message msg = session.createTextMessage("Msg" + String.valueOf(i)); + prod.send(msg); + } + + Message msg1 = consumer.receive(500); + Message msg2 = consumer.receive(500); + + Assert.assertNotNull("Msg1 should not be null", msg1); + Assert.assertNotNull("Msg2 should not be null", msg2); + + prod.setDisableMessageID(true); + + for (int i=0; i<2; i++) + { + Message msg = session.createTextMessage("Msg" + String.valueOf(i)); + prod.send(msg); + } + + Message msg3 = consumer.receive(1000); + Assert.assertNull("Msg3 should be null", msg3); + + consumer = session.createConsumer(dest,"JMSMessageID IS NULL"); + + Message msg4 = consumer.receive(500); + Message msg5 = consumer.receive(500); + + Assert.assertNotNull("Msg4 should not be null", msg4); + Assert.assertNotNull("Msg5 should not be null", msg5); + } +} -- cgit v1.2.1