[jboss-cvs] JBoss Messaging SVN: r2827 - in trunk: tests/src/org/jboss/test/messaging/jms and 1 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Jul 3 08:00:15 EDT 2007
Author: sergeypk
Date: 2007-07-03 08:00:14 -0400 (Tue, 03 Jul 2007)
New Revision: 2827
Modified:
trunk/src/main/org/jboss/messaging/util/MessageQueueNameHelper.java
trunk/tests/src/org/jboss/test/messaging/jms/DurableSubscriptionTest.java
trunk/tests/src/org/jboss/test/messaging/jms/util/MessageQueueNameHelperTest.java
Log:
http://jira.jboss.com/jira/browse/JBMESSAGING-1008 - escape client id and subscription name to allow them to contain dots.
Modified: trunk/src/main/org/jboss/messaging/util/MessageQueueNameHelper.java
===================================================================
--- trunk/src/main/org/jboss/messaging/util/MessageQueueNameHelper.java 2007-07-03 01:53:40 UTC (rev 2826)
+++ trunk/src/main/org/jboss/messaging/util/MessageQueueNameHelper.java 2007-07-03 12:00:14 UTC (rev 2827)
@@ -21,7 +21,6 @@
*/
package org.jboss.messaging.util;
-import java.util.StringTokenizer;
/**
* A MessageQueueNameHelper
@@ -45,6 +44,8 @@
private String subName;
+ private static char ESCAPE = '\\';
+ private static char SEPARATOR_CHAR = '.';
private static String SEPARATOR = ".";
private MessageQueueNameHelper(String messageQueueName)
@@ -54,30 +55,55 @@
throw new IllegalArgumentException("Message queue name is null");
}
- StringTokenizer tok = new StringTokenizer(messageQueueName, SEPARATOR);
+ StringBuffer[] parts = new StringBuffer[2];
+ int currentPart = 0;
- int count = 0;
+ parts[0] = new StringBuffer();
+ parts[1] = new StringBuffer();
- while (tok.hasMoreElements())
+ int pos = 0;
+ while (pos < messageQueueName.length())
{
- String token = (String)tok.nextElement();
-
- if (count == 0)
+ char ch = messageQueueName.charAt(pos);
+ pos++;
+
+ if (ch == SEPARATOR_CHAR)
{
- clientId = token;
+ currentPart++;
+ if (currentPart >= parts.length)
+ {
+ throw new IllegalArgumentException("Invalid message queue name: " + messageQueueName);
+ }
+
+ continue;
}
- else if (count == 1)
+
+ if (ch == ESCAPE)
{
- subName = token;
+ if (pos >= messageQueueName.length())
+ {
+ throw new IllegalArgumentException("Invalid message queue name: " + messageQueueName);
+ }
+ ch = messageQueueName.charAt(pos);
+ pos++;
}
- count++;
+
+ parts[currentPart].append(ch);
}
- if (count != 2)
+ if (currentPart != 1)
{
throw new IllegalArgumentException("Invalid message queue name: " + messageQueueName);
}
+
+ clientId = parts[0].toString();
+ subName = parts[1].toString();
}
+
+ private static String escape(String input)
+ {
+ return input.replace("\\", "\\\\").replace(".", "\\.");
+ }
public String getClientId()
{
@@ -105,6 +131,6 @@
throw new IllegalArgumentException("Subscription name is null");
}
- return clientID + SEPARATOR + subName;
+ return escape(clientID) + SEPARATOR + escape(subName);
}
}
Modified: trunk/tests/src/org/jboss/test/messaging/jms/DurableSubscriptionTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/DurableSubscriptionTest.java 2007-07-03 01:53:40 UTC (rev 2826)
+++ trunk/tests/src/org/jboss/test/messaging/jms/DurableSubscriptionTest.java 2007-07-03 12:00:14 UTC (rev 2827)
@@ -555,6 +555,38 @@
conn.close();
}
+ public void testDurableSubscriptionWithPeriodsInName() throws Exception
+ {
+ ConnectionFactory cf = (ConnectionFactory)ic.lookup("ConnectionFactory");
+ Topic topic = (Topic)ic.lookup("/topic/Topic");
+
+ Connection conn = cf.createConnection();
+ conn.setClientID(".client.id.with.periods.");
+
+ Session s = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+
+ TopicSubscriber subscriber = s.createDurableSubscriber(topic, ".subscription.name.with.periods.");
+
+ ServerManagement.undeployTopic("Topic");
+ ServerManagement.deployTopic("Topic");
+
+ topic = (Topic)ic.lookup("/topic/Topic");
+ s.createProducer(topic).send(s.createTextMessage("Subscription test"));
+
+ conn.start();
+
+ Message m = subscriber.receive(1000L);
+
+ assertNotNull(m);
+ assertTrue(m instanceof TextMessage);
+
+ subscriber.close();
+
+ s.unsubscribe(".subscription.name.with.periods.");
+
+ conn.close();
+ }
+
// Package protected ---------------------------------------------
// Protected -----------------------------------------------------
Modified: trunk/tests/src/org/jboss/test/messaging/jms/util/MessageQueueNameHelperTest.java
===================================================================
--- trunk/tests/src/org/jboss/test/messaging/jms/util/MessageQueueNameHelperTest.java 2007-07-03 01:53:40 UTC (rev 2826)
+++ trunk/tests/src/org/jboss/test/messaging/jms/util/MessageQueueNameHelperTest.java 2007-07-03 12:00:14 UTC (rev 2827)
@@ -59,6 +59,20 @@
assertEquals("clientid456.mysub2", name);
}
+
+ public void testEscaping()
+ {
+ String clientID = ".client.id.";
+ String subscriptionName = ".subscription.name.";
+
+ String queueName = MessageQueueNameHelper.createSubscriptionName(clientID, subscriptionName);
+ assertEquals("\\.client\\.id\\..\\.subscription\\.name\\.", queueName);
+
+ MessageQueueNameHelper helper = MessageQueueNameHelper.createHelper(queueName);
+
+ assertEquals(clientID, helper.getClientId());
+ assertEquals(subscriptionName, helper.getSubName());
+ }
// Package protected ---------------------------------------------
More information about the jboss-cvs-commits
mailing list