Author: robbie
Date: Sun Sep  2 19:26:05 2012
New Revision: 1380037

URL: http://svn.apache.org/viewvc?rev=1380037&view=rev
Log:
QPID-4238: escape tags for queue and virtualhost names with dots in them when 
accessing the XML configuration, works around CommonsConfiguration behaviour 
with element names containing dots

Applied patch from Jakub Scholz

Modified:
    
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/QueueConfiguration.java
    
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java
    
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/plugins/ConfigurationPlugin.java
    
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/VirtualHostConfigurationTest.java

Modified: 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/QueueConfiguration.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/QueueConfiguration.java?rev=1380037&r1=1380036&r2=1380037&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/QueueConfiguration.java
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/QueueConfiguration.java
 Sun Sep  2 19:26:05 2012
@@ -39,7 +39,7 @@ public class QueueConfiguration extends 
         _name = name;
 
         CompositeConfiguration mungedConf = new CompositeConfiguration();
-        
mungedConf.addConfiguration(_vHostConfig.getConfig().subset("queues.queue." + 
name));
+        
mungedConf.addConfiguration(_vHostConfig.getConfig().subset("queues.queue." + 
escapeTagName(name)));
         mungedConf.addConfiguration(_vHostConfig.getConfig().subset("queues"));
 
         setConfiguration("virtualhosts.virtualhost.queues.queue", mungedConf);

Modified: 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java?rev=1380037&r1=1380036&r2=1380037&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/ServerConfiguration.java
 Sun Sep  2 19:26:05 2012
@@ -349,7 +349,7 @@ public class ServerConfiguration extends
             String name = (String) hosts.get(j);
 
             // Add the virtual hosts to the server configuration
-            VirtualHostConfiguration virtualhost = new 
VirtualHostConfiguration(name, vhostConfiguration.subset("virtualhost." + 
name));
+            VirtualHostConfiguration virtualhost = new 
VirtualHostConfiguration(name, vhostConfiguration.subset("virtualhost." + 
escapeTagName(name)));
             _virtualHosts.put(virtualhost.getName(), virtualhost);
         }
     }
@@ -506,7 +506,7 @@ public class ServerConfiguration extends
             for (String hostName : _virtualHosts.keySet())
             {
                 VirtualHost vhost = vhostRegistry.getVirtualHost(hostName);
-                Configuration vhostConfig = newVhosts.subset("virtualhost." + 
hostName);
+                Configuration vhostConfig = newVhosts.subset("virtualhost." + 
escapeTagName(hostName));
                 
vhost.getConfiguration().setConfiguration("virtualhosts.virtualhost", 
vhostConfig);
                 vhost.getSecurityManager().configureGlobalPlugins(this);
                 
vhost.getSecurityManager().configureHostPlugins(vhost.getConfiguration());

Modified: 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/plugins/ConfigurationPlugin.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/plugins/ConfigurationPlugin.java?rev=1380037&r1=1380036&r2=1380037&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/plugins/ConfigurationPlugin.java
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/main/java/org/apache/qpid/server/configuration/plugins/ConfigurationPlugin.java
 Sun Sep  2 19:26:05 2012
@@ -479,6 +479,11 @@ public abstract class ConfigurationPlugi
         return super.toString();
     }
 
+    public String escapeTagName(String name)
+    {
+        return name.replaceAll("\\.", "\\.\\.");
+    }
+
     protected void setConfig(Configuration config)
     {
         _config = config;

Modified: 
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/VirtualHostConfigurationTest.java
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/VirtualHostConfigurationTest.java?rev=1380037&r1=1380036&r2=1380037&view=diff
==============================================================================
--- 
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/VirtualHostConfigurationTest.java
 (original)
+++ 
qpid/trunk/qpid/java/broker/src/test/java/org/apache/qpid/server/configuration/VirtualHostConfigurationTest.java
 Sun Sep  2 19:26:05 2012
@@ -319,4 +319,49 @@ public class VirtualHostConfigurationTes
                      ce.getMessage());
          }
      }
+
+     /*
+      * Tests that the queues with dots in the names are fully supported. The 
XML configuration
+      * had problems with handling the tags containing dots due to the design 
of the Apache Commons
+      * Configuration library. The dots need to be escaped when accessing the 
XML configuration.
+      */
+     public void testDotsInQueueName() throws Exception
+     {
+         // Set up vhosts and queue
+         getConfigXml().addProperty("virtualhosts.virtualhost." + getName() + 
".queues(-1).queue(-1).name", "dot.in.a.name");
+         // Add a single property which is inside the <dot.in.a.name> queue 
tag - the maximum delivery count
+         getConfigXml().addProperty("virtualhosts.virtualhost." + getName() + 
".queues.queue.dot..in..a..name.maximumDeliveryCount", 5);
+
+         // Start the broker now.
+         super.createBroker();
+
+         // Get vhosts
+         VirtualHost test = 
ApplicationRegistry.getInstance().getVirtualHostRegistry().getVirtualHost(getName());
+
+         // Check, that the property stored within the <dot.in.a.name> tag has 
been properly loaded
+         assertEquals("queue with dots in its name has been properly loaded", 
5, 
test.getConfiguration().getQueueConfiguration("dot.in.a.name").getMaxDeliveryCount());
+     }
+
+     /*
+      * Tests that the virtual hosts with dots in the names are fully 
supported. The XML
+      * configuration had problems with handling the tags containing dots due 
to the design
+      * of the Apache Commons Configuration library. The dots need to be 
escaped when
+      * accessing the XML configuration.
+      */
+     public void testDotsInVirtualHostName() throws Exception
+     {
+         // Set up vhosts
+         getConfigXml().addProperty("virtualhosts.virtualhost.name", 
"dot.in.a.name");
+         // Add a single property which is inside the <dot.in.a.name> virtual 
host tag - the message store
+         
getConfigXml().addProperty("virtualhosts.virtualhost.dot..in..a..name.store.class",
 TestableMemoryMessageStore.class.getName());
+
+         // Start the broker now.
+         super.createBroker();
+
+         // Get vhosts
+         VirtualHost test = 
ApplicationRegistry.getInstance().getVirtualHostRegistry().getVirtualHost("dot.in.a.name");
+
+         // Check, that the property stored within the <dot.in.a.name> tag has 
been properly loaded
+         assertEquals("virtual host with dots in the name has been properly 
loaded", TestableMemoryMessageStore.class.getName(), 
test.getMessageStore().getClass().getName());
+     }
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to