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/11/10 21:34:28 UTC
qpid-jms git commit: QPIDJMS-207 Fixes for getBody handling on
BytesMessage
Repository: qpid-jms
Updated Branches:
refs/heads/master e2be3757c -> d5109cf83
QPIDJMS-207 Fixes for getBody handling on BytesMessage
Properly handle the getBody calls and report error or return null as
required by the JMS 2.0 specification, tests added.
Project: http://git-wip-us.apache.org/repos/asf/qpid-jms/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-jms/commit/d5109cf8
Tree: http://git-wip-us.apache.org/repos/asf/qpid-jms/tree/d5109cf8
Diff: http://git-wip-us.apache.org/repos/asf/qpid-jms/diff/d5109cf8
Branch: refs/heads/master
Commit: d5109cf83edf64dfd8d82c560c92177c6edfd7f5
Parents: e2be375
Author: Timothy Bish <ta...@gmail.com>
Authored: Thu Nov 10 16:34:16 2016 -0500
Committer: Timothy Bish <ta...@gmail.com>
Committed: Thu Nov 10 16:34:16 2016 -0500
----------------------------------------------------------------------
.../qpid/jms/message/JmsBytesMessage.java | 2 +
.../amqp/message/AmqpJmsBytesMessageFacade.java | 6 +-
.../qpid/jms/message/JmsBytesMessageTest.java | 16 +++++
.../apache/qpid/jms/message/JmsMessageTest.java | 2 +
.../facade/test/JmsTestBytesMessageFacade.java | 2 +-
.../message/AmqpJmsBytesMessageFacadeTest.java | 69 ++++++++++++++++++++
6 files changed, 95 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/d5109cf8/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsBytesMessage.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsBytesMessage.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsBytesMessage.java
index 887cada..afb112c 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsBytesMessage.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/message/JmsBytesMessage.java
@@ -410,6 +410,8 @@ public class JmsBytesMessage extends JmsMessage implements BytesMessage {
@Override
protected <T> T doGetBody(Class<T> asType) throws JMSException {
+ reset();
+
if (!facade.hasBody()) {
return null;
}
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/d5109cf8/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 b6f98fb..b84d492 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
@@ -194,7 +194,11 @@ public class AmqpJmsBytesMessageFacade extends AmqpJmsMessageFacade implements J
@Override
public boolean hasBody() {
- return getBinaryFromBody().getLength() != 0;
+ if (bytesOut != null) {
+ return bytesOut.writtenBytes() > 0;
+ } else {
+ return getBinaryFromBody().getLength() != 0;
+ }
}
@Override
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/d5109cf8/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsBytesMessageTest.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsBytesMessageTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsBytesMessageTest.java
index 1da7b4d..e7711ce 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsBytesMessageTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsBytesMessageTest.java
@@ -960,6 +960,22 @@ public class JmsBytesMessageTest {
}
}
+ @Test
+ public void testGetBodyThrowsMessageFormatException() throws JMSException {
+ JmsBytesMessage bytesMessage = factory.createBytesMessage();
+ bytesMessage.setStringProperty("property", "value");
+ bytesMessage.writeByte((byte) 1);
+ bytesMessage.writeInt(22);
+
+ try {
+ bytesMessage.getBody(StringBuffer.class);
+ fail("should have thrown MessageFormatException");
+ } catch (MessageFormatException mfe) {
+ } catch (Exception e) {
+ fail("should have thrown MessageFormatException");
+ }
+ }
+
//---------- Test for misc message methods -------------------------------//
@Test
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/d5109cf8/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMessageTest.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMessageTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMessageTest.java
index 427027c..e13337a 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMessageTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/JmsMessageTest.java
@@ -1768,6 +1768,8 @@ public class JmsMessageTest {
assertNull(message.getBody(byte[].class));
assertNull(message.getBody(Object.class));
+ message.clearBody();
+
message.writeUTF("test");
message.reset();
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/d5109cf8/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/facade/test/JmsTestBytesMessageFacade.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/facade/test/JmsTestBytesMessageFacade.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/facade/test/JmsTestBytesMessageFacade.java
index 94b8180..6cfda49 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/facade/test/JmsTestBytesMessageFacade.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/message/facade/test/JmsTestBytesMessageFacade.java
@@ -136,7 +136,7 @@ public final class JmsTestBytesMessageFacade extends JmsTestMessageFacade implem
@Override
public boolean hasBody() {
- return content.isReadable();
+ return content.isReadable() || (bytesOut != null && bytesOut.writtenBytes() > 0);
}
@Override
http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/d5109cf8/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 f2a25cd..3dacf29 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
@@ -20,6 +20,7 @@ import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.JMS_B
import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.JMS_MSG_TYPE;
import static org.apache.qpid.jms.provider.amqp.message.AmqpMessageSupport.getSymbol;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertSame;
import static org.junit.Assert.assertTrue;
@@ -523,6 +524,74 @@ public class AmqpJmsBytesMessageFacadeTest extends AmqpJmsMessageTypesTestCase {
amqpBytesMessageFacade.reset();
}
+ //--------- hasBody tests ---------------
+
+ @Test
+ public void testHasBodyOnNewMessage() throws Exception {
+ AmqpJmsBytesMessageFacade amqpBytesMessageFacade = createNewBytesMessageFacade();
+
+ assertFalse(amqpBytesMessageFacade.hasBody());
+ }
+
+ @Test
+ public void testHasBodyWithContent() throws Exception {
+ byte[] bodyBytes = "myOrigBytes".getBytes();
+
+ Message message = Message.Factory.create();
+ message.setBody(new Data(new Binary(bodyBytes)));
+ AmqpJmsBytesMessageFacade amqpBytesMessageFacade = createReceivedBytesMessageFacade(createMockAmqpConsumer(), message);
+
+ assertTrue(amqpBytesMessageFacade.hasBody());
+ }
+
+ @Test
+ public void testHasBodyAfterClear() throws Exception {
+ byte[] bodyBytes = "myOrigBytes".getBytes();
+
+ Message message = Message.Factory.create();
+ message.setBody(new Data(new Binary(bodyBytes)));
+ AmqpJmsBytesMessageFacade amqpBytesMessageFacade = createReceivedBytesMessageFacade(createMockAmqpConsumer(), message);
+
+ assertTrue(amqpBytesMessageFacade.hasBody());
+
+ amqpBytesMessageFacade.clearBody();
+
+ assertFalse(amqpBytesMessageFacade.hasBody());
+ }
+
+ @Test
+ public void testHasBodyWithActiveInputStream() throws Exception {
+ byte[] bodyBytes = "myOrigBytes".getBytes();
+
+ Message message = Message.Factory.create();
+ message.setBody(new Data(new Binary(bodyBytes)));
+ AmqpJmsBytesMessageFacade amqpBytesMessageFacade = createReceivedBytesMessageFacade(createMockAmqpConsumer(), message);
+
+ assertTrue(amqpBytesMessageFacade.hasBody());
+
+ amqpBytesMessageFacade.getInputStream();
+
+ assertTrue(amqpBytesMessageFacade.hasBody());
+ }
+
+ @Test
+ public void testHasBodyWithActiveOutputStream() throws Exception {
+ AmqpJmsBytesMessageFacade amqpBytesMessageFacade = createNewBytesMessageFacade();
+
+ assertFalse(amqpBytesMessageFacade.hasBody());
+
+ OutputStream output = amqpBytesMessageFacade.getOutputStream();
+
+ assertFalse(amqpBytesMessageFacade.hasBody());
+
+ output.write(1);
+
+ // Body exists after some data written.
+ assertTrue(amqpBytesMessageFacade.hasBody());
+ amqpBytesMessageFacade.reset();
+ assertTrue(amqpBytesMessageFacade.hasBody());
+ }
+
//--------- utility methods ----------
private void assertDataBodyAsExpected(Section body, int length) {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org