diff options
author | Alex Rudyy <orudyy@apache.org> | 2015-03-10 22:26:52 +0000 |
---|---|---|
committer | Alex Rudyy <orudyy@apache.org> | 2015-03-10 22:26:52 +0000 |
commit | 55826cdcf93afe3856313ce6197cf5ad18d5e945 (patch) | |
tree | 9e10fb54e5e11910be86b60f982366398900df55 | |
parent | 0fcc28c303a9f3abfa8c85eb9f0a29039aa98df3 (diff) | |
download | qpid-python-55826cdcf93afe3856313ce6197cf5ad18d5e945.tar.gz |
QPID-6438: [Java Broker] Add support for POST method into REST interfaces in order to create configured objects via POST
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1665732 13f79535-47bb-0310-9956-ffa450edef68
24 files changed, 274 insertions, 310 deletions
diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java index d5f32a9d6d..0fb8938233 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/security/auth/manager/PrincipalDatabaseAuthenticationManager.java @@ -309,6 +309,10 @@ public abstract class PrincipalDatabaseAuthenticationManager<T extends Principal 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) diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java index 95bd54424f..3680e476c7 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/AbstractVirtualHost.java @@ -669,7 +669,7 @@ public abstract class AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte } 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 AbstractVirtualHost<X extends AbstractVirtualHost<X>> exte } 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())); } } diff --git a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ExchangeExistsException.java b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ExchangeExistsException.java index 109bf85aef..fe988afe61 100644 --- a/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ExchangeExistsException.java +++ b/qpid/java/broker-core/src/main/java/org/apache/qpid/server/virtualhost/ExchangeExistsException.java @@ -27,7 +27,12 @@ public class ExchangeExistsException extends RuntimeException public ExchangeExistsException(ExchangeImpl existing) { - super(existing.getName()); + this(existing.getName(), existing); + } + + public ExchangeExistsException(String message, ExchangeImpl existing) + { + super(message); _existing = existing; } diff --git a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java index 19d498e240..93ff1adb63 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java +++ b/qpid/java/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/RestServlet.java @@ -406,6 +406,13 @@ public class RestServlet extends AbstractServlet @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 AbstractServlet { 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 AbstractServlet 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 AbstractServlet 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 AbstractServlet } 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 AbstractServlet 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 AbstractServlet } } + @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"); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/metadata.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/metadata.js index 1520cb8f7a..1a9ceb7419 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/metadata.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/metadata.js @@ -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) { diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js index 746eb4bbbc..5bf5574347 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/common/util.js @@ -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; }); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAccessControlProvider.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAccessControlProvider.js index 83bf23f669..a8b2b60a75 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAccessControlProvider.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAccessControlProvider.js @@ -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 { diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAuthenticationProvider.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAuthenticationProvider.js index ccae89d6c1..d367537731 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAuthenticationProvider.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addAuthenticationProvider.js @@ -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;} - }); - - if(success === true) - { - var preferencesProviderResult = this.preferencesProviderForm.submit(encodedAuthenticationProviderName); - success = preferencesProviderResult.success; - failureReason = preferencesProviderResult.failureReason; - } + var that = this; - 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 { diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addBinding.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addBinding.js index 56950c88b0..8257b7e54c 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addBinding.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addBinding.js @@ -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; diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addExchange.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addExchange.js index c7f281b8dc..ca43eca5d3 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addExchange.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addExchange.js @@ -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; diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js index 81ce40ebe9..f658a8ec3b 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addGroupProvider.js @@ -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 { diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js index befb5df9c1..1069e2300b 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addPort.js @@ -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'); diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addQueue.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addQueue.js index 236efb2efa..da7879d671 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addQueue.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addQueue.js @@ -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; diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js index caf14d0cc8..ff672e92be 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addStore.js @@ -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 { diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addVirtualHostNodeAndVirtualHost.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addVirtualHostNodeAndVirtualHost.js index 21927ea0e5..2cba022482 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addVirtualHostNodeAndVirtualHost.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/addVirtualHostNodeAndVirtualHost.js @@ -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) { diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/PrincipalDatabaseAuthenticationManager.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/PrincipalDatabaseAuthenticationManager.js index e6f2249f65..87025adfae 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/PrincipalDatabaseAuthenticationManager.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/authenticationprovider/PrincipalDatabaseAuthenticationManager.js @@ -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; diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/group/addGroupMember.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/group/addGroupMember.js index 0a8e6a2e11..baa08d2309 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/group/addGroupMember.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/group/addGroupMember.js @@ -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; diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/GroupManagingGroupProvider.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/GroupManagingGroupProvider.js index 5788fad8af..4182b580b7 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/GroupManagingGroupProvider.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/groupprovider/GroupManagingGroupProvider.js @@ -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; diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/preferencesprovider/PreferencesProviderForm.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/preferencesprovider/PreferencesProviderForm.js index ef8273328b..099a75837b 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/preferencesprovider/PreferencesProviderForm.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/preferencesprovider/PreferencesProviderForm.js @@ -87,18 +87,26 @@ function (util, metadata, xhr, declare, array, domConstruct, win, query, json, _ { 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 }; }, diff --git a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/RestTestHelper.java b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/RestTestHelper.java index 67978a264e..2e3626eae6 100644 --- a/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/RestTestHelper.java +++ b/qpid/java/systests/src/main/java/org/apache/qpid/systest/rest/RestTestHelper.java @@ -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); diff --git a/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/GroupRestTest.java b/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/GroupRestTest.java index eeb9511289..4fc5b1a184 100644 --- a/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/GroupRestTest.java +++ b/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/GroupRestTest.java @@ -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 QpidRestTestCase 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 diff --git a/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/UserRestTest.java b/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/UserRestTest.java index 5df8a4ed9a..40eda50480 100644 --- a/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/UserRestTest.java +++ b/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/UserRestTest.java @@ -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 QpidRestTestCase } } - 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 QpidRestTestCase 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(); diff --git a/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostNodeRestTest.java b/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostNodeRestTest.java index 9569b90251..a75d04e2a5 100644 --- a/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostNodeRestTest.java +++ b/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostNodeRestTest.java @@ -126,6 +126,23 @@ public class VirtualHostNodeRestTest extends QpidRestTestCase 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 diff --git a/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java b/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java index 45cbee205d..7655601519 100644 --- a/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java +++ b/qpid/java/systests/src/test/java/org/apache/qpid/systest/rest/VirtualHostRestTest.java @@ -116,10 +116,10 @@ public class VirtualHostRestTest extends QpidRestTestCase 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 QpidRestTestCase 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 QpidRestTestCase { 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 QpidRestTestCase } 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); } |