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/07/23 23:54:34 UTC
svn commit: r1692451 - in /qpid/java/trunk:
broker-core/src/main/java/org/apache/qpid/server/model/
broker-core/src/main/java/org/apache/qpid/server/queue/
broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/
broker-pl...
Author: orudyy
Date: Thu Jul 23 21:54:33 2015
New Revision: 1692451
URL: http://svn.apache.org/r1692451
Log:
QPID-6652: [Java Broker] Make remaining REST service calls to be model based
Added:
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/JsonRest.js
Removed:
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageContentServlet.java
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/servlet/rest/MessageServlet.java
Modified:
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java
qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java
qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/moveCopyMessages.js
qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/showMessage.js
qpid/java/trunk/doc/book/src/java-broker/management/channels/Java-Broker-Management-Channel-REST-API.xml
qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/MessagesRestTest.java
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java?rev=1692451&r1=1692450&r2=1692451&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/model/Queue.java Thu Jul 23 21:54:33 2015
@@ -254,5 +254,7 @@ public interface Queue<X extends Queue<X
@ManagedOperation(nonModifying = true)
List<MessageInfo> getMessageInfo(@Param(name = "first", defaultValue = "-1") int first, @Param(name = "last", defaultValue = "-1") int last);
+ @ManagedOperation(nonModifying = true)
+ MessageInfo getMessageInfoById(@Param(name = "messageId") long messageId);
}
Modified: qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java?rev=1692451&r1=1692450&r2=1692451&view=diff
==============================================================================
--- qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java (original)
+++ qpid/java/trunk/broker-core/src/main/java/org/apache/qpid/server/queue/AbstractQueue.java Thu Jul 23 21:54:33 2015
@@ -3282,7 +3282,7 @@ public abstract class AbstractQueue<X ex
@Override
public Content getMessageContent(final long messageId)
{
- final MessageFinder messageFinder = new MessageFinder(messageId);
+ final MessageContentFinder messageFinder = new MessageContentFinder(messageId);
visit(messageFinder);
if(messageFinder.isFound())
{
@@ -3294,6 +3294,7 @@ public abstract class AbstractQueue<X ex
}
}
+ @Override
public List<MessageInfo> getMessageInfo(int first, int last)
{
final MessageCollector messageCollector = new MessageCollector(first, last, false);
@@ -3302,6 +3303,14 @@ public abstract class AbstractQueue<X ex
}
+ @Override
+ public MessageInfo getMessageInfoById(final long messageId)
+ {
+ final MessageFinder messageFinder = new MessageFinder(messageId);
+ visit(messageFinder);
+ return messageFinder.getMessageInfo();
+ }
+
private void authorizeMethod(String methodName)
{
getSecurityManager().authoriseMethod(Operation.UPDATE,
@@ -3310,16 +3319,45 @@ public abstract class AbstractQueue<X ex
getVirtualHost().getName());
}
-
private class MessageFinder implements QueueEntryVisitor
{
private final long _messageNumber;
+ private MessageInfo _messageInfo;
+
+ private MessageFinder(long messageNumber)
+ {
+ _messageNumber = messageNumber;
+ }
+
+ @Override
+ public boolean visit(QueueEntry entry)
+ {
+ ServerMessage message = entry.getMessage();
+ if(message != null)
+ {
+ if (_messageNumber == message.getMessageNumber())
+ {
+ _messageInfo = new MessageInfoFacade(entry, true);
+ }
+ }
+ return false;
+ }
+
+ public MessageInfo getMessageInfo()
+ {
+ return _messageInfo;
+ }
+ }
+
+ private class MessageContentFinder implements QueueEntryVisitor
+ {
+ private final long _messageNumber;
private String _mimeType;
private long _size;
private byte[] _content;
private boolean _found;
- private MessageFinder(long messageNumber)
+ private MessageContentFinder(long messageNumber)
{
_messageNumber = messageNumber;
}
Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java?rev=1692451&r1=1692450&r2=1692451&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/org/apache/qpid/server/management/plugin/HttpManagement.java Thu Jul 23 21:54:33 2015
@@ -73,8 +73,6 @@ import org.apache.qpid.server.management
import org.apache.qpid.server.management.plugin.servlet.rest.JsonValueServlet;
import org.apache.qpid.server.management.plugin.servlet.rest.LoggedOnUserPreferencesServlet;
import org.apache.qpid.server.management.plugin.servlet.rest.LogoutServlet;
-import org.apache.qpid.server.management.plugin.servlet.rest.MessageContentServlet;
-import org.apache.qpid.server.management.plugin.servlet.rest.MessageServlet;
import org.apache.qpid.server.management.plugin.servlet.rest.MetaDataServlet;
import org.apache.qpid.server.management.plugin.servlet.rest.QueueReportServlet;
import org.apache.qpid.server.management.plugin.servlet.rest.RestServlet;
@@ -318,8 +316,6 @@ public class HttpManagement extends Abst
root.addServlet(new ServletHolder(new UserPreferencesServlet()), "/service/userpreferences/*");
root.addServlet(new ServletHolder(new LoggedOnUserPreferencesServlet()), "/service/preferences");
root.addServlet(new ServletHolder(new StructureServlet()), "/service/structure");
- root.addServlet(new ServletHolder(new MessageServlet()), "/service/message/*");
- root.addServlet(new ServletHolder(new MessageContentServlet()), "/service/message-content/*");
root.addServlet(new ServletHolder(new QueueReportServlet()), "/service/queuereport/*");
root.addServlet(new ServletHolder(new MetaDataServlet(getModel())), "/service/metadata");
Added: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/JsonRest.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/JsonRest.js?rev=1692451&view=auto
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/JsonRest.js (added)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/common/JsonRest.js Thu Jul 23 21:54:33 2015
@@ -0,0 +1,85 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+ define(["dojo/_base/lang", "dojo/json", "dojo/_base/declare", "dojo/store/util/QueryResults"],
+ function( lang, json, declare, QueryResults )
+ {
+ return declare("qpid.common.JsonRest", null,
+ {
+ headers: {},
+ idProperty: "id",
+ firstProperty: "first",
+ lastProperty: "last",
+ accepts: "application/javascript, application/json",
+ queryOperation: null,
+ modelObject: null,
+ management: null,
+
+ constructor: function(options)
+ {
+ this.headers = {};
+ this.management = options.management;
+ this.modelObject = options.modelObject;
+ this.queryOperation = options.queryOperation;
+ declare.safeMixin(this, options);
+ },
+
+ getIdentity: function(object)
+ {
+ return object[this.idProperty];
+ },
+
+ query: function(query, options)
+ {
+ query = query || {};
+ options = options || {};
+ var headers = lang.mixin({ Accept: this.accepts }, this.headers, options.headers);
+
+ query[this.firstProperty]= options.start >= 0 ? options.start : -1;
+ query[this.lastProperty] = options.count >= 0 && query.first >= 0 ? options.count + query.first : -1;
+
+ if(options.start >= 0 || options.count >= 0)
+ {
+ headers["X-Range"] = "items=" + (options.start || '0') + '-' +
+ (("count" in options && options.count != Infinity) ?
+ (options.count + (options.start || 0) - 1) : '');
+ headers.Range = headers["X-Range"];
+ }
+
+ var modelObj = {name: this.queryOperation, parent: this.modelObject, type: this.modelObject.type};
+ var results = management.load(modelObj,
+ query,
+ {headers: headers});
+
+ results.total = results.response.then(function(response)
+ {
+ var range = response.getHeader("Content-Range");
+ if (!range)
+ {
+ range = response.getHeader("X-Content-Range");
+ }
+ return range && (range = range.match(/\/(.*)/)) && +range[1];
+ });
+ return QueryResults(results);
+ }
+ });
+
+ });
Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js?rev=1692451&r1=1692450&r2=1692451&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Management.js Thu Jul 23 21:54:33 2015
@@ -132,7 +132,8 @@ define(["dojo/_base/lang",
otherwise: function(errback){return promise.otherwise(errback);},
trace: function(){ return promise.trace();},
traceRejected: function(){return promise.traceRejected();},
- toString: function(){return promise.toString();}
+ toString: function(){return promise.toString();},
+ response: promise.response
});
};
@@ -171,10 +172,16 @@ define(["dojo/_base/lang",
//
// returns: promise of type dojo.promise.Promise
// Promise returned by dojo.request.xhr with modified then method allowing to use default error handler if none is specified.
- Management.prototype.load = function(modelObj, parameters)
+ Management.prototype.load = function(modelObj, parameters, requestOptions)
{
var url = this.objectToURL(modelObj);
var request = {url: url};
+
+ if (requestOptions)
+ {
+ lang.mixin(request,requestOptions);
+ }
+
if (parameters)
{
request.query = parameters;
Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js?rev=1692451&r1=1692450&r2=1692451&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/Queue.js Thu Jul 23 21:54:33 2015
@@ -18,7 +18,8 @@
* under the License.
*
*/
-define(["dojo/parser",
+define(["dojo/_base/declare",
+ "dojo/parser",
"dojo/query",
"dijit/registry",
"dojo/_base/connect",
@@ -33,18 +34,17 @@ define(["dojo/parser",
"qpid/management/moveCopyMessages",
"qpid/management/showMessage",
"qpid/management/editQueue",
- "dojo/store/JsonRest",
+ "qpid/common/JsonRest",
"dojox/grid/EnhancedGrid",
"dojo/data/ObjectStore",
"dojox/html/entities",
"dojo/text!showQueue.html",
- "dojox/data/JsonRestStore",
"dojox/grid/enhanced/plugins/Pagination",
"dojox/grid/enhanced/plugins/IndirectSelection",
"dojo/domReady!"],
- function (parser, query, registry, connect, event, json, properties, updater, util, formatter,
+ function (declare, parser, query, registry, connect, event, json, properties, updater, util, formatter,
UpdatableStore, addBinding, moveMessages, showMessage, editQueue, JsonRest,
- EnhancedGrid, ObjectStore, entities, template, JsonRestStore) {
+ EnhancedGrid, ObjectStore, entities, template) {
function Queue(name, parent, controller) {
this.name = name;
@@ -81,13 +81,10 @@ define(["dojo/parser",
contentPane.containerNode.innerHTML = template;
parser.parse(contentPane.containerNode).then(function(instances)
{
-
that.queueUpdater = new QueueUpdater(that);
// double encode to allow slashes in object names.
- var myStore = new JsonRest({target: that.management.getFullUrl("service/message/" +
- encodeURIComponent(encodeURIComponent(that.getVirtualHostName())) +
- "/" + encodeURIComponent(encodeURIComponent(that.getQueueName())))});
+ var myStore = new JsonRest({management: that.management, modelObject: that.modelObj, queryOperation: "getMessageInfo"});
var messageGridDiv = query(".messages",contentPane.containerNode)[0];
that.dataStore = new ObjectStore({objectStore: myStore});
var userPreferences = this.management.userPreferences;
@@ -115,18 +112,15 @@ define(["dojo/parser",
position: "bottom"
},
indirectSelection: true
- }
+ },
+ canSort: function(col) { return false; }
}, messageGridDiv);
connect.connect(that.grid, "onRowDblClick", that.grid,
function(evt){
var idx = evt.rowIndex,
theItem = this.getItem(idx);
- var id = that.dataStore.getValue(theItem,"id");
- showMessage.show(that.management, { messageNumber: id,
- queue: that.getQueueName(),
- virtualhost: that.getVirtualHostName(),
- virtualhostnode: that.getVirtualHostNodeName()});
+ showMessage.show(that.management, that.modelObj, theItem);
});
var deleteMessagesButton = query(".deleteMessagesButton", contentPane.containerNode)[0];
@@ -182,38 +176,57 @@ define(["dojo/parser",
});
};
- Queue.prototype.deleteMessages = function() {
+ Queue.prototype.deleteMessages = function()
+ {
var data = this.grid.selection.getSelected();
- if(data.length) {
- var that = this;
- if(confirm("Delete " + data.length + " messages?")) {
- var query = util.buildDeleteQuery(data, "service/message/" + encodeURIComponent(encodeURIComponent(this.getVirtualHostName())) + "/" + encodeURIComponent(encodeURIComponent(this.getQueueName())));
- management.del({url: query}).then(
- function(result)
+ if(data.length)
+ {
+ if(confirm("Delete " + data.length + " messages?"))
+ {
+ var modelObj = { type: "queue", name: "deleteMessages", parent: this.modelObj };
+ var parameters = {messageIds:[]};
+ for(var i = 0; i<data.length; i++)
+ {
+ parameters.messageIds.push(data[i].id);
+ }
+ var that = this;
+ this.management.update(modelObj, parameters).then(
+ function(result)
+ {
+ that.grid.selection.deselectAll();
+ if (result && result[0])
{
- that.grid.setQuery({id: "*"});
- that.grid.selection.deselectAll();
- that.queueUpdater.update();
- },
- util.xhrErrorHandler);
+ that.reloadGridData();
+ }
+ });
}
}
};
- Queue.prototype.clearQueue = function() {
- var that = this;
- if(confirm("Clear all messages from queue?")) {
- var query = "service/message/"+ encodeURIComponent(encodeURIComponent(that.getVirtualHostName()))
- + "/" + encodeURIComponent(encodeURIComponent(that.getQueueName())) + "?clear=true";
- that.success = true
- this.management.del({url: query}).then(
- function(data) {
- that.grid.setQuery({id: "*"});
- that.grid.selection.deselectAll();
- that.queueUpdater.update();
- },
- util.xhrErrorHandler);
+ Queue.prototype.clearQueue = function()
+ {
+ if(confirm("Clear all messages from queue?"))
+ {
+ var modelObj = { type: "queue", name: "clearQueue", parent: this.modelObj };
+ var that = this;
+ this.management.update(modelObj, {}).then(
+ function(result)
+ {
+ if (result)
+ {
+ that.reloadGridData();
+ }
+ });
}
};
+ Queue.prototype.reloadGridData = function()
+ {
+ var currentPage = this.grid.pagination.currentPage;
+ var currentPageSize = this.grid.pagination.currentPageSize;
+ var first = (currentPage -1 ) * currentPageSize;
+ var last = currentPage * currentPageSize;
+ this.grid.setQuery({first: first, last: last});
+ this.queueUpdater.update();
+ };
Queue.prototype.moveOrCopyMessages = function(obj) {
var that = this;
var move = obj.move;
@@ -231,8 +244,7 @@ define(["dojo/parser",
putData, function() {
if(move)
{
- that.grid.setQuery({id: "*"});
- that.grid.selection.deselectAll();
+ that.reloadGridData();
}
});
Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/moveCopyMessages.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/moveCopyMessages.js?rev=1692451&r1=1692450&r2=1692451&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/moveCopyMessages.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/moveCopyMessages.js Thu Jul 23 21:54:33 2015
@@ -56,25 +56,22 @@ define(["dojo/dom",
theForm.on("submit", function(e) {
event.stop(e);
- if(theForm.validate()){
-
- moveMessages.data.destinationQueue = theForm.getValues()["queue"];
- var that = this;
-
- moveMessages.management.post({url: "service/message/"+encodeURIComponent(encodeURIComponent(moveMessages.vhost))
- +"/"+encodeURIComponent(encodeURIComponent(moveMessages.queue)),
- headers: { "Content-Type": "application/json"}},
- moveMessages.data,
- function(x) {
- registry.byId("moveMessages").hide();
- if(moveMessages.next) {
- moveMessages.next();
- }
- },
- util.xhrErrorHandler);
- return false;
-
-
+ if(theForm.validate())
+ {
+ var destination = theForm.getValues()["queue"]
+ var messageIds = moveMessages.data.messages
+ var modelObj = { type: "queue", name: moveMessages.data.move ? "moveMessages" : "copyMessages", parent: moveMessages.modelObj };
+ var parameters = {destination: destination, messageIds: messageIds};
+ moveMessages.management.update(modelObj, parameters).then(
+ function(result)
+ {
+ registry.byId("moveMessages").hide();
+ if(moveMessages.next)
+ {
+ moveMessages.next();
+ }
+ });
+ return false;
}else{
alert('Form contains invalid data. Please correct first');
return false;
@@ -84,9 +81,8 @@ define(["dojo/dom",
moveMessages.show = function(management, modelObj, data, next) {
var that = this;
+ moveMessages.modelObj = modelObj;
moveMessages.management = management;
- moveMessages.vhost = modelObj.parent.name;
- moveMessages.queue = modelObj.name;
moveMessages.data = data;
moveMessages.next = next;
registry.byId("formMoveMessages").reset();
@@ -96,8 +92,12 @@ define(["dojo/dom",
management.load({type: "queue", parent: modelObj.parent}, {depth:0}).then(
function(data) {
var queues = [];
- for(var i=0; i < data.length; i++) {
- queues[i] = {id: data[i].name, name: data[i].name};
+ for(var i=0; i < data.length; i++)
+ {
+ if (data[i].name != modelObj.name)
+ {
+ queues.push({id: data[i].name, name: data[i].name});
+ }
}
var queueStore = new Memory({ data: queues });
Modified: qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/showMessage.js
URL: http://svn.apache.org/viewvc/qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/showMessage.js?rev=1692451&r1=1692450&r2=1692451&view=diff
==============================================================================
--- qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/showMessage.js (original)
+++ qpid/java/trunk/broker-plugins/management-http/src/main/java/resources/js/qpid/management/showMessage.js Thu Jul 23 21:54:33 2015
@@ -46,20 +46,24 @@ define(["dojo/dom",
};
showMessage.loadViewMessage = function(data) {
- var that = this;
+ var node = construct.create("div", null, win.body(), "last");
node.innerHTML = data;
- showMessage.dialogNode = dom.byId("showMessage");
- parser.instantiate([showMessage.dialogNode]);
+ var that = this;
+ parser.parse(node).then(function(instances)
+ {
+ that.dialogNode = dom.byId("showMessage");
+ var closeButton = query(".closeViewMessage", that.dialogNode)[0];
+ registry.byNode(closeButton).on("click",
+ function (evt) {
+ event.stop(evt);
+ that.hide();
+ });
+ });
+
- var closeButton = query(".closeViewMessage")[0];
- connect.connect(closeButton, "onclick",
- function (evt) {
- event.stop(evt);
- showMessage.hide();
- });
};
- showMessage.populateShowMessage = function(data) {
+ showMessage.populateShowMessage = function(management, modelObj, data) {
// clear fields set by previous invocation.
if(populatedFields) {
@@ -89,7 +93,7 @@ define(["dojo/dom",
}
tableStr += "</table>";
} else if(domClass.contains(field,"datetime")) {
- field.innerHTML = showMessage.management.userPreferences.formatDateTime(val, {addOffset: true, appendTimeZone: true});
+ field.innerHTML = management.userPreferences.formatDateTime(val, {addOffset: true, appendTimeZone: true});
} else {
field.innerHTML = encode(val);
}
@@ -98,39 +102,46 @@ define(["dojo/dom",
}
}
var contentField = query(".message-content", this.dialogNode)[0];
+ populatedFields.push(contentField);
- if(data.mimeType && data.mimeType.match(/text\/.*/)) {
- showMessage.management.get({url: "service/message-content/" + encodeURIComponent(encodeURIComponent(showMessage.virtualhost))
- + "/" + encodeURIComponent(encodeURIComponent(showMessage.queue))
- + "/" + encodeURIComponent(encodeURIComponent(showMessage.messageNumber)),
- headers: { "Content-Type": "text/html"},
- handleAs: "text"
- }).then(function(obj) { contentField.innerHTML = encode(obj); }, util.xhrErrorHandler);
- } else {
- contentField.innerHTML = "<a href=\"" + showMessage.management.getFullUrl("service/message-content/"
- + encodeURIComponent(encodeURIComponent(showMessage.virtualhost))
- + "/" + encodeURIComponent(encodeURIComponent(showMessage.queue))
- + "/" + encodeURIComponent(encodeURIComponent(showMessage.messageNumber)))
- + "\" target=\"_blank\">Download</a>";
+ var contentModelObj = {name: "getMessageContent", parent: modelObj, type: modelObj.type};
+ var parameters = {messageId: data.id};
+ if(data.mimeType && data.mimeType.match(/text\/.*/))
+ {
+ management.load(contentModelObj,
+ parameters,
+ {handleAs: "text", headers: { "Content-Type": data.mimeType}}).then(
+ function(content)
+ {
+ contentField.innerHTML = encode(content);
+ registry.byId("showMessage").show();
+ });
}
- populatedFields.push(contentField);
+ else
+ {
+ var url = management.buildObjectURL(contentModelObj, parameters);
+ contentField.innerHTML = "<a href=\"#\" title=\"" + url + "\">Download</a>";
+
+ var href = query('a', contentField)[0]
+ connect.connect(href, 'onclick',
+ function()
+ {
+ management.download(contentModelObj, parameters);
+ });
- registry.byId("showMessage").show();
+ registry.byId("showMessage").show();
+ }
};
- showMessage.show = function(management, obj) {
- showMessage.management = management;
- showMessage.virtualhost = obj.virtualhost;
- showMessage.queue = obj.queue;
- showMessage.messageNumber = obj.messageNumber;
-
- showMessage.management.get({url: "service/message/" + encodeURIComponent(encodeURIComponent(obj.virtualhost))
- + "/" + encodeURIComponent(encodeURIComponent(obj.queue))
- + "/" + encodeURIComponent(encodeURIComponent(obj.messageNumber))}).then(showMessage.populateShowMessage);
+ showMessage.show = function(management, modelObj, message )
+ {
+ management.load({name: "getMessageInfoById", parent: modelObj, type: modelObj.type}, {messageId: message.id}).then(
+ function(data)
+ {
+ showMessage.populateShowMessage(management, modelObj, data);
+ });
};
- var node = construct.create("div", null, win.body(), "last");
-
showMessage.loadViewMessage(template);
return showMessage;
Modified: qpid/java/trunk/doc/book/src/java-broker/management/channels/Java-Broker-Management-Channel-REST-API.xml
URL: http://svn.apache.org/viewvc/qpid/java/trunk/doc/book/src/java-broker/management/channels/Java-Broker-Management-Channel-REST-API.xml?rev=1692451&r1=1692450&r2=1692451&view=diff
==============================================================================
--- qpid/java/trunk/doc/book/src/java-broker/management/channels/Java-Broker-Management-Channel-REST-API.xml (original)
+++ qpid/java/trunk/doc/book/src/java-broker/management/channels/Java-Broker-Management-Channel-REST-API.xml Thu Jul 23 21:54:33 2015
@@ -348,24 +348,6 @@
</row>
<row>
<entry>
- <para>/service/message/<virtualhost name>/<queue name></para>
- </entry>
- <entry>Rest service to manage messages(s). Retrieves the details about the messages(s) with GET. Copies, moves messages with POST requests. Deletes messages with DELETE requests </entry>
- </row>
- <row>
- <entry>
- <para>/service/message-content/<virtualhost name>/<queue name></para>
- </entry>
- <entry>Rest service to retrieve message content</entry>
- </row>
- <row>
- <entry>
- <para>/service/logrecords</para>
- </entry>
- <entry>Rest service to retrieve broker logs</entry>
- </row>
- <row>
- <entry>
<para>/service/sasl</para>
</entry>
<entry>Sasl authentication. Retrieves user current authentication status and broker supported SASL mechanisms (GET). Authenticates user using supported SASL mechanisms (PUT requests)</entry>
Modified: qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/MessagesRestTest.java
URL: http://svn.apache.org/viewvc/qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/MessagesRestTest.java?rev=1692451&r1=1692450&r2=1692451&view=diff
==============================================================================
--- qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/MessagesRestTest.java (original)
+++ qpid/java/trunk/systests/src/test/java/org/apache/qpid/systest/rest/MessagesRestTest.java Thu Jul 23 21:54:33 2015
@@ -24,6 +24,7 @@ import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -85,7 +86,7 @@ public class MessagesRestTest extends Qp
public void testGet() throws Exception
{
String queueName = getTestQueueName();
- List<Map<String, Object>> messages = getRestTestHelper().getJsonAsList("/service/message/test/" + queueName);
+ List<Map<String, Object>> messages = getRestTestHelper().getJsonAsList("queue/test/test/" + queueName + "/getMessageInfo");
assertNotNull("Messages are not found", messages);
assertEquals("Unexpected number of messages", MESSAGE_NUMBER, messages.size());
int position = 0;
@@ -109,28 +110,28 @@ public class MessagesRestTest extends Qp
// get message IDs
List<Long> ids = getMesssageIds(queueName);
- Map<String, Object> message = getRestTestHelper().getJsonAsMap("/service/message/test/" + queueName + "/" + ids.get(0));
+ List<Map<String, Object>> messages = getRestTestHelper().getJsonAsList("queue/test/test/" + queueName + "/getMessageInfo?first=0&last=0");
+ assertEquals("Unexpected message number returned", 1, messages.size());
+ Map<String, Object> message = messages.get(0);
assertMessageAttributes(message);
assertMessageAttributeValues(message, true);
- @SuppressWarnings("unchecked")
- Map<String, Object> headers = (Map<String, Object>) message.get("headers");
- assertNotNull("Message headers are not found", headers);
- assertEquals("Unexpected message header", 0, headers.get("index"));
-
- Long lastMessageId = ids.get(ids.size() - 1);
- message = getRestTestHelper().getJsonAsMap("/service/message/test/" + queueName + "/" + lastMessageId);
+ int lastMessageId = ids.size() - 1;
+ messages = getRestTestHelper().getJsonAsList("queue/test/test/" + queueName + "/getMessageInfo?first=" + lastMessageId + "&last=" + lastMessageId);
+ assertEquals("Unexpected message number returned", 1, messages.size());
+ message = messages.get(0);
assertMessageAttributes(message);
assertEquals("Unexpected message attribute mimeType", "text/plain", message.get("mimeType"));
assertEquals("Unexpected message attribute size", STRING_VALUE.getBytes(StandardCharsets.UTF_8).length, message.get("size"));
+ message = getRestTestHelper().getJsonAsMap("queue/test/test/" + queueName + "/getMessageInfoById?messageId=" + ids.get(lastMessageId));
@SuppressWarnings("unchecked")
Map<String, Object> messageHeader = (Map<String, Object>) message.get("headers");
assertNotNull("Message headers are not found", messageHeader);
assertEquals("Unexpected message header value", STRING_VALUE, messageHeader.get(STRING_PROP));
// get content
- byte[] data = getRestTestHelper().getBytes("/service/message-content/test/" + queueName + "/" + lastMessageId);
+ byte[] data = getRestTestHelper().getBytes("queue/test/test/" + queueName + "/getMessageContent?messageId=" + ids.get(lastMessageId));
assertTrue("Unexpected message for id " + lastMessageId + ":" + data.length, Arrays.equals(STRING_VALUE.getBytes(StandardCharsets.UTF_8), data));
}
@@ -147,7 +148,7 @@ public class MessagesRestTest extends Qp
// move half of the messages
int movedNumber = ids.size() / 2;
- List<Long> movedMessageIds = new ArrayList<Long>();
+ List<Long> movedMessageIds = new ArrayList<>();
for (int i = 0; i < movedNumber; i++)
{
movedMessageIds.add(ids.remove(i));
@@ -155,15 +156,15 @@ public class MessagesRestTest extends Qp
// move messages
- Map<String, Object> messagesData = new HashMap<String, Object>();
- messagesData.put("messages", movedMessageIds);
- messagesData.put("destinationQueue", queueName2);
- messagesData.put("move", Boolean.TRUE);
+ Map<String, Object> messagesData = new HashMap<>();
+ messagesData.put("messageIds", movedMessageIds);
+ messagesData.put("destination", queueName2);
+
- getRestTestHelper().submitRequest("/service/message/test/" + queueName, "POST", messagesData, HttpServletResponse.SC_OK);
+ getRestTestHelper().submitRequest("queue/test/test/" + queueName + "/moveMessages", "POST", messagesData, HttpServletResponse.SC_OK);
// check messages on target queue
- List<Map<String, Object>> messages = getRestTestHelper().getJsonAsList("/service/message/test/" + queueName2);
+ List<Map<String, Object>> messages = getRestTestHelper().getJsonAsList("queue/test/test/" + queueName2 + "/getMessageInfo");
assertNotNull("Messages are not found", messages);
assertEquals("Unexpected number of messages", movedMessageIds.size(), messages.size());
for (Long id : movedMessageIds)
@@ -173,7 +174,7 @@ public class MessagesRestTest extends Qp
}
// check messages on original queue
- messages = getRestTestHelper().getJsonAsList("/service/message/test/" + queueName);
+ messages = getRestTestHelper().getJsonAsList("queue/test/test/" + queueName + "/getMessageInfo");
assertNotNull("Messages are not found", messages);
assertEquals("Unexpected number of messages", ids.size(), messages.size());
for (Long id : ids)
@@ -200,21 +201,21 @@ public class MessagesRestTest extends Qp
// copy half of the messages
int copyNumber = ids.size() / 2;
- List<Long> copyMessageIds = new ArrayList<Long>();
+ List<Long> copyMessageIds = new ArrayList<>();
for (int i = 0; i < copyNumber; i++)
{
copyMessageIds.add(ids.remove(i));
}
// copy messages
- Map<String, Object> messagesData = new HashMap<String, Object>();
- messagesData.put("messages", copyMessageIds);
- messagesData.put("destinationQueue", queueName2);
+ Map<String, Object> messagesData = new HashMap<>();
+ messagesData.put("messageIds", copyMessageIds);
+ messagesData.put("destination", queueName2);
- getRestTestHelper().submitRequest("/service/message/test/" + queueName, "POST", messagesData, HttpServletResponse.SC_OK);
+ getRestTestHelper().submitRequest("queue/test/test/" + queueName + "/copyMessages", "POST", messagesData, HttpServletResponse.SC_OK);
// check messages on target queue
- List<Map<String, Object>> messages = getRestTestHelper().getJsonAsList("/service/message/test/" + queueName2);
+ List<Map<String, Object>> messages = getRestTestHelper().getJsonAsList("queue/test/test/" + queueName2 + "/getMessageInfo");
assertNotNull("Messages are not found", messages);
assertEquals("Unexpected number of messages", copyMessageIds.size(), messages.size());
for (Long id : copyMessageIds)
@@ -224,7 +225,7 @@ public class MessagesRestTest extends Qp
}
// check messages on original queue
- messages = getRestTestHelper().getJsonAsList("/service/message/test/" + queueName);
+ messages = getRestTestHelper().getJsonAsList("queue/test/test/" + queueName + "/getMessageInfo");
assertNotNull("Messages are not found", messages);
assertEquals("Unexpected number of messages", MESSAGE_NUMBER, messages.size());
for (Long id : ids)
@@ -248,24 +249,20 @@ public class MessagesRestTest extends Qp
// delete half of the messages
int deleteNumber = ids.size() / 2;
- StringBuilder queryString = new StringBuilder();
List<Long> deleteMessageIds = new ArrayList<>();
for (int i = 0; i < deleteNumber; i++)
{
Long id = ids.remove(i);
deleteMessageIds.add(id);
- if (queryString.length() > 0)
- {
- queryString.append("&");
- }
- queryString.append("id=").append(id);
}
// delete messages
- getRestTestHelper().submitRequest("/service/message/test/" + queueName + "?" + queryString.toString(), "DELETE", HttpServletResponse.SC_OK);
+ Map<String, Object> parameters = new HashMap<>();
+ parameters.put("messageIds", deleteMessageIds);
+ getRestTestHelper().submitRequest("queue/test/test/" + queueName + "/deleteMessages", "POST", parameters, HttpServletResponse.SC_OK);
// check messages on queue
- List<Map<String, Object>> messages = getRestTestHelper().getJsonAsList("/service/message/test/" + queueName);
+ List<Map<String, Object>> messages = getRestTestHelper().getJsonAsList("queue/test/test/" + queueName + "/getMessageInfo");
assertNotNull("Messages are not found", messages);
assertEquals("Unexpected number of messages", ids.size(), messages.size());
for (Long id : ids)
@@ -285,10 +282,11 @@ public class MessagesRestTest extends Qp
String queueName = getTestQueueName();
// clear queue
- getRestTestHelper().submitRequest("/service/message/test/" + queueName + "?clear=true", "DELETE", HttpServletResponse.SC_OK);
+ getRestTestHelper().submitRequest("queue/test/test/" + queueName + "/clearQueue", "POST",
+ Collections.<String, Object>emptyMap(), HttpServletResponse.SC_OK);
// check messages on queue
- List<Map<String, Object>> messages = getRestTestHelper().getJsonAsList("/service/message/test/" + queueName);
+ List<Map<String, Object>> messages = getRestTestHelper().getJsonAsList("queue/test/test/" + queueName + "/getMessageInfo");
assertNotNull("Messages are not found", messages);
assertEquals("Unexpected number of messages", 0, messages.size());
}
@@ -296,8 +294,8 @@ public class MessagesRestTest extends Qp
private List<Long> getMesssageIds(String queueName) throws IOException
{
- List<Map<String, Object>> messages = getRestTestHelper().getJsonAsList("/service/message/test/" + queueName);
- List<Long> ids = new ArrayList<Long>();
+ List<Map<String, Object>> messages = getRestTestHelper().getJsonAsList("queue/test/test/" + queueName + "/getMessageInfo");
+ List<Long> ids = new ArrayList<>();
for (Map<String, Object> message : messages)
{
ids.add(((Number) message.get("id")).longValue());
@@ -309,7 +307,6 @@ public class MessagesRestTest extends Qp
{
assertMessageAttributes(message);
- assertEquals("Unexpected message attribute position", position, message.get("position"));
assertEquals("Unexpected message attribute size", position < 10 ? 6 : 7, message.get("size"));
boolean even = position % 2 == 0;
assertMessageAttributeValues(message, even);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org