You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2015/03/10 23:26:53 UTC

svn commit: r1665732 - in /qpid/trunk/qpid/java: broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/ broker-core/src/main/java/org/apache/qpid/server/virtualhost/ broker-plugins/management-http/src/main/java/org/apache/qpid/server/m...

Author: orudyy
Date: Tue Mar 10 22:26:52 2015
New Revision: 1665732

URL: http://svn.apache.org/r1665732
Log:
QPID-6438: [Java Broker] Add support for POST method into REST interfaces in order to create configured objects via POST

Modified:
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
    qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ExchangeExistsException.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/metadata.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAccessControlProvider.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAuthenticationProvider.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addBinding.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addExchange.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addQueue.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addVirtualHostNodeAndVirtualHost.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/PrincipalDatabaseAuthenticationManager.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/group/addGroupMember.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/GroupManagingGroupProvider.js
    qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/preferencesprovider/PreferencesProviderForm.js
    qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/RestTestHelper.java
    qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/GroupRestTest.java
    qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/UserRestTest.java
    qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostNodeRestTest.java
    qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java?rev=1665732&r1=1665731&r2=1665732&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java Tue Mar 10 22:26:52 2015
@@ -309,6 +309,10 @@ public abstract class PrincipalDatabaseA
             String username = (String) attributes.get("name");
             String password = (String) attributes.get("password");
             Principal p = new UsernamePrincipal(username);
+            if (_userMap.containsKey(p))
+            {
+                throw new IllegalArgumentException("User '" + username + "' already exists");
+            }
 
             boolean created = getPrincipalDatabase().createPrincipal(p, password.toCharArray());
             if(created)

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java?rev=1665732&r1=1665731&r2=1665732&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java Tue Mar 10 22:26:52 2015
@@ -669,7 +669,7 @@ public abstract class AbstractVirtualHos
         }
         catch (DuplicateNameException e)
         {
-            throw new QueueExistsException(getQueue(e.getName()));
+            throw new QueueExistsException(String.format("Queue with name '%s' already exists", e.getName()), getQueue(e.getName()));
         }
 
     }
@@ -742,7 +742,7 @@ public abstract class AbstractVirtualHos
         }
         catch (DuplicateNameException e)
         {
-            throw new ExchangeExistsException(getExchange(e.getName()));
+            throw new ExchangeExistsException(String.format("Exchange with name '%s' already exists", e.getName()), getExchange(e.getName()));
         }
 
     }

Modified: qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ExchangeExistsException.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ExchangeExistsException.java?rev=1665732&r1=1665731&r2=1665732&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ExchangeExistsException.java (original)
+++ qpid/trunk/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ExchangeExistsException.java Tue Mar 10 22:26:52 2015
@@ -27,7 +27,12 @@ public class ExchangeExistsException ext
 
     public ExchangeExistsException(ExchangeImpl existing)
     {
-        super(existing.getName());
+        this(existing.getName(), existing);
+    }
+
+    public ExchangeExistsException(String message, ExchangeImpl existing)
+    {
+        super(message);
         _existing = existing;
     }
 

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java?rev=1665732&r1=1665731&r2=1665732&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java Tue Mar 10 22:26:52 2015
@@ -406,6 +406,13 @@ public class RestServlet extends Abstrac
     @Override
     protected void doPutWithSubjectAndActor(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
     {
+        performCreateOrUpdate(request, response);
+    }
+
+    private void performCreateOrUpdate(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
+    {
+        boolean createOrUpdate = "PUT".equalsIgnoreCase(request.getMethod());
+
         response.setContentType("application/json");
 
         List<String> names = new ArrayList<String>();
@@ -461,6 +468,13 @@ public class RestServlet extends Abstrac
         {
             if (_hierarchy.length == 0)
             {
+                if (!createOrUpdate)
+                {
+                    sendErrorResponse(request, response,
+                            "Only object creation is allowed with POST requests. Use PUT method to update broker attributes");
+                    return;
+                }
+
                 try
                 {
                     doUpdate(getBroker(), providedObject);
@@ -484,7 +498,7 @@ public class RestServlet extends Abstrac
         Collection<ConfiguredObject>[] objects = new Collection[_hierarchy.length];
         if (_hierarchy.length == 1)
         {
-            createOrUpdate(providedObject, _hierarchy[0], getBroker(), null, request, response);
+            createOrUpdate(providedObject, _hierarchy[0], getBroker(), null, request, response, createOrUpdate);
         }
         else
         {
@@ -547,26 +561,29 @@ public class RestServlet extends Abstrac
             ConfiguredObject theParent = parents.remove(0);
             ConfiguredObject[] otherParents = parents.toArray(new ConfiguredObject[parents.size()]);
 
-            createOrUpdate(providedObject, objClass, theParent, otherParents, request, response);
+            createOrUpdate(providedObject, objClass, theParent, otherParents, request, response, createOrUpdate);
         }
-
     }
 
     private void createOrUpdate(Map<String, Object> providedObject, Class<? extends ConfiguredObject> objClass,
             ConfiguredObject theParent, ConfiguredObject[] otherParents, HttpServletRequest request,
-            HttpServletResponse response) throws IOException
+            HttpServletResponse response, boolean createOrUpdate) throws IOException
     {
         try
         {
             Collection<? extends ConfiguredObject> existingChildren = theParent.getChildren(objClass);
-            for(ConfiguredObject obj: existingChildren)
+
+            if (createOrUpdate)
             {
-                if((providedObject.containsKey("id") && String.valueOf(providedObject.get("id")).equals(obj.getId().toString()))
-                   || (obj.getName().equals(providedObject.get("name")) && equalParents(obj, otherParents, objClass)))
+                for (ConfiguredObject obj : existingChildren)
                 {
-                    doUpdate(obj, providedObject);
-                    response.setStatus(HttpServletResponse.SC_OK);
-                    return;
+                    if ((providedObject.containsKey("id") && String.valueOf(providedObject.get("id")).equals(obj.getId().toString()))
+                            || (obj.getName().equals(providedObject.get("name")) && equalParents(obj, otherParents, objClass)))
+                    {
+                        doUpdate(obj, providedObject);
+                        response.setStatus(HttpServletResponse.SC_OK);
+                        return;
+                    }
                 }
             }
 
@@ -626,11 +643,12 @@ public class RestServlet extends Abstrac
         }
         else
         {
+            String message = e.getMessage();
             if (e instanceof IllegalConfigurationException || e instanceof IllegalArgumentException)
             {
                 if (LOGGER.isDebugEnabled())
                 {
-                    LOGGER.debug(e.getClass().getSimpleName() + " processing request : " + e.getMessage());
+                    LOGGER.debug(e.getClass().getSimpleName() + " processing request : " + message);
                 }
                 else if (LOGGER.isTraceEnabled())
                 {
@@ -642,17 +660,22 @@ public class RestServlet extends Abstrac
                 LOGGER.warn("Unexpected exception processing request ", e);
             }
 
-            response.setStatus(HttpServletResponse.SC_CONFLICT);
+            sendErrorResponse(request, response, message);
 
-            response.setContentType("application/json");
-            response.setCharacterEncoding("UTF-8");
+        }
+    }
 
-            Writer out = getOutputWriter(request, response);
-            ObjectMapper mapper = new ObjectMapper();
-            mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);
-            mapper.writeValue(out, Collections.singletonMap("errorMessage", e.getMessage()));
+    private void sendErrorResponse(HttpServletRequest request, HttpServletResponse response, String message) throws IOException
+    {
+        response.setStatus(HttpServletResponse.SC_CONFLICT);
 
-        }
+        response.setContentType("application/json");
+        response.setCharacterEncoding("UTF-8");
+
+        Writer out = getOutputWriter(request, response);
+        ObjectMapper mapper = new ObjectMapper();
+        mapper.configure(SerializationConfig.Feature.INDENT_OUTPUT, true);
+        mapper.writeValue(out, Collections.singletonMap("errorMessage", message));
     }
 
     @Override
@@ -678,6 +701,12 @@ public class RestServlet extends Abstrac
         }
     }
 
+    @Override
+    protected void doPostWithSubjectAndActor(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
+    {
+        performCreateOrUpdate(request, response);
+    }
+
     private void setCachingHeadersOnResponse(HttpServletResponse response)
     {
         response.setHeader("Cache-Control","no-cache");

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/metadata.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/metadata.js?rev=1665732&r1=1665731&r2=1665732&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/metadata.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/metadata.js Tue Mar 10 22:26:52 2015
@@ -68,8 +68,12 @@ define(["dojo/_base/xhr",
      },
      implementsManagedInterface: function (category, type, managedInterfaceName)
      {
-        var managedInterfaces = this.getMetaData(category, type).managedInterfaces;
-        return array.indexOf(managedInterfaces, managedInterfaceName) >= 0 ;
+        var md = this.getMetaData(category, type);
+        if (md && md.managedInterfaces)
+        {
+            return array.indexOf(md.managedInterfaces, managedInterfaceName) >= 0 ;
+        }
+        return false;
      },
      validChildTypes: function (category, type, childCategory)
      {

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js?rev=1665732&r1=1665731&r2=1665732&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js Tue Mar 10 22:26:52 2015
@@ -791,5 +791,52 @@ define(["dojo/_base/xhr",
                 on(window, "resize", resize);
            }
 
+           util.submit = function(method, resourceUrl, data, successAction, failureAction)
+           {
+                var result = {success: true, failureReason: null};
+                var xhrArguments = {
+                    url: resourceUrl,
+                    sync: true,
+                    handleAs: "json",
+                    headers: { "Content-Type": "application/json"},
+                    load: function(x) {
+                            result.success = true;
+                            result.data = x;
+                            if (successAction)
+                            {
+                                successAction(x);
+                            }
+                          },
+                    error: function(error) {
+                             result.success = false;
+                             result.failureReason = error;
+                             if (failureAction)
+                             {
+                                 failureAction(error);
+                             }
+                             else
+                             {
+                                 util.xhrErrorHandler(error);
+                             }
+                           }
+                }
+                if (data && method != "del")
+                {
+                    xhrArguments[method + "Data"] = json.stringify(data);
+                }
+                xhr[method](xhrArguments);
+                return result;
+           }
+
+           util.post = function(resourceUrl, data, successAction, failureAction)
+           {
+                return util.submit("post", resourceUrl, data, successAction, failureAction)
+           }
+
+           util.put = function(resourceUrl, data, successAction, failureAction)
+           {
+                return util.submit("put", resourceUrl, data, successAction, failureAction)
+           }
+
            return util;
        });

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAccessControlProvider.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAccessControlProvider.js?rev=1665732&r1=1665731&r2=1665732&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAccessControlProvider.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAccessControlProvider.js Tue Mar 10 22:26:52 2015
@@ -99,30 +99,11 @@ define(["dojo/_base/lang",
             {
                 if (this.accessControlProviderForm.validate())
                 {
-                    var success = false,failureReason=null;
-
                     var accessControlProviderData = util.getFormWidgetValues(this.accessControlProviderForm, this.initialData);
                     var encodedAccessControlProviderName = encodeURIComponent(this.accessControlProviderName.value);
-
-                    xhr.put(
-                    {
-                        url: "api/latest/accesscontrolprovider/" + encodedAccessControlProviderName,
-                        sync: true,
-                        handleAs: "json",
-                        headers: { "Content-Type": "application/json"},
-                        putData: json.stringify(accessControlProviderData),
-                        load: function(x) {success = true; },
-                        error: function(error) {success = false; failureReason = error;}
-                    });
-
-                    if (success == true)
-                    {
-                        this.dialog.hide();
-                    }
-                    else
-                    {
-                        util.xhrErrorHandler(failureReason);
-                    }
+                    var that = this;
+                    util.post("api/latest/accesscontrolprovider/" + encodedAccessControlProviderName,
+                              accessControlProviderData, function(x){that.dialog.hide();});
                 }
                 else
                 {

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAuthenticationProvider.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAuthenticationProvider.js?rev=1665732&r1=1665731&r2=1665732&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAuthenticationProvider.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAuthenticationProvider.js Tue Mar 10 22:26:52 2015
@@ -155,31 +155,21 @@ define(["dojo/_base/xhr",
                     var authenticationProviderData = util.getFormWidgetValues(this.authenticationProviderForm, this.initialData);
 
                     var encodedAuthenticationProviderName = encodeURIComponent(this.authenticationProviderName.value);
-                    xhr.put({
-                        url: "api/latest/authenticationprovider/" + encodedAuthenticationProviderName,
-                        sync: true,
-                        handleAs: "json",
-                        headers: { "Content-Type": "application/json"},
-                        putData: json.stringify(authenticationProviderData),
-                        load: function(x) {success = true; },
-                        error: function(error) {success = false; failureReason = error;}
-                    });
+                    var that = this;
 
-                    if(success === true)
-                    {
-                        var preferencesProviderResult = this.preferencesProviderForm.submit(encodedAuthenticationProviderName);
-                        success = preferencesProviderResult.success;
-                        failureReason = preferencesProviderResult.failureReason;
-                    }
-
-                    if (success == true)
-                    {
-                        this.dialog.hide();
-                    }
-                    else
-                    {
-                        util.xhrErrorHandler(failureReason);
-                    }
+                    var methodName = this.initialData ? "put" : "post";
+                    util[methodName]("api/latest/authenticationprovider/" + encodedAuthenticationProviderName, authenticationProviderData,
+                     function(x){
+                        var preferencesProviderResult = that.preferencesProviderForm.submit(encodedAuthenticationProviderName);
+                        if (preferencesProviderResult.success == true)
+                        {
+                            that.dialog.hide();
+                        }
+                        else
+                        {
+                             util.xhrErrorHandler(preferencesProviderResult.failureReason);
+                        }
+                     });
                 }
                 else
                 {

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addBinding.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addBinding.js?rev=1665732&r1=1665731&r2=1665732&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addBinding.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addBinding.js Tue Mar 10 22:26:52 2015
@@ -308,30 +308,13 @@ define(["dojo/_base/connect",
 
                                     var newBinding = convertToBinding(theForm.getValues());
                                     var that = this;
-
-                                    xhr.put({url: "api/latest/binding/"+encodeURIComponent(addBinding.vhostnode)
-                                                      +"/"+encodeURIComponent(addBinding.vhost)
-                                                      +"/"+encodeURIComponent(newBinding.exchange)
-                                                      +"/"+encodeURIComponent(newBinding.queue)
-                                                      +"/"+encodeURIComponent(newBinding.name),
-                                             sync: true, handleAs: "json",
-                                             headers: { "Content-Type": "application/json"},
-                                             putData: json.toJson(newBinding),
-                                             load: function(x) {that.success = true; },
-                                             error: function(error) {that.success = false; that.failureReason = error;}});
-
-                                    if(this.success === true)
-                                    {
-                                        registry.byId("addBinding").hide();
-                                    }
-                                    else
-                                    {
-                                        util.xhrErrorHandler(this.failureReason);
-                                    }
-
+                                    var url = "api/latest/binding/"+encodeURIComponent(addBinding.vhostnode)
+                                            + "/"+encodeURIComponent(addBinding.vhost)
+                                            + "/"+encodeURIComponent(newBinding.exchange)
+                                            + "/"+encodeURIComponent(newBinding.queue)
+                                            + "/"+encodeURIComponent(newBinding.name);
+                                    util.post(url, newBinding, function(x){registry.byId("addBinding").hide();});
                                     return false;
-
-
                                 }else{
                                     alert('Form contains invalid data.  Please correct first');
                                     return false;

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addExchange.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addExchange.js?rev=1665732&r1=1665731&r2=1665732&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addExchange.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addExchange.js Tue Mar 10 22:26:52 2015
@@ -110,23 +110,10 @@ define(["dojo/_base/xhr",
 
                                     var newExchange = convertToExchange(theForm.getValues());
                                     var that = this;
-                                    xhr.put({url: "api/latest/exchange/"+encodeURIComponent(addExchange.vhostnode) +
-                                                  "/"+encodeURIComponent(addExchange.vhost) +
-                                                  "/"+encodeURIComponent(newExchange.name), sync: true, handleAs: "json",
-                                             headers: { "Content-Type": "application/json"},
-                                             putData: json.toJson(newExchange),
-                                             load: function(x) {that.success = true; },
-                                             error: function(error) {that.success = false; that.failureReason = error;}});
-
-                                    if(this.success === true)
-                                    {
-                                        registry.byId("addExchange").hide();
-                                    }
-                                    else
-                                    {
-                                        util.xhrErrorHandler(this.failureReason);
-                                    }
-
+                                    util.post("api/latest/exchange/" + encodeURIComponent(addExchange.vhostnode)
+                                            + "/" + encodeURIComponent(addExchange.vhost)
+                                            + "/" + encodeURIComponent(newExchange.name),
+                                            newExchange, function(x){ registry.byId("addExchange").hide(); });
                                     return false;
 
 

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js?rev=1665732&r1=1665731&r2=1665732&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js Tue Mar 10 22:26:52 2015
@@ -124,33 +124,9 @@ define([
 
                     var groupProviderData = util.getFormWidgetValues(this.groupProviderForm, this.initialData);
                     var encodedName = encodeURIComponent(this.groupProviderName.value);
-                    var jsonString = json.stringify(groupProviderData);
-
-                    try {
-                    xhr.put(
-                    {
-                        url: "api/latest/groupprovider/" + encodedName,
-                        sync: true,
-                        handleAs: "json",
-                        headers: { "Content-Type": "application/json"},
-                        putData: jsonString,
-                        load: function(x) {success = true; },
-                        error: function(error) {success = false; failureReason = error;}
-                    });
-                    }
-                    catch (e)
-                    {
-                    console.warn(e);
-                    }
-
-                    if (success == true)
-                    {
-                        this.dialog.hide();
-                    }
-                    else
-                    {
-                        util.xhrErrorHandler(failureReason);
-                    }
+                    var that = this;
+                    var method = this.initialData ? "put" : "post";
+                    util[method]("api/latest/groupprovider/" + encodedName, groupProviderData, function(x){that.dialog.hide();});
                 }
                 else
                 {

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js?rev=1665732&r1=1665731&r2=1665732&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js Tue Mar 10 22:26:52 2015
@@ -267,33 +267,9 @@ define(["dojo/_base/xhr",
                 alert("A trust store must be selected when requesting client certificates.");
                 return false;
               }
-              var that = this;
-
-              xhr.put({url: "api/latest/port/" + encodeURIComponent(newPort.name), sync: true, handleAs: "json",
-                headers: { "Content-Type": "application/json"},
-                putData: json.toJson(newPort),
-                load: function (x)
-                {
-                  that.success = true;
-                },
-                error: function (error)
-                {
-                  that.success = false;
-                  that.failureReason = error;
-                }});
-
-              if (this.success === true)
-              {
-                registry.byId("addPort").hide();
-              }
-              else
-              {
-                util.xhrErrorHandler(this.failureReason);
-              }
-
+              var method = registry.byId("formAddPort.name").get("disabled") ? "put" : "post";
+              util[method]("api/latest/port/" + encodeURIComponent(newPort.name), newPort, function(x){registry.byId("addPort").hide()});
               return false;
-
-
             } else
             {
               alert('Form contains invalid data.  Please correct first');

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addQueue.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addQueue.js?rev=1665732&r1=1665731&r2=1665732&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addQueue.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addQueue.js Tue Mar 10 22:26:52 2015
@@ -149,25 +149,9 @@ define(["dojo/_base/xhr",
                                 if(theForm.validate()){
 
                                     var newQueue = convertToQueue(theForm.getValues());
-                                    var that = this;
-
-                                    xhr.put({url: "api/latest/queue/"+encodeURIComponent(addQueue.vhostnode)
-                                                  +"/"+encodeURIComponent(addQueue.vhost)
-                                                  +"/"+encodeURIComponent(newQueue.name), sync: true, handleAs: "json",
-                                             headers: { "Content-Type": "application/json"},
-                                             putData: json.toJson(newQueue),
-                                             load: function(x) {that.success = true; },
-                                             error: function(error) {that.success = false; that.failureReason = error;}});
-
-                                    if(this.success === true)
-                                    {
-                                        registry.byId("addQueue").hide();
-                                    }
-                                    else
-                                    {
-                                        util.xhrErrorHandler(this.failureReason);
-                                    }
-
+                                    util.post("api/latest/queue/" + encodeURIComponent(addQueue.vhostnode)
+                                            + "/"+encodeURIComponent(addQueue.vhost) + "/" + encodeURIComponent(newQueue.name),
+                                            newQueue, function(x){registry.byId("addQueue").hide();});
                                     return false;
 
 

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js?rev=1665732&r1=1665731&r2=1665732&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js Tue Mar 10 22:26:52 2015
@@ -19,7 +19,6 @@
  *
  */
 define(["dojo/_base/lang",
-        "dojo/_base/xhr",
         "dojo/dom",
         "dojo/dom-construct",
         "dijit/registry",
@@ -45,7 +44,7 @@ define(["dojo/_base/lang",
         "dijit/layout/ContentPane",
         "dojox/layout/TableContainer",
         "dojo/domReady!"],
-    function (lang, xhr, dom, construct, registry, parser, memory, array, event, json, util, metadata, template)
+    function (lang, dom, construct, registry, parser, memory, array, event, json, util, metadata, template)
     {
         var addStore =
         {
@@ -132,33 +131,9 @@ define(["dojo/_base/lang",
                     var storeData = util.getFormWidgetValues(this.storeForm, this.initialData);
                     var encodedStoreName = encodeURIComponent(this.storeName.value);
                     var encodedCategory = encodeURIComponent(this.category.toLowerCase());
-                    var jsonString = json.stringify(storeData);
-
-                    try {
-                    xhr.put(
-                    {
-                        url: "api/latest/" + encodedCategory + "/" + encodedStoreName,
-                        sync: true,
-                        handleAs: "json",
-                        headers: { "Content-Type": "application/json"},
-                        putData: jsonString,
-                        load: function(x) {success = true; },
-                        error: function(error) {success = false; failureReason = error;}
-                    });
-                    }
-                    catch (e)
-                    {
-                    console.warn(e);
-                    }
-
-                    if (success == true)
-                    {
-                        this.dialog.hide();
-                    }
-                    else
-                    {
-                        util.xhrErrorHandler(failureReason);
-                    }
+                    var that = this;
+                    var method = this.effectiveData ? "put" : "post";
+                    util[method]("api/latest/" + encodedCategory + "/" + encodedStoreName, storeData, function(x){that.dialog.hide();});
                 }
                 else
                 {

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addVirtualHostNodeAndVirtualHost.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addVirtualHostNodeAndVirtualHost.js?rev=1665732&r1=1665731&r2=1665732&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addVirtualHostNodeAndVirtualHost.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addVirtualHostNodeAndVirtualHost.js Tue Mar 10 22:26:52 2015
@@ -18,7 +18,7 @@
  * under the License.
  *
  */
-define(["dojo/_base/xhr",
+define([
         "dojo/_base/event",
         "dojo/_base/lang",
         "dojo/_base/array",
@@ -48,7 +48,7 @@ define(["dojo/_base/xhr",
         "dojox/validate/us",
         "dojox/validate/web",
         "dojo/domReady!"],
-  function (xhr, event, lang, array, dom, domConstruct, json, parser, Memory, win, on, fobject, registry, Dialog, Button, FilteringSelect, properties, util, metadata, template)
+  function (event, lang, array, dom, domConstruct, json, parser, Memory, win, on, fobject, registry, Dialog, Button, FilteringSelect, properties, util, metadata, template)
   {
 
     var addVirtualHostNodeAndVirtualHost =
@@ -339,27 +339,9 @@ define(["dojo/_base/xhr",
           return;
         }
 
-        var success = false,failureReason=null;
-
+        var that = this;
         var encodedVirtualHostNodeName = encodeURIComponent(virtualHostNodeData.name);
-        xhr.put({
-            url: "api/latest/virtualhostnode/" + encodedVirtualHostNodeName,
-            sync: true,
-            handleAs: "json",
-            headers: { "Content-Type": "application/json"},
-            putData: json.stringify(virtualHostNodeData),
-            load: function(x) {success = true; },
-            error: function(error) {success = false; failureReason = error;}
-        });
-
-        if (success == true)
-        {
-            this.dialog.hide();
-        }
-        else
-        {
-            util.xhrErrorHandler(failureReason);
-        }
+        util.post("api/latest/virtualhostnode/" + encodedVirtualHostNodeName, virtualHostNodeData, function(x){that.dialog.hide();});
       },
       _getValues: function (form)
       {

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/PrincipalDatabaseAuthenticationManager.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/PrincipalDatabaseAuthenticationManager.js?rev=1665732&r1=1665731&r2=1665732&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/PrincipalDatabaseAuthenticationManager.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/PrincipalDatabaseAuthenticationManager.js Tue Mar 10 22:26:52 2015
@@ -202,19 +202,7 @@ define(["dojo/_base/xhr",
 
                                     var url = "api/latest/user/"+encodeURIComponent(addUser.authProvider) +
                                         "/"+encodeURIComponent(newUser.name);
-
-                                    xhr.put({url: url, sync: true, handleAs: "json",
-                                             headers: { "Content-Type": "application/json"},
-                                             putData: json.toJson(newUser),
-                                             load: function(x) {that.success = true; },
-                                             error: function(error) {that.success = false; that.failureReason = error;}});
-
-                                    if(that.success === true) {
-                                        registry.byId("addUser").hide();
-                                    } else {
-                                        util.xhrErrorHandler(this.failureReason);
-                                    }
-
+                                    util.post(url, newUser, function(x){registry.byId("addUser").hide();});
                                     return false;
 
 
@@ -260,18 +248,7 @@ define(["dojo/_base/xhr",
                             var url = "api/latest/user/"+encodeURIComponent(setPassword.authProvider) +
                                 "/"+encodeURIComponent(newUser.name);
 
-                            xhr.put({url: url, sync: true, handleAs: "json",
-                                     headers: { "Content-Type": "application/json"},
-                                     putData: json.toJson(newUser),
-                                     load: function(x) {that.success = true; },
-                                     error: function(error) {that.success = false; that.failureReason = error;}});
-
-                            if(that.success === true) {
-                                registry.byId("setPassword").hide();
-                            } else {
-                                util.xhrErrorHandler(this.failureReason);
-                            }
-
+                            util.put(url, newUser, function(x){registry.byId("setPassword").hide();});
                             return false;
 
 

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/group/addGroupMember.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/group/addGroupMember.js?rev=1665732&r1=1665731&r2=1665732&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/group/addGroupMember.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/group/addGroupMember.js Tue Mar 10 22:26:52 2015
@@ -71,22 +71,11 @@ define(["dojo/_base/xhr",
 
                                     var newGroupMember = convertToGroupMember(theForm.getValues());
                                     var that = this;
-                                    xhr.put({url: "api/latest/groupmember/"+encodeURIComponent(addGroupMember.groupProvider) +
-                                                  "/" + encodeURIComponent(addGroupMember.group) + "/" + encodeURIComponent(newGroupMember.name), sync: true, handleAs: "json",
-                                             headers: { "Content-Type": "application/json"},
-                                             putData: json.toJson(newGroupMember),
-                                             load: function(x) {that.success = true; },
-                                             error: function(error) {that.success = false; that.failureReason = error;}});
-
-                                    if(this.success === true)
-                                    {
-                                        registry.byId("addGroupMember").hide();
-                                    }
-                                    else
-                                    {
-                                        util.xhrErrorHandler(this.failureReason);
-                                    }
 
+                                    var url = "api/latest/groupmember/"+encodeURIComponent(addGroupMember.groupProvider) +
+                                              "/" + encodeURIComponent(addGroupMember.group) +
+                                              "/" + encodeURIComponent(newGroupMember.name);
+                                    util.post(url, newGroupMember, function(x){registry.byId("addGroupMember").hide();});
                                     return false;
 
 

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/GroupManagingGroupProvider.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/GroupManagingGroupProvider.js?rev=1665732&r1=1665731&r2=1665732&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/GroupManagingGroupProvider.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/GroupManagingGroupProvider.js Tue Mar 10 22:26:52 2015
@@ -177,18 +177,7 @@ define(["dojo/_base/xhr",
                                     var url = "api/latest/group/"+encodeURIComponent(addGroup.groupProvider) +
                                         "/"+encodeURIComponent(newGroup.name);
 
-                                    xhr.put({url: url, sync: true, handleAs: "json",
-                                             headers: { "Content-Type": "application/json"},
-                                             putData: json.toJson(newGroup),
-                                             load: function(x) {that.success = true; },
-                                             error: function(error) {that.success = false; that.failureReason = error;}});
-
-                                    if(that.success === true) {
-                                        registry.byId("addGroup").hide();
-                                    } else {
-                                        util.xhrErrorHandler(this.failureReason);
-                                    }
-
+                                    util.post(url, newGroup, function(x){registry.byId("addGroup").hide();});
                                     return false;
 
 

Modified: qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/preferencesprovider/PreferencesProviderForm.js
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/preferencesprovider/PreferencesProviderForm.js?rev=1665732&r1=1665731&r2=1665732&view=diff
==============================================================================
--- qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/preferencesprovider/PreferencesProviderForm.js (original)
+++ qpid/trunk/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/preferencesprovider/PreferencesProviderForm.js Tue Mar 10 22:26:52 2015
@@ -87,18 +87,26 @@ function (util, metadata, xhr, declare,
         {
             var preferencesProviderData = util.getFormWidgetValues(this.preferencesProviderForm, this.data)
             var encodedPreferencesProviderName = encodeURIComponent(this.preferencesProviderNameWidget.get("value"));
-            var success = false;
-            var failureReason = null;
-            xhr.put({
-                url: "api/latest/preferencesprovider/" + encodedAuthenticationProviderName + "/" + encodedPreferencesProviderName,
-                sync: true,
-                handleAs: "json",
-                headers: { "Content-Type": "application/json"},
-                putData: json.stringify(preferencesProviderData),
-                load: function (x) { success = true; },
-                error: function (error) { success = false; failureReason = error; }
-            });
-            return { success: success, failureReason: failureReason };
+            var url = "api/latest/preferencesprovider/" + encodedAuthenticationProviderName + "/" + encodedPreferencesProviderName;
+            if (this.data)
+            {
+                var success = false;
+                            var failureReason = null;
+                            xhr.put({
+                                url: url,
+                                sync: true,
+                                handleAs: "json",
+                                headers: { "Content-Type": "application/json"},
+                                putData: json.stringify(preferencesProviderData),
+                                load: function (x) { success = true; },
+                                error: function (error) { success = false; failureReason = error; }
+                            });
+                return { success: success, failureReason: failureReason };
+            }
+            else
+            {
+                return util.post(url, preferencesProviderData);
+            }
         }
         return { success: true, failureReason: null };
     },

Modified: qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/RestTestHelper.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/RestTestHelper.java?rev=1665732&r1=1665731&r2=1665732&view=diff
==============================================================================
--- qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/RestTestHelper.java (original)
+++ qpid/trunk/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/RestTestHelper.java Tue Mar 10 22:26:52 2015
@@ -305,7 +305,7 @@ public class RestTestHelper
     {
         HttpURLConnection connection = openManagementConnection(
                 "groupmember/" + encodeAsUTF(groupProviderName) + "/"+ encodeAsUTF(groupName) + "/" +  encodeAsUTF(memberName),
-                "PUT");
+                "POST");
 
         Map<String, Object> groupMemberData = new HashMap<String, Object>();
         // TODO add type
@@ -358,7 +358,7 @@ public class RestTestHelper
     {
         HttpURLConnection connection = openManagementConnection(
                 "group/" + encodeAsUTF(groupProviderName) + "/"+ encodeAsUTF(groupName),
-                "PUT");
+                "POST");
 
         Map<String, Object> groupData = new HashMap<String, Object>();
         writeJsonRequest(connection, groupData);

Modified: qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/GroupRestTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/GroupRestTest.java?rev=1665732&r1=1665731&r2=1665732&view=diff
==============================================================================
--- qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/GroupRestTest.java (original)
+++ qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/GroupRestTest.java Tue Mar 10 22:26:52 2015
@@ -20,8 +20,10 @@
  */
 package org.apache.qpid.systest.rest;
 
+import javax.servlet.http.HttpServletResponse;
 import java.io.File;
 import java.io.FileOutputStream;
+import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
@@ -72,15 +74,31 @@ public class GroupRestTest extends QpidR
         assertEquals(EXISTING_MEMBER, (String)member1.get(GroupMember.NAME));
     }
 
-    public void testCreateNewMemberOfGroup() throws Exception
+    public void testCreateNewMemberByPut() throws Exception
     {
         Map<String, Object> group = getRestTestHelper().getJsonAsSingletonList("group/" + FILE_GROUP_MANAGER + "/myGroup");
         getRestTestHelper().assertNumberOfGroupMembers(group, 1);
 
-        getRestTestHelper().createNewGroupMember(FILE_GROUP_MANAGER, GROUP_NAME, NEW_MEMBER);
+        String url = "groupmember/" + FILE_GROUP_MANAGER + "/"+ GROUP_NAME + "/" +  NEW_MEMBER;
+        getRestTestHelper().submitRequest(url, "PUT", Collections.<String, Object>emptyMap(), HttpServletResponse.SC_CREATED);
 
-        group = getRestTestHelper().getJsonAsSingletonList("group/" + FILE_GROUP_MANAGER + "/myGroup");
-        getRestTestHelper().assertNumberOfGroupMembers(group, 2);
+        Map<String, Object> member = getRestTestHelper().getJsonAsSingletonList(url);
+        assertEquals("Unexpected group name", NEW_MEMBER, member.get(GroupMember.NAME));
+    }
+
+    public void testCreateNewMemberByPost() throws Exception
+    {
+        Map<String, Object> group = getRestTestHelper().getJsonAsSingletonList("group/" + FILE_GROUP_MANAGER + "/myGroup");
+        getRestTestHelper().assertNumberOfGroupMembers(group, 1);
+
+        String url = "groupmember/" + FILE_GROUP_MANAGER + "/"+ GROUP_NAME + "/" +  NEW_MEMBER;
+        getRestTestHelper().submitRequest(url, "POST", Collections.<String, Object>emptyMap(), HttpServletResponse.SC_CREATED);
+
+        Map<String, Object> member = getRestTestHelper().getJsonAsSingletonList(url);
+        assertEquals("Unexpected group name", NEW_MEMBER, member.get(GroupMember.NAME));
+
+        // verify that second creation request by POST fails
+        getRestTestHelper().submitRequest(url, "POST", Collections.<String, Object>emptyMap(), HttpServletResponse.SC_CONFLICT);
     }
 
     public void testRemoveMemberFromGroup() throws Exception

Modified: qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/UserRestTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/UserRestTest.java?rev=1665732&r1=1665731&r2=1665732&view=diff
==============================================================================
--- qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/UserRestTest.java (original)
+++ qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/UserRestTest.java Tue Mar 10 22:26:52 2015
@@ -20,6 +20,8 @@
  */
 package org.apache.qpid.systest.rest;
 
+import javax.servlet.http.HttpServletResponse;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -65,7 +67,7 @@ public class UserRestTest extends QpidRe
         }
     }
 
-    public void testPut() throws Exception
+    public void testCreateUserByPut() throws Exception
     {
         String userName = getTestName();
         getRestTestHelper().createOrUpdateUser(userName, "newPassword");
@@ -76,6 +78,24 @@ public class UserRestTest extends QpidRe
         assertEquals("Unexpected user name", userName, userDetails.get(User.NAME));
     }
 
+    public void testCreateUserByPost() throws Exception
+    {
+        String userName = getTestName();
+
+        Map<String,Object> userAttributes = new HashMap<>();
+        userAttributes.put("password", "newPassword");
+
+        String url = "user/" + TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER + "/" + userName;
+        getRestTestHelper().submitRequest(url, "POST", userAttributes, HttpServletResponse.SC_CREATED);
+
+        Map<String, Object> userDetails = getRestTestHelper().getJsonAsSingletonList(url);
+        assertUser(userDetails);
+        assertEquals("Unexpected user name", userName, userDetails.get(User.NAME));
+
+        // verify that second create request fails
+        getRestTestHelper().submitRequest(url, "POST", userAttributes, HttpServletResponse.SC_CONFLICT);
+    }
+
     public void testDelete() throws Exception
     {
         String userName = getTestName();

Modified: qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostNodeRestTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostNodeRestTest.java?rev=1665732&r1=1665731&r2=1665732&view=diff
==============================================================================
--- qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostNodeRestTest.java (original)
+++ qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostNodeRestTest.java Tue Mar 10 22:26:52 2015
@@ -126,6 +126,23 @@ public class VirtualHostNodeRestTest  ex
         assertEquals(newDescription, virtualhostNode.get(VirtualHostNode.DESCRIPTION));
     }
 
+    public void testCreateVirtualHostNodeByPost() throws Exception
+    {
+        String nodeName = getTestName();
+        Map<String, Object> nodeData = new HashMap<>();
+        nodeData.put(VirtualHostNode.NAME, nodeName);
+        nodeData.put(VirtualHostNode.TYPE, getTestProfileVirtualHostNodeType());
+
+        String url = "virtualhostnode/" + nodeName;
+        getRestTestHelper().submitRequest(url, "POST", nodeData, HttpServletResponse.SC_CREATED);
+
+        Map<String, Object> virtualhostNode = getRestTestHelper().getJsonAsSingletonList(url);
+        Asserts.assertVirtualHostNode(nodeName, virtualhostNode);
+
+        // verify that second create request fails
+        getRestTestHelper().submitRequest(url, "POST", nodeData, HttpServletResponse.SC_CONFLICT);
+    }
+
     private void createAndDeleteVirtualHostNode(final String virtualhostNodeType,
                                                 final String nodeName,
                                                 final File storePathAsFile) throws Exception

Modified: qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java?rev=1665732&r1=1665731&r2=1665732&view=diff
==============================================================================
--- qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java (original)
+++ qpid/trunk/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java Tue Mar 10 22:26:52 2015
@@ -116,10 +116,10 @@ public class VirtualHostRestTest extends
         Asserts.assertConnection(connections.get(0), _connection);
     }
 
-    public void testPutCreateProvidedVirtualHost() throws Exception
+    public void testCreateProvidedVirtualHost() throws Exception
     {
         String hostName = getTestName();
-        createVirtualHost(hostName, ProvidedStoreVirtualHostImpl.VIRTUAL_HOST_TYPE);
+        createVirtualHost(hostName, ProvidedStoreVirtualHostImpl.VIRTUAL_HOST_TYPE, "PUT");
 
         Map<String, Object> hostDetails = getRestTestHelper().getJsonAsSingletonList("virtualhost/" + EMPTY_VIRTUALHOSTNODE_NAME + "/" + hostName);
         Asserts.assertVirtualHost(hostName, hostDetails);
@@ -127,7 +127,7 @@ public class VirtualHostRestTest extends
         assertNewVirtualHost(hostDetails);
     }
 
-    public void testPutCreateVirtualHost() throws Exception
+    public void testCreateVirtualHostByPut() throws Exception
     {
         String hostName = getTestName();
         String vhnType = getTestProfileVirtualHostNodeType();
@@ -135,13 +135,36 @@ public class VirtualHostRestTest extends
         {
             vhnType = DerbyVirtualHostImpl.VIRTUAL_HOST_TYPE;
         }
-        createVirtualHost(hostName, vhnType);
+        createVirtualHost(hostName, vhnType, "PUT");
         Map<String, Object> hostDetails = getRestTestHelper().getJsonAsSingletonList("virtualhost/" + EMPTY_VIRTUALHOSTNODE_NAME + "/" + hostName);
         Asserts.assertVirtualHost(hostName, hostDetails);
 
         assertNewVirtualHost(hostDetails);
     }
 
+    public void testCreateVirtualHostByPost() throws Exception
+    {
+        String hostName = getTestName();
+        String type = getTestProfileVirtualHostNodeType();
+        if (JsonVirtualHostNodeImpl.VIRTUAL_HOST_NODE_TYPE.equals(type))
+        {
+            type = DerbyVirtualHostImpl.VIRTUAL_HOST_TYPE;
+        }
+        Map<String, Object> data = new HashMap<>();
+        data.put(VirtualHost.NAME, hostName);
+        data.put(VirtualHost.TYPE, type);
+
+        String url = "virtualhost/" + EMPTY_VIRTUALHOSTNODE_NAME + "/" + hostName;
+        getRestTestHelper().submitRequest(url, "POST", data, HttpServletResponse.SC_CREATED);
+
+        Map<String, Object> hostDetails = getRestTestHelper().getJsonAsSingletonList(url);
+        Asserts.assertVirtualHost(hostName, hostDetails);
+        assertNewVirtualHost(hostDetails);
+
+        // verify second create request fails
+        getRestTestHelper().submitRequest(url, "POST", data, HttpServletResponse.SC_CONFLICT);
+    }
+
     public void testDeleteHost() throws Exception
     {
         getRestTestHelper().submitRequest("virtualhost/" + TEST3_VIRTUALHOST + "/" + TEST3_VIRTUALHOST,
@@ -576,14 +599,14 @@ public class VirtualHostRestTest extends
     }
 
     private void createVirtualHost(final String virtualHostName,
-                                   final String virtualHostType) throws IOException
+                                   final String virtualHostType, String method) throws IOException
     {
         Map<String, Object> virtualhostData = new HashMap<>();
         virtualhostData.put(VirtualHost.NAME, virtualHostName);
         virtualhostData.put(VirtualHost.TYPE, virtualHostType);
 
         getRestTestHelper().submitRequest("virtualhost/" + EMPTY_VIRTUALHOSTNODE_NAME + "/" + virtualHostName,
-                                          "PUT",
+                                          method,
                                           virtualhostData,
                                           HttpServletResponse.SC_CREATED);
     }



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