You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by jb...@apache.org on 2017/04/24 18:53:45 UTC
[2/2] activemq-artemis git commit: ARTEMIS-1128
QueueControlImpl.sendMessage() fixes
ARTEMIS-1128 QueueControlImpl.sendMessage() fixes
sendMessage() may throw ActiveMQException that causes CNFE
at the management client. Also it should check if headers
in the message is null (to prevent NPE).
Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo
Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/694a5092
Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/694a5092
Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/694a5092
Branch: refs/heads/master
Commit: 694a5092b6a204b6356864ef4282bedc9917eec3
Parents: e078666
Author: Howard Gao <ho...@gmail.com>
Authored: Mon Apr 24 22:51:12 2017 +0800
Committer: Justin Bertram <jb...@apache.org>
Committed: Mon Apr 24 13:52:51 2017 -0500
----------------------------------------------------------------------
.../core/management/impl/QueueControlImpl.java | 68 +++++++++++---------
.../management/QueueControlTest.java | 15 ++++-
2 files changed, 49 insertions(+), 34 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/694a5092/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java
----------------------------------------------------------------------
diff --git a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java
index 2e886f9..6ed4f5b 100644
--- a/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java
+++ b/artemis-server/src/main/java/org/apache/activemq/artemis/core/management/impl/QueueControlImpl.java
@@ -743,42 +743,48 @@ public class QueueControlImpl extends AbstractControl implements QueueControl {
boolean durable,
final String user,
final String password) throws Exception {
- securityStore.check(queue.getAddress(), CheckType.SEND, new SecurityAuth() {
- @Override
- public String getUsername() {
- return user;
- }
+ try {
+ securityStore.check(queue.getAddress(), CheckType.SEND, new SecurityAuth() {
+ @Override
+ public String getUsername() {
+ return user;
+ }
- @Override
- public String getPassword() {
- return password;
- }
+ @Override
+ public String getPassword() {
+ return password;
+ }
- @Override
- public RemotingConnection getRemotingConnection() {
- return null;
+ @Override
+ public RemotingConnection getRemotingConnection() {
+ return null;
+ }
+ });
+ CoreMessage message = new CoreMessage(storageManager.generateID(), 50);
+ if (headers != null) {
+ for (String header : headers.keySet()) {
+ message.putStringProperty(new SimpleString(header), new SimpleString(headers.get(header)));
+ }
}
- });
- CoreMessage message = new CoreMessage(storageManager.generateID(), 50);
- for (String header : headers.keySet()) {
- message.putStringProperty(new SimpleString(header), new SimpleString(headers.get(header)));
- }
- message.setType((byte) type);
- message.setDurable(durable);
- message.setTimestamp(System.currentTimeMillis());
- if (body != null) {
- if (type == Message.TEXT_TYPE) {
- message.getBodyBuffer().writeNullableSimpleString(new SimpleString(body));
- } else {
- message.getBodyBuffer().writeBytes(Base64.decode(body));
+ message.setType((byte) type);
+ message.setDurable(durable);
+ message.setTimestamp(System.currentTimeMillis());
+ if (body != null) {
+ if (type == Message.TEXT_TYPE) {
+ message.getBodyBuffer().writeNullableSimpleString(new SimpleString(body));
+ } else {
+ message.getBodyBuffer().writeBytes(Base64.decode(body));
+ }
}
+ message.setAddress(queue.getAddress());
+ ByteBuffer buffer = ByteBuffer.allocate(8);
+ buffer.putLong(queue.getID());
+ message.putBytesProperty(Message.HDR_ROUTE_TO_IDS, buffer.array());
+ postOffice.route(message, true);
+ return "" + message.getMessageID();
+ } catch (ActiveMQException e) {
+ throw new IllegalStateException(e.getMessage());
}
- message.setAddress(queue.getAddress());
- ByteBuffer buffer = ByteBuffer.allocate(8);
- buffer.putLong(queue.getID());
- message.putBytesProperty(Message.HDR_ROUTE_TO_IDS, buffer.array());
- postOffice.route(message, true);
- return "" + message.getMessageID();
}
@Override
http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/694a5092/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlTest.java
----------------------------------------------------------------------
diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlTest.java
index 212aa37..267549f 100644
--- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlTest.java
+++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/management/QueueControlTest.java
@@ -57,6 +57,8 @@ import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
+import static org.apache.activemq.artemis.core.management.impl.openmbean.CompositeDataConstants.BODY;
+
public class QueueControlTest extends ManagementTestBase {
private ActiveMQServer server;
@@ -2110,15 +2112,22 @@ public class QueueControlTest extends ManagementTestBase {
QueueControl queueControl = createManagementControl(address, queue);
queueControl.sendMessage(new HashMap<String, String>(), Message.BYTES_TYPE, Base64.encodeBytes("theBody".getBytes()), true, "myUser", "myPassword");
+ queueControl.sendMessage(null, Message.BYTES_TYPE, Base64.encodeBytes("theBody".getBytes()), true, "myUser", "myPassword");
- Assert.assertEquals(1, getMessageCount(queueControl));
+ Assert.assertEquals(2, getMessageCount(queueControl));
// the message IDs are set on the server
CompositeData[] browse = queueControl.browse(null);
- Assert.assertEquals(1, browse.length);
+ Assert.assertEquals(2, browse.length);
+
+ byte[] body = (byte[]) browse[0].get(BODY);
+
+ Assert.assertNotNull(body);
+
+ Assert.assertEquals(new String(body), "theBody");
- byte[] body = (byte[]) browse[0].get("BodyPreview");
+ body = (byte[]) browse[1].get(BODY);
Assert.assertNotNull(body);