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