diff options
| author | Alex Rudyy <orudyy@apache.org> | 2015-03-13 09:21:16 +0000 |
|---|---|---|
| committer | Alex Rudyy <orudyy@apache.org> | 2015-03-13 09:21:16 +0000 |
| commit | 1e7ac2945fbbc185d03e3a1411065b077da80d67 (patch) | |
| tree | 330227e9d4243307df07b1f19f80e23c3b895ce5 /qpid/java | |
| parent | 7b2de58298ec526db3025f6e40d032b35ba926c1 (diff) | |
| download | qpid-python-1e7ac2945fbbc185d03e3a1411065b077da80d67.tar.gz | |
QPID-6438: [Java Broker] Extend REST interfaces to result in errors when object already exist on create and when object does not exist on update
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1666380 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java')
23 files changed, 237 insertions, 207 deletions
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 bd144d3009..9387d703be 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 @@ -412,15 +412,16 @@ public class RestServlet extends AbstractServlet 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>(); String[] pathInfoElements = getPathInfoElements(request); + + boolean parentRequest = false; if (pathInfoElements != null) { - if (pathInfoElements.length != _hierarchy.length) + parentRequest = _hierarchy.length > 0 && pathInfoElements.length == _hierarchy.length - 1; + if (pathInfoElements.length != _hierarchy.length && !parentRequest) { throw new IllegalArgumentException("Path to object to create must be fully specified. " + "Found " @@ -432,6 +433,10 @@ public class RestServlet extends AbstractServlet } names.addAll(Arrays.asList(pathInfoElements)); } + else + { + parentRequest = _hierarchy.length == 1; + } Map<String, Object> providedObject; @@ -469,16 +474,9 @@ 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); + getBroker().setAttributes(providedObject); response.setStatus(HttpServletResponse.SC_OK); } catch (RuntimeException e) @@ -487,19 +485,22 @@ public class RestServlet extends AbstractServlet } return; } - else + else if (!parentRequest) { throw new ServletException("Cannot identify request target object"); } } - providedObject.put("name", names.get(names.size() - 1)); + if (!parentRequest) + { + providedObject.put("name", names.get(names.size() - 1)); + } @SuppressWarnings("unchecked") Collection<ConfiguredObject>[] objects = new Collection[_hierarchy.length]; if (_hierarchy.length == 1) { - createOrUpdate(providedObject, _hierarchy[0], getBroker(), null, request, response, createOrUpdate); + createOrUpdate(providedObject, _hierarchy[0], getBroker(), null, request, response, parentRequest); } else { @@ -562,30 +563,38 @@ 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); + createOrUpdate(providedObject, objClass, theParent, otherParents, request, response, parentRequest); } } private void createOrUpdate(Map<String, Object> providedObject, Class<? extends ConfiguredObject> objClass, ConfiguredObject theParent, ConfiguredObject[] otherParents, HttpServletRequest request, - HttpServletResponse response, boolean createOrUpdate) throws IOException + HttpServletResponse response, boolean parentRequest) throws IOException { try { Collection<? extends ConfiguredObject> existingChildren = theParent.getChildren(objClass); - if (createOrUpdate) + if (!parentRequest) { for (ConfiguredObject obj : existingChildren) { 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); + obj.setAttributes(providedObject); response.setStatus(HttpServletResponse.SC_OK); return; } } + + if ("POST".equalsIgnoreCase(request.getMethod())) + { + sendErrorResponse(request, response, HttpServletResponse.SC_NOT_FOUND, "Object with " + + (providedObject.containsKey("id") ? " id '" + providedObject.get("id") : " name '" + providedObject.get("name")) + + "' does not exist!" ); + return; + } } theParent.createChild(objClass, providedObject, otherParents); @@ -597,11 +606,6 @@ public class RestServlet extends AbstractServlet } } - private void doUpdate(ConfiguredObject obj, Map<String, Object> providedObject) - { - obj.setAttributes(providedObject); - } - private boolean equalParents(ConfiguredObject obj, ConfiguredObject[] otherParents, Class<? extends ConfiguredObject> objClass) { if(otherParents == null || otherParents.length == 0) @@ -644,6 +648,7 @@ public class RestServlet extends AbstractServlet } else { + int responseCode = HttpServletResponse.SC_CONFLICT; String message = e.getMessage(); if (e instanceof IllegalConfigurationException || e instanceof IllegalArgumentException) { @@ -661,14 +666,15 @@ public class RestServlet extends AbstractServlet LOGGER.warn("Unexpected exception processing request ", e); } - sendErrorResponse(request, response, message); + + sendErrorResponse(request, response, responseCode, message); } } - private void sendErrorResponse(HttpServletRequest request, HttpServletResponse response, String message) throws IOException + private void sendErrorResponse(HttpServletRequest request, HttpServletResponse response, int responseCode, String message) throws IOException { - response.setStatus(HttpServletResponse.SC_CONFLICT); + response.setStatus(responseCode); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); 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 a8b2b60a75..d961a31e52 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 @@ -100,10 +100,8 @@ define(["dojo/_base/lang", if (this.accessControlProviderForm.validate()) { var accessControlProviderData = util.getFormWidgetValues(this.accessControlProviderForm, this.initialData); - var encodedAccessControlProviderName = encodeURIComponent(this.accessControlProviderName.value); var that = this; - util.post("api/latest/accesscontrolprovider/" + encodedAccessControlProviderName, - accessControlProviderData, function(x){that.dialog.hide();}); + util.post("api/latest/accesscontrolprovider", 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 d367537731..3d85239789 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 @@ -150,15 +150,17 @@ define(["dojo/_base/xhr", { if(this.authenticationProviderForm.validate() && this.preferencesProviderForm.validate()) { - var success = false,failureReason=null; - var authenticationProviderData = util.getFormWidgetValues(this.authenticationProviderForm, this.initialData); - var encodedAuthenticationProviderName = encodeURIComponent(this.authenticationProviderName.value); var that = this; - - var methodName = this.initialData ? "put" : "post"; - util[methodName]("api/latest/authenticationprovider/" + encodedAuthenticationProviderName, authenticationProviderData, + var encodedAuthenticationProviderName = encodeURIComponent(this.authenticationProviderName.value); + var url = "api/latest/authenticationprovider"; + if (this.initialData && this.initialData.id) + { + // update request + url += "/" + encodedAuthenticationProviderName; + } + util.post(url, authenticationProviderData, function(x){ var preferencesProviderResult = that.preferencesProviderForm.submit(encodedAuthenticationProviderName); if (preferencesProviderResult.success == true) 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 8257b7e54c..253861b5c5 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 @@ -311,8 +311,7 @@ define(["dojo/_base/connect", var url = "api/latest/binding/"+encodeURIComponent(addBinding.vhostnode) + "/"+encodeURIComponent(addBinding.vhost) + "/"+encodeURIComponent(newBinding.exchange) - + "/"+encodeURIComponent(newBinding.queue) - + "/"+encodeURIComponent(newBinding.name); + + "/"+encodeURIComponent(newBinding.queue); util.post(url, newBinding, function(x){registry.byId("addBinding").hide();}); return false; }else{ 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 ca43eca5d3..0385768889 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 @@ -111,8 +111,7 @@ define(["dojo/_base/xhr", var newExchange = convertToExchange(theForm.getValues()); var that = this; util.post("api/latest/exchange/" + encodeURIComponent(addExchange.vhostnode) - + "/" + encodeURIComponent(addExchange.vhost) - + "/" + encodeURIComponent(newExchange.name), + + "/" + encodeURIComponent(addExchange.vhost), 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 f658a8ec3b..b5491b4a6e 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 @@ -120,13 +120,17 @@ define([ { if (this.groupProviderForm.validate()) { - var success = false,failureReason=null; - var groupProviderData = util.getFormWidgetValues(this.groupProviderForm, this.initialData); - var encodedName = encodeURIComponent(this.groupProviderName.value); + var that = this; - var method = this.initialData ? "put" : "post"; - util[method]("api/latest/groupprovider/" + encodedName, groupProviderData, function(x){that.dialog.hide();}); + var url = "api/latest/groupprovider"; + if (this.initialData) + { + // update request + url += "/" + encodeURIComponent(this.groupProviderName.value) + } + + util.post( url,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 1069e2300b..aa3e43d604 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,8 +267,13 @@ define(["dojo/_base/xhr", alert("A trust store must be selected when requesting client certificates."); return false; } - 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()}); + var url = "api/latest/port"; + if (registry.byId("formAddPort.name").get("disabled")) + { + // update request + url += "/" + encodeURIComponent(newPort.name); + } + util.post(url, newPort, function(x){registry.byId("addPort").hide()}); return false; } else { 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 da7879d671..8b2c60933d 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 @@ -150,7 +150,7 @@ define(["dojo/_base/xhr", var newQueue = convertToQueue(theForm.getValues()); util.post("api/latest/queue/" + encodeURIComponent(addQueue.vhostnode) - + "/"+encodeURIComponent(addQueue.vhost) + "/" + encodeURIComponent(newQueue.name), + + "/"+encodeURIComponent(addQueue.vhost), 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 ff672e92be..f0bdb0cefa 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 @@ -129,11 +129,15 @@ define(["dojo/_base/lang", var success = false,failureReason=null; var storeData = util.getFormWidgetValues(this.storeForm, this.initialData); - var encodedStoreName = encodeURIComponent(this.storeName.value); - var encodedCategory = encodeURIComponent(this.category.toLowerCase()); var that = this; - var method = this.effectiveData ? "put" : "post"; - util[method]("api/latest/" + encodedCategory + "/" + encodedStoreName, storeData, function(x){that.dialog.hide();}); + var url = "api/latest/" + encodeURIComponent(this.category.toLowerCase()); + + if (this.effectiveData) + { + // update request + url += "/" + encodeURIComponent(this.storeName.value); + } + util.post(url, 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 2cba022482..9131df0582 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 @@ -340,8 +340,7 @@ define([ } var that = this; - var encodedVirtualHostNodeName = encodeURIComponent(virtualHostNodeData.name); - util.post("api/latest/virtualhostnode/" + encodedVirtualHostNodeName, virtualHostNodeData, function(x){that.dialog.hide();}); + util.post("api/latest/virtualhostnode", 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 87025adfae..8eaaa0e463 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 @@ -200,8 +200,7 @@ define(["dojo/_base/xhr", var newUser = convertToUser(theForm.getValues()); - var url = "api/latest/user/"+encodeURIComponent(addUser.authProvider) + - "/"+encodeURIComponent(newUser.name); + var url = "api/latest/user/"+encodeURIComponent(addUser.authProvider); util.post(url, newUser, function(x){registry.byId("addUser").hide();}); return false; @@ -248,7 +247,7 @@ define(["dojo/_base/xhr", var url = "api/latest/user/"+encodeURIComponent(setPassword.authProvider) + "/"+encodeURIComponent(newUser.name); - util.put(url, newUser, function(x){registry.byId("setPassword").hide();}); + util.post(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/editBroker.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editBroker.js index 08a4a84d47..66eb907c69 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editBroker.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editBroker.js @@ -128,25 +128,8 @@ define(["dojo/_base/xhr", data["context"] = context; } - var success = false,failureReason=null; - xhr.put({ - url: this.query, - sync: true, - handleAs: "json", - headers: { "Content-Type": "application/json"}, - putData: json.stringify(data), - 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(this.query, data, function(x){that.dialog.hide()}) } else { diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editQueue.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editQueue.js index 91fc9891cf..cf3f171536 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editQueue.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editQueue.js @@ -163,25 +163,8 @@ define(["dojo/_base/xhr", { data["context"] = context; } - var success = false,failureReason=null; - xhr.put({ - url: this.query, - sync: true, - handleAs: "json", - headers: { "Content-Type": "application/json"}, - putData: json.stringify(data), - 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(this.query, data, function(x){that.dialog.hide()}); } else { diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHost.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHost.js index b47052b546..cf038826ae 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHost.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHost.js @@ -128,25 +128,8 @@ define(["dojo/_base/xhr", { data["context"] = context; } - var success = false,failureReason=null; - xhr.put({ - url: this.query, - sync: true, - handleAs: "json", - headers: { "Content-Type": "application/json"}, - putData: json.stringify(data), - 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(this.query, data, function(x){ that.dialog.hide();} ); } else { diff --git a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHostNode.js b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHostNode.js index b5a7edab2d..c9dc9d2029 100644 --- a/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHostNode.js +++ b/qpid/java/broker-plugins/management-http/src/main/java/resources/js/qpid/management/editVirtualHostNode.js @@ -120,25 +120,8 @@ define(["dojo/_base/xhr", { data["context"] = context; } - var success = false,failureReason=null; - xhr.put({ - url: this.query, - sync: true, - handleAs: "json", - headers: { "Content-Type": "application/json"}, - putData: json.stringify(data), - 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(this.query, data, function(x){ that.dialog.hide();} ); } else { 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 baa08d2309..e653eb8ac1 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 @@ -73,8 +73,7 @@ define(["dojo/_base/xhr", var that = this; var url = "api/latest/groupmember/"+encodeURIComponent(addGroupMember.groupProvider) + - "/" + encodeURIComponent(addGroupMember.group) + - "/" + encodeURIComponent(newGroupMember.name); + "/" + encodeURIComponent(addGroupMember.group); 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 4182b580b7..418e04d34c 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 @@ -173,10 +173,7 @@ define(["dojo/_base/xhr", var newGroup = convertToGroup(theForm.getValues()); - - var url = "api/latest/group/"+encodeURIComponent(addGroup.groupProvider) + - "/"+encodeURIComponent(newGroup.name); - + var url = "api/latest/group/"+encodeURIComponent(addGroup.groupProvider); 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 099a75837b..994c748803 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,26 +87,13 @@ 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 url = "api/latest/preferencesprovider/" + encodedAuthenticationProviderName + "/" + encodedPreferencesProviderName; + var url = "api/latest/preferencesprovider/" + encodedAuthenticationProviderName; 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); + // update request + url += "/" + encodedPreferencesProviderName; } + 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 e125ddb772..db89f39953 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 @@ -307,7 +307,7 @@ public class RestTestHelper { HttpURLConnection connection = openManagementConnection( "groupmember/" + encodeAsUTF(groupProviderName) + "/"+ encodeAsUTF(groupName) + "/" + encodeAsUTF(memberName), - "POST"); + "PUT"); Map<String, Object> groupMemberData = new HashMap<String, Object>(); // TODO add type @@ -360,7 +360,7 @@ public class RestTestHelper { HttpURLConnection connection = openManagementConnection( "group/" + encodeAsUTF(groupProviderName) + "/"+ encodeAsUTF(groupName), - "POST"); + "PUT"); 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 4fc5b1a184..d066d106ff 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 @@ -74,7 +74,7 @@ public class GroupRestTest extends QpidRestTestCase assertEquals(EXISTING_MEMBER, (String)member1.get(GroupMember.NAME)); } - public void testCreateNewMemberByPut() throws Exception + public void testCreateNewMemberByPutUsingMemberURI() throws Exception { Map<String, Object> group = getRestTestHelper().getJsonAsSingletonList("group/" + FILE_GROUP_MANAGER + "/myGroup"); getRestTestHelper().assertNumberOfGroupMembers(group, 1); @@ -86,19 +86,36 @@ public class GroupRestTest extends QpidRestTestCase assertEquals("Unexpected group name", NEW_MEMBER, member.get(GroupMember.NAME)); } - public void testCreateNewMemberByPost() throws Exception + public void testCreateNewMemberByPostUsingParentURI() 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); + String url = "groupmember/" + FILE_GROUP_MANAGER + "/"+ GROUP_NAME; + Map<String, Object> data = Collections.<String, Object>singletonMap("name", NEW_MEMBER); + getRestTestHelper().submitRequest(url, "POST", data, HttpServletResponse.SC_CREATED); - Map<String, Object> member = getRestTestHelper().getJsonAsSingletonList(url); + Map<String, Object> member = getRestTestHelper().getJsonAsSingletonList(url + "/" + NEW_MEMBER); + assertEquals("Unexpected group name", NEW_MEMBER, member.get(GroupMember.NAME)); + + // verify that second creation request fails + getRestTestHelper().submitRequest(url, "POST", data, HttpServletResponse.SC_CONFLICT); + } + + public void testCreateNewMemberByPutUsingParentURI() 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; + Map<String, Object> data = Collections.<String, Object>singletonMap("name", NEW_MEMBER); + getRestTestHelper().submitRequest(url, "PUT", data, HttpServletResponse.SC_CREATED); + + Map<String, Object> member = getRestTestHelper().getJsonAsSingletonList(url + "/" + NEW_MEMBER); 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); + // verify that second creation request fails + getRestTestHelper().submitRequest(url, "PUT", data, 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 40eda50480..506f39a181 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 @@ -67,7 +67,7 @@ public class UserRestTest extends QpidRestTestCase } } - public void testCreateUserByPut() throws Exception + public void testCreateUserByPutUsingUserURI() throws Exception { String userName = getTestName(); getRestTestHelper().createOrUpdateUser(userName, "newPassword"); @@ -78,17 +78,18 @@ public class UserRestTest extends QpidRestTestCase assertEquals("Unexpected user name", userName, userDetails.get(User.NAME)); } - public void testCreateUserByPost() throws Exception + public void testCreateUserByPostUsingParentURI() throws Exception { String userName = getTestName(); Map<String,Object> userAttributes = new HashMap<>(); userAttributes.put("password", "newPassword"); + userAttributes.put("name", userName); - String url = "user/" + TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER + "/" + userName; + String url = "user/" + TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER; getRestTestHelper().submitRequest(url, "POST", userAttributes, HttpServletResponse.SC_CREATED); - Map<String, Object> userDetails = getRestTestHelper().getJsonAsSingletonList(url); + Map<String, Object> userDetails = getRestTestHelper().getJsonAsSingletonList(url+ "/" + userName); assertUser(userDetails); assertEquals("Unexpected user name", userName, userDetails.get(User.NAME)); @@ -96,6 +97,40 @@ public class UserRestTest extends QpidRestTestCase getRestTestHelper().submitRequest(url, "POST", userAttributes, HttpServletResponse.SC_CONFLICT); } + public void testCreateUserByPutUsingParentURI() throws Exception + { + String userName = getTestName(); + + Map<String,Object> userAttributes = new HashMap<>(); + userAttributes.put("password", "newPassword"); + userAttributes.put("name", userName); + + String url = "user/" + TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER; + getRestTestHelper().submitRequest(url, "PUT", userAttributes, HttpServletResponse.SC_CREATED); + + Map<String, Object> userDetails = getRestTestHelper().getJsonAsSingletonList(url+ "/" + userName); + assertUser(userDetails); + assertEquals("Unexpected user name", userName, userDetails.get(User.NAME)); + + // verify that second create request fails + getRestTestHelper().submitRequest(url, "PUT", userAttributes, HttpServletResponse.SC_CONFLICT); + } + + public void testSetPasswordForNonExistingUserByPostFails() throws Exception + { + String userName = getTestName(); + + Map<String,Object> userAttributes = new HashMap<>(); + userAttributes.put("password", "newPassword"); + userAttributes.put("name", userName); + + String url = "user/" + TestBrokerConfiguration.ENTRY_NAME_AUTHENTICATION_PROVIDER + "/" + userName; + getRestTestHelper().submitRequest(url, "POST", userAttributes, HttpServletResponse.SC_NOT_FOUND); + + List<Map<String, Object>> userDetails = getRestTestHelper().getJsonAsList(url); + assertTrue("User should not be created", userDetails.isEmpty()); + } + 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 a75d04e2a5..69db2747c7 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,23 +126,40 @@ public class VirtualHostNodeRestTest extends QpidRestTestCase assertEquals(newDescription, virtualhostNode.get(VirtualHostNode.DESCRIPTION)); } - public void testCreateVirtualHostNodeByPost() throws Exception + public void testCreateVirtualHostNodeByPostUsingParentURI() 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; + String url = "virtualhostnode"; getRestTestHelper().submitRequest(url, "POST", nodeData, HttpServletResponse.SC_CREATED); - Map<String, Object> virtualhostNode = getRestTestHelper().getJsonAsSingletonList(url); + Map<String, Object> virtualhostNode = getRestTestHelper().getJsonAsSingletonList(url + "/" + nodeName); Asserts.assertVirtualHostNode(nodeName, virtualhostNode); // verify that second create request fails getRestTestHelper().submitRequest(url, "POST", nodeData, HttpServletResponse.SC_CONFLICT); } + public void testCreateVirtualHostNodeByPutUsingParentURI() throws Exception + { + String nodeName = getTestName(); + Map<String, Object> nodeData = new HashMap<>(); + nodeData.put(VirtualHostNode.NAME, nodeName); + nodeData.put(VirtualHostNode.TYPE, getTestProfileVirtualHostNodeType()); + + String url = "virtualhostnode"; + getRestTestHelper().submitRequest(url, "PUT", nodeData, HttpServletResponse.SC_CREATED); + + Map<String, Object> virtualhostNode = getRestTestHelper().getJsonAsSingletonList(url + "/" + nodeName); + Asserts.assertVirtualHostNode(nodeName, virtualhostNode); + + // verify that second create request fails + getRestTestHelper().submitRequest(url, "PUT", 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 7655601519..15be0c8196 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 @@ -31,7 +31,6 @@ import javax.jms.Destination; import javax.jms.Session; import javax.servlet.http.HttpServletResponse; -import org.apache.qpid.server.virtualhost.ProvidedStoreVirtualHostImpl; import org.apache.qpid.client.AMQConnection; import org.apache.qpid.server.model.Exchange; import org.apache.qpid.server.model.Queue; @@ -118,8 +117,8 @@ public class VirtualHostRestTest extends QpidRestTestCase public void testCreateProvidedVirtualHost() throws Exception { - String hostName = getTestName(); - createVirtualHost(hostName, ProvidedStoreVirtualHostImpl.VIRTUAL_HOST_TYPE, "PUT"); + Map<String, Object> requestData = submitVirtualHost(true, "PUT", HttpServletResponse.SC_CREATED); + String hostName = (String)requestData.get(VirtualHost.NAME); Map<String, Object> hostDetails = getRestTestHelper().getJsonAsSingletonList("virtualhost/" + EMPTY_VIRTUALHOSTNODE_NAME + "/" + hostName); Asserts.assertVirtualHost(hostName, hostDetails); @@ -127,42 +126,53 @@ public class VirtualHostRestTest extends QpidRestTestCase assertNewVirtualHost(hostDetails); } - public void testCreateVirtualHostByPut() throws Exception + public void testCreateVirtualHostByPutUsingParentURI() throws Exception { - String hostName = getTestName(); - String vhnType = getTestProfileVirtualHostNodeType(); - if (JsonVirtualHostNodeImpl.VIRTUAL_HOST_NODE_TYPE.equals(vhnType)) - { - vhnType = DerbyVirtualHostImpl.VIRTUAL_HOST_TYPE; - } - createVirtualHost(hostName, vhnType, "PUT"); - Map<String, Object> hostDetails = getRestTestHelper().getJsonAsSingletonList("virtualhost/" + EMPTY_VIRTUALHOSTNODE_NAME + "/" + hostName); - Asserts.assertVirtualHost(hostName, hostDetails); + Map<String, Object> data = submitVirtualHost(true, "PUT", HttpServletResponse.SC_CREATED); + String hostName = (String)data.get(VirtualHost.NAME); + String url = "virtualhost/" + EMPTY_VIRTUALHOSTNODE_NAME + "/" + hostName; + Map<String, Object> hostDetails = getRestTestHelper().getJsonAsSingletonList(url); + Asserts.assertVirtualHost(hostName, hostDetails); assertNewVirtualHost(hostDetails); + + // verify second create request fails + submitVirtualHost(true, "PUT", HttpServletResponse.SC_CONFLICT); } - public void testCreateVirtualHostByPost() throws Exception + public void testCreateVirtualHostByPostUsingParentURI() 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> data = submitVirtualHost(true, "POST", HttpServletResponse.SC_CREATED); + String hostName = (String)data.get(VirtualHost.NAME); - Map<String, Object> hostDetails = getRestTestHelper().getJsonAsSingletonList(url); + Map<String, Object> hostDetails = getRestTestHelper().getJsonAsSingletonList("virtualhost/" + EMPTY_VIRTUALHOSTNODE_NAME + "/" + hostName); Asserts.assertVirtualHost(hostName, hostDetails); assertNewVirtualHost(hostDetails); // verify second create request fails - getRestTestHelper().submitRequest(url, "POST", data, HttpServletResponse.SC_CONFLICT); + submitVirtualHost(true, "POST", HttpServletResponse.SC_CONFLICT); + } + + public void testCreateVirtualHostByPutUsingVirtualHostURI() throws Exception + { + Map<String, Object> data = submitVirtualHost(false, "PUT", HttpServletResponse.SC_CREATED); + String hostName = (String)data.get(VirtualHost.NAME); + Map<String, Object> hostDetails = getRestTestHelper().getJsonAsSingletonList("virtualhost/" + EMPTY_VIRTUALHOSTNODE_NAME + "/" + hostName); + Asserts.assertVirtualHost(hostName, hostDetails); + + assertNewVirtualHost(hostDetails); + + // verify VH is updated successfully + submitVirtualHost(false, "PUT", HttpServletResponse.SC_OK); + } + + public void testCreateVirtualHostByPostUsingVirtualHostURI() throws Exception + { + Map<String, Object> data = submitVirtualHost(false, "POST", HttpServletResponse.SC_NOT_FOUND); + + String hostName = (String)data.get(VirtualHost.NAME); + List<Map<String, Object>> hostDetails = getRestTestHelper().getJsonAsList("virtualhost/" + EMPTY_VIRTUALHOSTNODE_NAME + "/" + hostName); + assertTrue("VH should not exist", hostDetails.isEmpty()); } public void testDeleteHost() throws Exception @@ -180,7 +190,17 @@ public class VirtualHostRestTest extends QpidRestTestCase getRestTestHelper().submitRequest("virtualhost/" + TEST1_VIRTUALHOST, "DELETE", HttpServletResponse.SC_CONFLICT); } - public void testMutateAttributes() throws Exception + public void testUpdateByPut() throws Exception + { + assertVirtualHostUpdate("PUT"); + } + + public void testUpdateByPost() throws Exception + { + assertVirtualHostUpdate("PUT"); + } + + private void assertVirtualHostUpdate(String method) throws IOException { String hostToUpdate = TEST3_VIRTUALHOST; String restHostUrl = "virtualhost/" + hostToUpdate + "/" + hostToUpdate; @@ -189,7 +209,7 @@ public class VirtualHostRestTest extends QpidRestTestCase Asserts.assertVirtualHost(hostToUpdate, hostDetails); Map<String, Object> newAttributes = Collections.<String, Object>singletonMap(VirtualHost.DESCRIPTION, "This is a virtual host"); - getRestTestHelper().submitRequest(restHostUrl, "PUT", newAttributes, HttpServletResponse.SC_OK); + getRestTestHelper().submitRequest(restHostUrl, method, newAttributes, HttpServletResponse.SC_OK); Map<String, Object> rereadHostDetails = getRestTestHelper().getJsonAsSingletonList(restHostUrl); Asserts.assertVirtualHost(hostToUpdate, rereadHostDetails); @@ -598,17 +618,28 @@ public class VirtualHostRestTest extends QpidRestTestCase return getRestTestHelper().submitRequest("queue/test/test/" + queueName, "PUT", queueData); } - private void createVirtualHost(final String virtualHostName, - final String virtualHostType, String method) throws IOException + private Map<String, Object> submitVirtualHost(boolean useParentURI, String method, int statusCode) throws IOException { + String hostName = getTestName(); + String type = getTestProfileVirtualHostNodeType(); + if (JsonVirtualHostNodeImpl.VIRTUAL_HOST_NODE_TYPE.equals(type)) + { + type = DerbyVirtualHostImpl.VIRTUAL_HOST_TYPE; + } Map<String, Object> virtualhostData = new HashMap<>(); - virtualhostData.put(VirtualHost.NAME, virtualHostName); - virtualhostData.put(VirtualHost.TYPE, virtualHostType); + virtualhostData.put(VirtualHost.NAME, hostName); + virtualhostData.put(VirtualHost.TYPE, type); - getRestTestHelper().submitRequest("virtualhost/" + EMPTY_VIRTUALHOSTNODE_NAME + "/" + virtualHostName, + String url = "virtualhost/" + EMPTY_VIRTUALHOSTNODE_NAME; + if (!useParentURI) + { + url += "/" + hostName; + } + getRestTestHelper().submitRequest(url, method, virtualhostData, - HttpServletResponse.SC_CREATED); + statusCode); + return virtualhostData; } private void assertNewVirtualHost(Map<String, Object> hostDetails) |
