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 02:42:40 UTC

qpid-jms git commit: QPIDJMS-207 Handle null message passed to send calls

Repository: qpid-jms
Updated Branches:
  refs/heads/master fdedbd246 -> 28b3810a1


QPIDJMS-207 Handle null message passed to send calls

Throw the correct exception when a null message gets passed to a send
method (MessageFormatException) instead of waiting to hit an NPE

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

Branch: refs/heads/master
Commit: 28b3810a11bb0c1a5b3033b90bdc25344116b564
Parents: fdedbd2
Author: Timothy Bish <ta...@gmail.com>
Authored: Wed Nov 9 21:42:19 2016 -0500
Committer: Timothy Bish <ta...@gmail.com>
Committed: Wed Nov 9 21:42:19 2016 -0500

----------------------------------------------------------------------
 .../java/org/apache/qpid/jms/JmsProducer.java   |  5 ++
 .../java/org/apache/qpid/jms/JmsSession.java    |  5 ++
 .../jms/producer/JmsMessageProducerTest.java    | 69 ++++++++++++++++++++
 .../qpid/jms/producer/JmsProducerTest.java      | 16 +++++
 4 files changed, 95 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/28b3810a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsProducer.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsProducer.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsProducer.java
index 11392f6..3071009 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsProducer.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsProducer.java
@@ -34,6 +34,7 @@ import javax.jms.JMSException;
 import javax.jms.JMSProducer;
 import javax.jms.MapMessage;
 import javax.jms.Message;
+import javax.jms.MessageFormatException;
 import javax.jms.ObjectMessage;
 import javax.jms.TextMessage;
 
@@ -149,6 +150,10 @@ public class JmsProducer implements JMSProducer {
 
     private void doSend(Destination destination, Message message) throws JMSException {
 
+        if (message == null) {
+            throw new MessageFormatException("Message must not be null");
+        }
+
         for (Map.Entry<String, Object> entry : messageProperties.entrySet()) {
             message.setObjectProperty(entry.getKey(), entry.getValue());
         }

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/28b3810a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsSession.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsSession.java b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsSession.java
index 0bca8bc..e6c85cc 100644
--- a/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsSession.java
+++ b/qpid-jms-client/src/main/java/org/apache/qpid/jms/JmsSession.java
@@ -44,6 +44,7 @@ import javax.jms.JMSException;
 import javax.jms.MapMessage;
 import javax.jms.Message;
 import javax.jms.MessageConsumer;
+import javax.jms.MessageFormatException;
 import javax.jms.MessageListener;
 import javax.jms.MessageProducer;
 import javax.jms.ObjectMessage;
@@ -715,6 +716,10 @@ public class JmsSession implements AutoCloseable, Session, QueueSession, TopicSe
             throw new InvalidDestinationException("Destination must not be null");
         }
 
+        if (msg == null) {
+            throw new MessageFormatException("Message must not be null");
+        }
+
         JmsDestination destination = JmsMessageTransformation.transformDestination(connection, dest);
 
         if (destination.isTemporary() && ((JmsTemporaryDestination) destination).isDeleted()) {

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/28b3810a/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsMessageProducerTest.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsMessageProducerTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsMessageProducerTest.java
index 87f94c8..c0c92c3 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsMessageProducerTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsMessageProducerTest.java
@@ -36,6 +36,7 @@ import javax.jms.IllegalStateException;
 import javax.jms.InvalidDestinationException;
 import javax.jms.JMSException;
 import javax.jms.Message;
+import javax.jms.MessageFormatException;
 import javax.jms.MessageProducer;
 import javax.jms.Session;
 
@@ -328,6 +329,74 @@ public class JmsMessageProducerTest extends JmsConnectionTestSupport {
     }
 
     @Test(timeout = 10000)
+    public void testAnonymousProducerThrowsMFEWhenNullMessageProvided() throws Exception {
+        JmsDestination dest = new JmsQueue("explicitDestination");
+        JmsMessageProducer producer = (JmsMessageProducer) session.createProducer(null);
+
+        try {
+            producer.send(dest, (Message) null);
+            fail("Expected exception not thrown");
+        } catch (MessageFormatException mfe) {
+            // expected
+        }
+
+        try {
+            producer.send(dest, (Message) null, completionListener);
+            fail("Expected exception not thrown");
+        } catch (MessageFormatException mfe) {
+            // expected
+        }
+
+        try {
+            producer.send(dest, (Message) null, Message.DEFAULT_DELIVERY_MODE, Message.DEFAULT_PRIORITY, Message.DEFAULT_TIME_TO_LIVE);
+            fail("Expected exception not thrown");
+        } catch (MessageFormatException mfe) {
+            // expected
+        }
+
+        try {
+            producer.send(dest, (Message) null, Message.DEFAULT_DELIVERY_MODE, Message.DEFAULT_PRIORITY, Message.DEFAULT_TIME_TO_LIVE, completionListener);
+            fail("Expected exception not thrown");
+        } catch (MessageFormatException mfe) {
+            // expected
+        }
+    }
+
+    @Test(timeout = 10000)
+    public void testExplicitProducerThrowsMFEWhenNullMessageProvided() throws Exception {
+        JmsDestination dest = new JmsQueue("explicitDestination");
+        JmsMessageProducer producer = (JmsMessageProducer) session.createProducer(dest);
+
+        try {
+            producer.send((Message) null);
+            fail("Expected exception not thrown");
+        } catch (MessageFormatException mfe) {
+            // expected
+        }
+
+        try {
+            producer.send((Message) null, completionListener);
+            fail("Expected exception not thrown");
+        } catch (MessageFormatException mfe) {
+            // expected
+        }
+
+        try {
+            producer.send((Message) null, Message.DEFAULT_DELIVERY_MODE, Message.DEFAULT_PRIORITY, Message.DEFAULT_TIME_TO_LIVE);
+            fail("Expected exception not thrown");
+        } catch (MessageFormatException mfe) {
+            // expected
+        }
+
+        try {
+            producer.send((Message) null, Message.DEFAULT_DELIVERY_MODE, Message.DEFAULT_PRIORITY, Message.DEFAULT_TIME_TO_LIVE, completionListener);
+            fail("Expected exception not thrown");
+        } catch (MessageFormatException mfe) {
+            // expected
+        }
+    }
+
+    @Test(timeout = 10000)
     public void testInOrderSendAcksCompletionsReturnInOrder() throws Exception {
         final int MESSAGE_COUNT = 3;
 

http://git-wip-us.apache.org/repos/asf/qpid-jms/blob/28b3810a/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsProducerTest.java
----------------------------------------------------------------------
diff --git a/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsProducerTest.java b/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsProducerTest.java
index eeba336..5cc381e 100644
--- a/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsProducerTest.java
+++ b/qpid-jms-client/src/test/java/org/apache/qpid/jms/producer/JmsProducerTest.java
@@ -814,6 +814,22 @@ public class JmsProducerTest extends JmsConnectionTestSupport {
     //----- Test Send Methods -----------------------------------------------//
 
     @Test
+    public void testSendNullMessageThrowsMFRE() throws JMSException {
+        JmsSession session = Mockito.mock(JmsSession.class);
+        JmsMessageProducer messageProducer = Mockito.mock(JmsMessageProducer.class);
+
+        JmsProducer producer = new JmsProducer(session, messageProducer);
+
+        try {
+            producer.send(JMS_DESTINATION, (Message) null);
+            fail("Should throw a MessageFormatRuntimeException");
+        } catch (MessageFormatRuntimeException mfre) {
+        } catch (Exception e) {
+            fail("Should throw a MessageFormatRuntimeException");
+        }
+    }
+
+    @Test
     public void testSendJMSMessage() throws JMSException {
         JmsSession session = Mockito.mock(JmsSession.class);
         JmsMessageProducer messageProducer = Mockito.mock(JmsMessageProducer.class);


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