You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by ro...@apache.org on 2023/02/15 17:09:44 UTC
[qpid-jms] branch main updated: QPIDJMS-584: ensure JMSProducer#send(...body) methods handle null Map and byte[] bodies as expected
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 <ro...@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-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org