You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rg...@apache.org on 2015/06/11 01:10:21 UTC

svn commit: r1684794 - in /qpid/java/trunk: bdbstore/src/main/java/resources/js/qpid/management/virtualhostnode/bdb_ha/ bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/ broker-core/src/main/java/org/apache/qpid/serve...

Author: rgodfrey
Date: Wed Jun 10 23:10:20 2015
New Revision: 1684794

URL: http://svn.apache.org/r1684794
Log:
QPID-6581 : [Java Broker] Bind the rest serlvet to paths based purely on the model meta-data

Modified:
    qpid/java/trunk/bdbstore/src/main/java/resources/js/qpid/management/virtualhostnode/bdb_ha/show.js
    qpid/java/trunk/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/BDBHAVirtualHostNodeRestTest.java
    qpid/java/trunk/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/GroupCreator.java
    qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Model.java
    qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
    qpid/java/trunk/doc/book/src/java-broker/management/channels/Java-Broker-Management-Channel-REST-API.xml

Modified: qpid/java/trunk/bdbstore/src/main/java/resources/js/qpid/management/virtualhostnode/bdb_ha/show.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/bdbstore/src/main/java/resources/js/qpid/management/virtualhostnode/bdb_ha/show.js?rev=1684794&r1=1684793&r2=1684794&view=diff
==============================================================================
--- qpid/java/trunk/bdbstore/src/main/java/resources/js/qpid/management/virtualhostnode/bdb_ha/show.js (original)
+++ qpid/java/trunk/bdbstore/src/main/java/resources/js/qpid/management/virtualhostnode/bdb_ha/show.js Wed Jun 10 23:10:20 2015
@@ -45,7 +45,7 @@ define(["dojo/_base/connect",
         }
         else
         {
-          return {name: remoteNodeName, type: "replicationnode", parent : modelObj};
+          return {name: remoteNodeName, type: "remotereplicationnode", parent : modelObj};
         }
     }
 

Modified: qpid/java/trunk/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/BDBHAVirtualHostNodeRestTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/BDBHAVirtualHostNodeRestTest.java?rev=1684794&r1=1684793&r2=1684794&view=diff
==============================================================================
--- qpid/java/trunk/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/BDBHAVirtualHostNodeRestTest.java (original)
+++ qpid/java/trunk/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/BDBHAVirtualHostNodeRestTest.java Wed Jun 10 23:10:20 2015
@@ -113,8 +113,8 @@ public class BDBHAVirtualHostNodeRestTes
         assertActualAndDesiredStates(node3Url, "ACTIVE", "ACTIVE");
 
         // verify that remote nodes for node1 are created and their state is set to ACTIVE
-        waitForAttributeChanged("replicationnode/" + NODE2 + "/" + NODE1, BDBHARemoteReplicationNode.STATE, "ACTIVE");
-        waitForAttributeChanged("replicationnode/" + NODE3 + "/" + NODE1, BDBHARemoteReplicationNode.STATE, "ACTIVE");
+        waitForAttributeChanged("remotereplicationnode/" + NODE2 + "/" + NODE1, BDBHARemoteReplicationNode.STATE, "ACTIVE");
+        waitForAttributeChanged("remotereplicationnode/" + NODE3 + "/" + NODE1, BDBHARemoteReplicationNode.STATE, "ACTIVE");
 
         mutateDesiredState(node1Url, "STOPPED");
 
@@ -123,10 +123,10 @@ public class BDBHAVirtualHostNodeRestTes
         assertActualAndDesiredStates(node3Url, "ACTIVE", "ACTIVE");
 
         // verify that remote node state fro node1 is changed to UNAVAILABLE
-        waitForAttributeChanged("replicationnode/" + NODE2 + "/" + NODE1, BDBHARemoteReplicationNode.STATE, "UNAVAILABLE");
-        waitForAttributeChanged("replicationnode/" + NODE3 + "/" + NODE1, BDBHARemoteReplicationNode.STATE, "UNAVAILABLE");
+        waitForAttributeChanged("remotereplicationnode/" + NODE2 + "/" + NODE1, BDBHARemoteReplicationNode.STATE, "UNAVAILABLE");
+        waitForAttributeChanged("remotereplicationnode/" + NODE3 + "/" + NODE1, BDBHARemoteReplicationNode.STATE, "UNAVAILABLE");
 
-        List<Map<String, Object>> remoteNodes = getRestTestHelper().getJsonAsList("replicationnode/" + NODE2);
+        List<Map<String, Object>> remoteNodes = getRestTestHelper().getJsonAsList("remotereplicationnode/" + NODE2);
         assertEquals("Unexpected number of remote nodes on " + NODE2, 2, remoteNodes.size());
 
         Map<String, Object> remoteNode1 = findRemoteNodeByName(remoteNodes, NODE1);
@@ -177,7 +177,7 @@ public class BDBHAVirtualHostNodeRestTes
 
         assertRemoteNodes(NODE1, NODE2, NODE3);
 
-        List<Map<String,Object>> data = getRestTestHelper().getJsonAsList("replicationnode/" + NODE1);
+        List<Map<String,Object>> data = getRestTestHelper().getJsonAsList("remotereplicationnode/" + NODE1);
         assertEquals("Unexpected number of remote nodes on " + NODE1, 2, data.size());
 
         getRestTestHelper().submitRequest(_baseNodeRestUrl + NODE2, "DELETE", HttpServletResponse.SC_OK);
@@ -185,7 +185,7 @@ public class BDBHAVirtualHostNodeRestTes
         int counter = 0;
         while (data.size() != 1 && counter<50)
         {
-            data = getRestTestHelper().getJsonAsList("replicationnode/" + NODE1);
+            data = getRestTestHelper().getJsonAsList("remotereplicationnode/" + NODE1);
             if (data.size() != 1)
             {
                 Thread.sleep(100l);
@@ -210,7 +210,7 @@ public class BDBHAVirtualHostNodeRestTes
                                           Collections.<String, Object>singletonMap(BDBHAVirtualHostNode.PRIORITY, 100),
                                           HttpServletResponse.SC_OK);
 
-        List<Map<String,Object>> data = getRestTestHelper().getJsonAsList("replicationnode/" + NODE2);
+        List<Map<String,Object>> data = getRestTestHelper().getJsonAsList("remotereplicationnode/" + NODE2);
         assertEquals("Unexpected number of remote nodes on " + NODE2, 2, data.size());
 
         // delete master
@@ -220,12 +220,12 @@ public class BDBHAVirtualHostNodeRestTes
         waitForAttributeChanged(_baseNodeRestUrl + NODE2 + "?depth=0", BDBHAVirtualHostNode.ROLE, "MASTER");
 
         // delete remote node
-        getRestTestHelper().submitRequest("replicationnode/" + NODE2 + "/" + NODE1, "DELETE", HttpServletResponse.SC_OK);
+        getRestTestHelper().submitRequest("remotereplicationnode/" + NODE2 + "/" + NODE1, "DELETE", HttpServletResponse.SC_OK);
 
         int counter = 0;
         while (data.size() != 1 && counter<50)
         {
-            data = getRestTestHelper().getJsonAsList("replicationnode/" + NODE2);
+            data = getRestTestHelper().getJsonAsList("remotereplicationnode/" + NODE2);
             if (data.size() != 1)
             {
                 Thread.sleep(100l);
@@ -391,7 +391,7 @@ public class BDBHAVirtualHostNodeRestTes
             remotes.remove(clusterNodeName);
             for (String remote : remotes)
             {
-                String remoteUrl = "replicationnode/" + clusterNodeName + "/" + remote;
+                String remoteUrl = "remotereplicationnode/" + clusterNodeName + "/" + remote;
                 Map<String, Object> nodeData = waitForAttributeChanged(remoteUrl, BDBHARemoteReplicationNode.ROLE, remote.equals(masterNode) ? "MASTER" : "REPLICA");
                 assertRemoteNodeData(remote, nodeData);
             }

Modified: qpid/java/trunk/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/GroupCreator.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/GroupCreator.java?rev=1684794&r1=1684793&r2=1684794&view=diff
==============================================================================
--- qpid/java/trunk/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/GroupCreator.java (original)
+++ qpid/java/trunk/bdbstore/systests/src/test/java/org/apache/qpid/server/store/berkeleydb/replication/GroupCreator.java Wed Jun 10 23:10:20 2015
@@ -438,7 +438,7 @@ public class GroupCreator
         }
         else
         {
-            url = "/api/latest/replicationnode/" + localNodeName + "/" + remoteNodeName;
+            url = "/api/latest/remotereplicationnode/" + localNodeName + "/" + remoteNodeName;
         }
         return url;
     }

Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Model.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Model.java?rev=1684794&r1=1684793&r2=1684794&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Model.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Model.java Wed Jun 10 23:10:20 2015
@@ -145,6 +145,33 @@ public abstract class Model
         return allDescendants.contains(descendantClass);
     }
 
+    public final Collection<Class<? extends ConfiguredObject>> getDescendantCategories(Class<? extends ConfiguredObject> parent)
+    {
+        Set<Class<? extends ConfiguredObject>> allDescendants = new HashSet<>();
+        for(Class<? extends ConfiguredObject> clazz : getChildTypes(parent))
+        {
+            if(allDescendants.add(clazz))
+            {
+                allDescendants.addAll(getDescendantCategories(clazz));
+            }
+        }
+
+        return allDescendants;
+    }
+
+    public final Collection<Class<? extends ConfiguredObject>> getAncestorCategories(Class<? extends ConfiguredObject> category)
+    {
+        Set<Class<? extends ConfiguredObject>> allAncestors = new HashSet<>();
+        for(Class<? extends ConfiguredObject> clazz : getParentTypes(category))
+        {
+            if(allAncestors.add(clazz))
+            {
+                allAncestors.addAll(getAncestorCategories(clazz));
+            }
+        }
+
+        return allAncestors;
+    }
 
     public abstract Collection<Class<? extends ConfiguredObject>> getSupportedCategories();
     public abstract Collection<Class<? extends ConfiguredObject>> getChildTypes(Class<? extends ConfiguredObject> parent);

Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java?rev=1684794&r1=1684793&r2=1684794&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java Wed Jun 10 23:10:20 2015
@@ -43,7 +43,6 @@ import javax.servlet.http.HttpServletReq
 
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
-import org.apache.qpid.server.management.plugin.servlet.rest.TimeZoneServlet;
 import org.eclipse.jetty.io.EndPoint;
 import org.eclipse.jetty.server.Connector;
 import org.eclipse.jetty.server.Request;
@@ -68,9 +67,7 @@ import org.apache.qpid.server.management
 import org.apache.qpid.server.management.plugin.filter.RedirectingAuthorisationFilter;
 import org.apache.qpid.server.management.plugin.servlet.DefinedFileServlet;
 import org.apache.qpid.server.management.plugin.servlet.FileServlet;
-import org.apache.qpid.server.management.plugin.servlet.LogFileServlet;
 import org.apache.qpid.server.management.plugin.servlet.rest.ApiDocsServlet;
-import org.apache.qpid.server.management.plugin.servlet.rest.LogFileListingServlet;
 import org.apache.qpid.server.management.plugin.servlet.rest.LogRecordsServlet;
 import org.apache.qpid.server.management.plugin.servlet.rest.LoggedOnUserPreferencesServlet;
 import org.apache.qpid.server.management.plugin.servlet.rest.LogoutServlet;
@@ -81,6 +78,7 @@ import org.apache.qpid.server.management
 import org.apache.qpid.server.management.plugin.servlet.rest.RestServlet;
 import org.apache.qpid.server.management.plugin.servlet.rest.SaslServlet;
 import org.apache.qpid.server.management.plugin.servlet.rest.StructureServlet;
+import org.apache.qpid.server.management.plugin.servlet.rest.TimeZoneServlet;
 import org.apache.qpid.server.management.plugin.servlet.rest.UserPreferencesServlet;
 import org.apache.qpid.server.model.*;
 import org.apache.qpid.server.model.adapter.AbstractPluginAdapter;
@@ -95,7 +93,7 @@ public class HttpManagement extends Abst
 {
     private static final String PORT_SERVLET_ATTRIBUTE = "org.apache.qpid.server.model.Port";
     private final Logger _logger = LoggerFactory.getLogger(HttpManagement.class);
-
+    
     // 10 minutes by default
     public static final int DEFAULT_TIMEOUT_IN_SECONDS = 60 * 10;
     public static final String TIME_OUT = "sessionTimeout";
@@ -110,6 +108,9 @@ public class HttpManagement extends Abst
 
     private static final String JSESSIONID_COOKIE_PREFIX = "JSESSIONID_";
 
+    private static final String[] STATIC_FILE_TYPES = { "*.js", "*.css", "*.html", "*.png", "*.gif", "*.jpg",
+                                                        "*.jpeg", "*.json", "*.txt", "*.xsl" };
+
     private Server _server;
 
     @ManagedAttributeField
@@ -300,32 +301,8 @@ public class HttpManagement extends Abst
         root.addFilter(new FilterHolder(new RedirectingAuthorisationFilter()), "/index.html", EnumSet.of(DispatcherType.REQUEST));
         root.addFilter(new FilterHolder(new RedirectingAuthorisationFilter()), "/", EnumSet.of(DispatcherType.REQUEST));
 
-        addRestServlet(root, "broker");
-        addRestServlet(root, "virtualhostnode", VirtualHostNode.class);
-        addRestServlet(root, "authenticationprovider", AuthenticationProvider.class);
-        addRestServlet(root, "accesscontrolprovider", AccessControlProvider.class);
-        addRestServlet(root, "user", AuthenticationProvider.class, User.class);
-        addRestServlet(root, "groupprovider", GroupProvider.class);
-        addRestServlet(root, "group", GroupProvider.class, Group.class);
-        addRestServlet(root, "groupmember", GroupProvider.class, Group.class, GroupMember.class);
-        addRestServlet(root, "port", Port.class);
-        addRestServlet(root, "keystore", KeyStore.class);
-        addRestServlet(root, "truststore", TrustStore.class);
-        addRestServlet(root, "plugin", Plugin.class);
-        addRestServlet(root, "preferencesprovider", AuthenticationProvider.class, PreferencesProvider.class);
-
-        addRestServlet(root, "replicationnode", VirtualHostNode.class, RemoteReplicationNode.class);
-
-        addRestServlet(root, "virtualhost", VirtualHostNode.class, VirtualHost.class);
-        addRestServlet(root, "exchange", VirtualHostNode.class, VirtualHost.class, Exchange.class);
-        addRestServlet(root, "queue", VirtualHostNode.class, VirtualHost.class, Queue.class);
-        addRestServlet(root, "connection", VirtualHostNode.class, VirtualHost.class, Connection.class);
-        addRestServlet(root, "binding", VirtualHostNode.class, VirtualHost.class, Exchange.class, Queue.class, Binding.class);
-        addRestServlet(root, "session", VirtualHostNode.class, VirtualHost.class, Connection.class, Session.class);
-
-        addRestServlet(root, "brokerlogger", BrokerLogger.class);
-        addRestServlet(root, "brokerloggerfilter", BrokerLogger.class, BrokerLoggerFilter.class);
-
+        addRestServlet(root, Broker.class);
+        
         ServletHolder apiDocsServlet = new ServletHolder(new ApiDocsServlet(getModel(), Collections.<String>emptyList()));
         root.addServlet(apiDocsServlet, "/apidocs");
         root.addServlet(apiDocsServlet, "/apidocs/");
@@ -353,16 +330,11 @@ public class HttpManagement extends Abst
         root.addServlet(new ServletHolder(new FileServlet(DojoHelper.getDijitPath(), true)), "/dojo/dijit/*");
         root.addServlet(new ServletHolder(new FileServlet(DojoHelper.getDojoxPath(), true)), "/dojo/dojox/*");
 
-        root.addServlet(new ServletHolder(new FileServlet()), "*.js");
-        root.addServlet(new ServletHolder(new FileServlet()), "*.css");
-        root.addServlet(new ServletHolder(new FileServlet()), "*.html");
-        root.addServlet(new ServletHolder(new FileServlet()), "*.png");
-        root.addServlet(new ServletHolder(new FileServlet()), "*.gif");
-        root.addServlet(new ServletHolder(new FileServlet()), "*.jpg");
-        root.addServlet(new ServletHolder(new FileServlet()), "*.jpeg");
-        root.addServlet(new ServletHolder(new FileServlet()), "*.json");
-        root.addServlet(new ServletHolder(new FileServlet()), "*.txt");
-        root.addServlet(new ServletHolder(new FileServlet()), "*.xsl");
+        for(String pattern : STATIC_FILE_TYPES)
+        {
+            root.addServlet(new ServletHolder(new FileServlet()), pattern);
+        }
+
         root.addServlet(new ServletHolder(new TimeZoneServlet()), "/service/timezones");
         // QPID-6516
 //        root.addServlet(new ServletHolder(new LogFileListingServlet()), "/service/logfilenames");
@@ -486,31 +458,58 @@ public class HttpManagement extends Abst
         return connector;
     }
 
-    private void addRestServlet(ServletContextHandler root, String name, Class<? extends ConfiguredObject>... hierarchy)
+    private void addRestServlet(ServletContextHandler root, final Class<? extends ConfiguredObject> rootClass)
     {
-        ServletHolder servletHolder = new ServletHolder(name, new RestServlet(hierarchy));
-        servletHolder.getRegistration().setMultipartConfig(
-                new MultipartConfigElement("",
-                                           getContextValue(Long.class, MAX_HTTP_FILE_UPLOAD_SIZE_CONTEXT_NAME),
-                                           -1l,
-                                           getContextValue(Integer.class, MAX_HTTP_FILE_UPLOAD_SIZE_CONTEXT_NAME)));
-
-        List<String> paths = Arrays.asList("/api/latest/" + name ,
-                                           "/api/v" + BrokerModel.MODEL_MAJOR_VERSION + "/" + name  );
-
-        for(String path : paths)
-        {
-            root.addServlet(servletHolder, path + "/*");
-        }
-        ServletHolder docServletHolder = new ServletHolder(name+"docs", new ApiDocsServlet(getModel(),
-                                                                                           paths,
-                                                                                           hierarchy));
-        root.addServlet(docServletHolder, "/apidocs/latest/" + name + "/");
-        root.addServlet(docServletHolder, "/apidocs/v" + BrokerModel.MODEL_MAJOR_VERSION + "/" + name +"/");
-        root.addServlet(docServletHolder, "/apidocs/latest/" + name );
-        root.addServlet(docServletHolder, "/apidocs/v" + BrokerModel.MODEL_MAJOR_VERSION + "/" + name);
+        Set<Class<? extends ConfiguredObject>> categories = new HashSet<>(getModel().getDescendantCategories(rootClass));
+        categories.add(rootClass);
+        for(Class<? extends ConfiguredObject> category : categories)
+        {
+                String name = category.getSimpleName().toLowerCase();
+                List<Class<? extends ConfiguredObject>> hierarchyList = new ArrayList<>();
 
+                if(category != rootClass)
+                {
+                    Collection<Class<? extends ConfiguredObject>> parentCategories;
+
+                    hierarchyList.add(category);
 
+                    while (!(parentCategories = getModel().getParentTypes(category)).contains(rootClass))
+                    {
+                        hierarchyList.addAll(parentCategories);
+                        category = parentCategories.iterator().next();
+                    }
+
+                    Collections.reverse(hierarchyList);
+
+                }
+                Class<? extends ConfiguredObject>[] hierarchyArray =
+                        hierarchyList.toArray(new Class[hierarchyList.size()]);
+
+                ServletHolder servletHolder = new ServletHolder(name, new RestServlet(hierarchyArray));
+                servletHolder.getRegistration().setMultipartConfig(
+                        new MultipartConfigElement("",
+                                                   getContextValue(Long.class, MAX_HTTP_FILE_UPLOAD_SIZE_CONTEXT_NAME),
+                                                   -1l,
+                                                   getContextValue(Integer.class,
+                                                                   MAX_HTTP_FILE_UPLOAD_SIZE_CONTEXT_NAME)));
+
+                List<String> paths = Arrays.asList("/api/latest/" + name,
+                                                   "/api/v" + BrokerModel.MODEL_MAJOR_VERSION + "/" + name);
+
+                for (String path : paths)
+                {
+                    root.addServlet(servletHolder, path + "/*");
+                }
+                ServletHolder docServletHolder = new ServletHolder(name + "docs", new ApiDocsServlet(getModel(),
+                                                                                                     paths,
+                                                                                                     hierarchyArray));
+                root.addServlet(docServletHolder, "/apidocs/latest/" + name + "/");
+                root.addServlet(docServletHolder, "/apidocs/v" + BrokerModel.MODEL_MAJOR_VERSION + "/" + name + "/");
+                root.addServlet(docServletHolder, "/apidocs/latest/" + name);
+                root.addServlet(docServletHolder, "/apidocs/v" + BrokerModel.MODEL_MAJOR_VERSION + "/" + name);
+
+
+        }
     }
 
     private void logOperationalListenMessages(Collection<Port<?>> ports)

Modified: qpid/java/trunk/doc/book/src/java-broker/management/channels/Java-Broker-Management-Channel-REST-API.xml
URL: http://svn.apache.org/viewvc/qpid/java/trunk/doc/book/src/java-broker/management/channels/Java-Broker-Management-Channel-REST-API.xml?rev=1684794&r1=1684793&r2=1684794&view=diff
==============================================================================
--- qpid/java/trunk/doc/book/src/java-broker/management/channels/Java-Broker-Management-Channel-REST-API.xml (original)
+++ qpid/java/trunk/doc/book/src/java-broker/management/channels/Java-Broker-Management-Channel-REST-API.xml Wed Jun 10 23:10:20 2015
@@ -334,16 +334,16 @@
           <row>
             <entry>
               <itemizedlist>
-                <listitem><para>/api/latest/replicationnode</para></listitem>
-                <listitem><para>/api/&lt;version&gt;/replicationnode</para></listitem>
-                <listitem><para>/api/latest/replicationnode/&lt;virtual host node name&gt;</para></listitem>
-                <listitem><para>/api/&lt;version&gt;/replicationnode/&lt;virtual host node name&gt;</para></listitem>
-                <listitem><para>/api/latest/replicationnode/&lt;virtual host node name&gt;/&lt;replication node name&gt;</para></listitem>
-                <listitem><para>/api/&lt;version&gt;/replicationnode/&lt;virtual host node name&gt;/&lt;replication node name&gt;</para></listitem>
+                <listitem><para>/api/latest/remotereplicationnode</para></listitem>
+                <listitem><para>/api/&lt;version&gt;/remotereplicationnode</para></listitem>
+                <listitem><para>/api/latest/remotereplicationnode/&lt;virtual host node name&gt;</para></listitem>
+                <listitem><para>/api/&lt;version&gt;/remotereplicationnode/&lt;virtual host node name&gt;</para></listitem>
+                <listitem><para>/api/latest/remotereplicationnode/&lt;virtual host node name&gt;/&lt;replication node name&gt;</para></listitem>
+                <listitem><para>/api/&lt;version&gt;/remotereplicationnode/&lt;virtual host node name&gt;/&lt;replication node name&gt;</para></listitem>
               </itemizedlist>
             </entry>
             <entry>
-              <para>Manages(creates/deletes/updates) ReplicationNode(s) on VirtualHostNode and provides the information about current values of ReplicationNode attributes</para>
+              <para>Manages(creates/deletes/updates) RemoteReplicationNode(s) on VirtualHostNode and provides the information about current values of RemoteReplicationNode attributes</para>
             </entry>
           </row>
           <row>



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org