Repository: activemq-artemis Updated Branches: refs/heads/2.6.x c74658e8b -> 2cedcb8d7
ARTEMIS-2025 Ensure correct calculation of message body size (cherry picked from commit d6d73c7f2372e211022c5aca7f0052e84170a6f0) Project: http://git-wip-us.apache.org/repos/asf/activemq-artemis/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq-artemis/commit/2cedcb8d Tree: http://git-wip-us.apache.org/repos/asf/activemq-artemis/tree/2cedcb8d Diff: http://git-wip-us.apache.org/repos/asf/activemq-artemis/diff/2cedcb8d Branch: refs/heads/2.6.x Commit: 2cedcb8d70fcf40c2fe9e9548cb046b93f8ce4b5 Parents: c74658e Author: Martyn Taylor <[email protected]> Authored: Sun Aug 12 15:12:11 2018 +0100 Committer: Clebert Suconic <[email protected]> Committed: Sun Aug 12 16:34:31 2018 -0400 ---------------------------------------------------------------------- .../core/client/impl/ClientMessageImpl.java | 3 ++- .../artemis/core/message/impl/CoreMessage.java | 2 +- .../tests/integration/ra/JMSContextTest.java | 26 ++++++++++++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/2cedcb8d/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientMessageImpl.java ---------------------------------------------------------------------- diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientMessageImpl.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientMessageImpl.java index 8068aa9..d14c64e 100644 --- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientMessageImpl.java +++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/client/impl/ClientMessageImpl.java @@ -189,7 +189,8 @@ public class ClientMessageImpl extends CoreMessage implements ClientMessageInter @Override public int getBodySize() { - return getBodyBuffer().writerIndex() - getBodyBuffer().readerIndex(); + checkEncode(); + return endOfBodyPosition - BUFFER_HEADER_SPACE; } @Override http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/2cedcb8d/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/impl/CoreMessage.java ---------------------------------------------------------------------- diff --git a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/impl/CoreMessage.java b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/impl/CoreMessage.java index 0918828..323d9f4 100644 --- a/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/impl/CoreMessage.java +++ b/artemis-core-client/src/main/java/org/apache/activemq/artemis/core/message/impl/CoreMessage.java @@ -308,7 +308,7 @@ public class CoreMessage extends RefCountMessage implements ICoreMessage { sendBuffer.readerIndex(0); } - private synchronized void checkEncode() { + protected synchronized void checkEncode() { if (!validBuffer) { encode(); } http://git-wip-us.apache.org/repos/asf/activemq-artemis/blob/2cedcb8d/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ra/JMSContextTest.java ---------------------------------------------------------------------- diff --git a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ra/JMSContextTest.java b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ra/JMSContextTest.java index 6956499..658b323 100644 --- a/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ra/JMSContextTest.java +++ b/tests/integration-tests/src/test/java/org/apache/activemq/artemis/tests/integration/ra/JMSContextTest.java @@ -16,8 +16,13 @@ */ package org.apache.activemq.artemis.tests.integration.ra; +import javax.jms.JMSConsumer; import javax.jms.JMSContext; +import javax.jms.JMSProducer; import javax.jms.JMSRuntimeException; +import javax.jms.MessageFormatRuntimeException; +import javax.jms.Queue; +import javax.jms.TextMessage; import javax.transaction.TransactionManager; import java.util.HashSet; import java.util.Set; @@ -143,4 +148,25 @@ public class JMSContextTest extends ActiveMQRATestBase { assertEquals(context.getSessionMode(), JMSContext.AUTO_ACKNOWLEDGE); } + @Test + public void testJMSContextConsumerThrowsMessageFormatExceptionOnMalformedBody() throws Exception { + Queue queue = createQueue(true, "ContextMalformedBodyTestQueue"); + + JMSContext context = qraConnectionFactory.createContext(); + JMSProducer producer = context.createProducer(); + + TextMessage message = context.createTextMessage("TestMessage"); + producer.send(queue, message); + + JMSConsumer consumer = context.createConsumer(queue); + + try { + consumer.receiveBody(Boolean.class); + fail("Should thrown MessageFormatException"); + } catch (MessageFormatRuntimeException mfre) { + // Do nothing test passed + } catch (Exception e) { + fail("Threw wrong exception, should be MessageFormatRuntimeException, instead got: " + e.getClass().getCanonicalName()); + } + } }
