You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ta...@apache.org on 2016/10/31 17:16:39 UTC

qpid-jms git commit: QPIDJMS-217 Remove unnecessary copy of message payload

Repository: qpid-jms
Updated Branches:
  refs/heads/master 34209975f -> ec04b3cb0


QPIDJMS-217 Remove unnecessary copy of message payload

Don't deep copy the body of BytesMessage's on dispatch.

Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/ec04b3cb
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/ec04b3cb
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/ec04b3cb

Branch: refs/heads/master
Commit: ec04b3cb0767606c33c2257f1154ea1e627f79a7
Parents: 3420997
Author: Timothy Bish <ta...@gmail.com>
Authored: Mon Oct 31 13:16:14 2016 -0400
Committer: Timothy Bish <ta...@gmail.com>
Committed: Mon Oct 31 13:16:14 2016 -0400

----------------------------------------------------------------------
 .../amqp/message/AmqpJmsBytesMessageFacade.java |  4 +--
 .../message/AmqpJmsBytesMessageFacadeTest.java  | 27 ++++++++++++++++++++
 2 files changed, 28 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/ec04b3cb/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacade.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacade.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacade.java
index 30fc9c3..b6f98fb 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacade.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacade.java
@@ -65,9 +65,7 @@ public class AmqpJmsBytesMessageFacade extends AmqpJmsMessageFacade implements J
         Binary payload = getBinaryFromBody();
         copy.setContentType(OCTET_STREAM_CONTENT_TYPE);
         if (payload.getLength() > 0) {
-            byte[] result = new byte[payload.getLength()];
-            System.arraycopy(payload.getArray(), payload.getArrayOffset(), result, 0, payload.getLength());
-            copy.setBody(new Data(new Binary(result)));
+            copy.setBody(new Data(payload));
         } else {
             copy.setBody(EMPTY_BODY);
         }

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/ec04b3cb/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacadeTest.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacadeTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacadeTest.java
index 4ac9d6d..f2a25cd 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacadeTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/provider/amqp/message/AmqpJmsBytesMessageFacadeTest.java
@@ -177,6 +177,33 @@ public class AmqpJmsBytesMessageFacadeTest extends AmqpJmsMessageTypesTestCase {
         assertDataBodyAsExpected(copy.getBody(), 0);
     }
 
+    /**
+     * Test that copying a new messages which has a body and the copy has getOutputStream
+     * called which clears the message body doesn't affect the original.
+     *
+     * @throws Exception if an error occurs during the test.
+     */
+    @Test
+    public void testGetOutputStreamOnCopiedMessageLeavesOriginalUntouched() throws Exception {
+        AmqpJmsBytesMessageFacade amqpBytesMessageFacade = createNewBytesMessageFacade();
+
+        assertDataBodyAsExpected(amqpBytesMessageFacade.getBody(), 0);
+
+        byte[] bytes = "myBytes".getBytes();
+        OutputStream os = amqpBytesMessageFacade.getOutputStream();
+        os.write(bytes);
+
+        AmqpJmsBytesMessageFacade copy = amqpBytesMessageFacade.copy();
+
+        assertDataBodyAsExpected(amqpBytesMessageFacade.getBody(), bytes.length);
+        assertDataBodyAsExpected(copy.getBody(), bytes.length);
+
+        copy.getOutputStream();
+
+        assertDataBodyAsExpected(amqpBytesMessageFacade.getBody(), bytes.length);
+        assertDataBodyAsExpected(copy.getBody(), 0);
+    }
+
     @Test
     public void testClearBodySetsBodyLength0AndCausesEmptyInputStream() throws Exception {
         byte[] bytes = "myBytes".getBytes();


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org