This is an automated email from the ASF dual-hosted git repository. robbie pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/qpid-jms.git
The following commit(s) were added to refs/heads/main by this push: new 5db8d957 QPIDJMS-584: ensure JMSProducer#send(...body) methods handle null Map and byte[] bodies as expected 5db8d957 is described below commit 5db8d957d7d615c0b5f5ac7047b4eff99d45cbe6 Author: Robbie Gemmell <rob...@apache.org> AuthorDate: Wed Feb 15 17:02:33 2023 +0000 QPIDJMS-584: ensure JMSProducer#send(...body) methods handle null Map and byte[] bodies as expected --- .../main/java/org/apache/qpid/jms/JmsProducer.java | 10 ++- .../apache/qpid/jms/producer/JmsProducerTest.java | 74 +++++++++++++++++++++- 2 files changed, 78 insertions(+), 6 deletions(-) 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 2ad881f0..8be161f1 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 @@ -99,7 +99,9 @@ public class JmsProducer implements JMSProducer { public JMSProducer send(Destination destination, byte[] body) { try { BytesMessage message = session.createBytesMessage(); - message.writeBytes(body); + if (body != null) { + message.writeBytes(body); + } doSend(destination, message); } catch (JMSException jmse) { throw JmsExceptionSupport.createRuntimeException(jmse); @@ -112,8 +114,10 @@ public class JmsProducer implements JMSProducer { public JMSProducer send(Destination destination, Map<String, Object> body) { try { MapMessage message = session.createMapMessage(); - for (Map.Entry<String, Object> entry : body.entrySet()) { - message.setObject(entry.getKey(), entry.getValue()); + if (body != null) { + for (Map.Entry<String, Object> entry : body.entrySet()) { + message.setObject(entry.getKey(), entry.getValue()); + } } doSend(destination, message); 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 a8c6da39..f7418158 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 @@ -41,6 +41,7 @@ import java.util.HashMap; import java.util.Map; import java.util.UUID; +import jakarta.jms.BytesMessage; import jakarta.jms.CompletionListener; import jakarta.jms.DeliveryMode; import jakarta.jms.Destination; @@ -51,9 +52,12 @@ import jakarta.jms.InvalidDestinationRuntimeException; import jakarta.jms.JMSException; import jakarta.jms.JMSProducer; import jakarta.jms.JMSRuntimeException; +import jakarta.jms.MapMessage; import jakarta.jms.Message; import jakarta.jms.MessageFormatRuntimeException; +import jakarta.jms.ObjectMessage; import jakarta.jms.Queue; +import jakarta.jms.TextMessage; import org.apache.qpid.jms.JmsConnection; import org.apache.qpid.jms.JmsConnectionTestSupport; @@ -1004,18 +1008,18 @@ public class JmsProducerTest extends JmsConnectionTestSupport { doTestSendAppliesDeliveryModeWithMessageBody(UUID.class); } - public void doTestSendAppliesDeliveryModeWithMessageBody(Class<?> bodyType) throws JMSException { + private void doTestSendAppliesDeliveryModeWithMessageBody(Class<?> bodyType) throws JMSException { JMSProducer producer = context.createProducer(); producer.setDeliveryMode(DeliveryMode.PERSISTENT); - producer.send(JMS_DESTINATION, "text"); + sendWithBodyOfType(producer, bodyType); JmsOutboundMessageDispatch envelope = remotePeer.getLastReceivedMessage(); assertNotNull(envelope); JmsMessage message = envelope.getMessage(); assertEquals(DeliveryMode.PERSISTENT, message.getJMSDeliveryMode()); producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); - producer.send(JMS_DESTINATION, "text"); + sendWithBodyOfType(producer, bodyType); envelope = remotePeer.getLastReceivedMessage(); assertNotNull(envelope); message = envelope.getMessage(); @@ -1206,9 +1210,25 @@ public class JmsProducerTest extends JmsConnectionTestSupport { JmsOutboundMessageDispatch envelope = remotePeer.getLastReceivedMessage(); assertNotNull(envelope); JmsMessage message = envelope.getMessage(); + assertTrue(message instanceof TextMessage); assertEquals(bodyValue, message.getBody(String.class)); } + @Test + public void testStringNullBodyGivesEmptyMessage() throws JMSException { + JMSProducer producer = context.createProducer(); + + final String nullStringBody = null; + producer.send(JMS_DESTINATION, nullStringBody); + + JmsOutboundMessageDispatch envelope = remotePeer.getLastReceivedMessage(); + assertNotNull(envelope); + + JmsMessage message = envelope.getMessage(); + assertTrue(message instanceof TextMessage); + assertNull(message.getBody(String.class)); + } + @Test public void testMapBodyIsApplied() throws JMSException { JMSProducer producer = context.createProducer(); @@ -1222,9 +1242,25 @@ public class JmsProducerTest extends JmsConnectionTestSupport { JmsOutboundMessageDispatch envelope = remotePeer.getLastReceivedMessage(); assertNotNull(envelope); JmsMessage message = envelope.getMessage(); + assertTrue(message instanceof MapMessage); assertEquals(bodyValue, message.getBody(Map.class)); } + @Test + public void testMapNullBodyGivesEmptyMessage() throws JMSException { + JMSProducer producer = context.createProducer(); + + final Map<String, Object> nullMapBody = null; + producer.send(JMS_DESTINATION, nullMapBody); + + JmsOutboundMessageDispatch envelope = remotePeer.getLastReceivedMessage(); + assertNotNull(envelope); + + JmsMessage message = envelope.getMessage(); + assertTrue(message instanceof MapMessage); + assertNull(message.getBody(Map.class)); + } + @Test public void testBytesBodyIsApplied() throws JMSException { JMSProducer producer = context.createProducer(); @@ -1235,6 +1271,7 @@ public class JmsProducerTest extends JmsConnectionTestSupport { JmsOutboundMessageDispatch envelope = remotePeer.getLastReceivedMessage(); assertNotNull(envelope); JmsMessage message = envelope.getMessage(); + assertTrue(message instanceof BytesMessage); byte[] payload = message.getBody(byte[].class); assertNotNull(payload); @@ -1245,6 +1282,21 @@ public class JmsProducerTest extends JmsConnectionTestSupport { } } + @Test + public void testBytesNullBodyGivesEmptyMessage() throws JMSException { + JMSProducer producer = context.createProducer(); + + final byte[] nullBytesBody = null; + producer.send(JMS_DESTINATION, nullBytesBody); + + JmsOutboundMessageDispatch envelope = remotePeer.getLastReceivedMessage(); + assertNotNull(envelope); + + JmsMessage message = envelope.getMessage(); + assertTrue(message instanceof BytesMessage); + assertNull(message.getBody(byte[].class)); + } + @Test public void testSerializableBodyIsApplied() throws JMSException { JMSProducer producer = context.createProducer(); @@ -1255,9 +1307,25 @@ public class JmsProducerTest extends JmsConnectionTestSupport { JmsOutboundMessageDispatch envelope = remotePeer.getLastReceivedMessage(); assertNotNull(envelope); JmsMessage message = envelope.getMessage(); + assertTrue(message instanceof ObjectMessage); assertEquals(bodyValue, message.getBody(UUID.class)); } + @Test + public void testSerializableNullBodyGivesEmptyMessage() throws JMSException { + JMSProducer producer = context.createProducer(); + + final UUID nullSerializableBody = null; + producer.send(JMS_DESTINATION, nullSerializableBody); + + JmsOutboundMessageDispatch envelope = remotePeer.getLastReceivedMessage(); + assertNotNull(envelope); + + JmsMessage message = envelope.getMessage(); + assertTrue(message instanceof ObjectMessage); + assertNull(message.getBody(byte[].class)); + } + //----- Test for conversions to JMSRuntimeException ----------------------// @Test --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org