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