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);