This is an automated email from the ASF dual-hosted git repository.

coheigea pushed a commit to branch coheigea/jms-binary
in repository https://gitbox.apache.org/repos/asf/cxf.git

commit 98d6b42b4715bb0cad277272344b21f496ea45e9
Author: Colm O hEigeartaigh <[email protected]>
AuthorDate: Tue Jul 21 15:15:28 2026 +0100

    Default to sending binary JMS messages as BytesMessages from now on, make 
it configurable
---
 .../apache/cxf/transport/jms/JMSConfiguration.java   |  9 +++++++++
 .../apache/cxf/transport/jms/JMSMessageUtils.java    |  3 ++-
 .../org/apache/cxf/transport/jms/util/JMSUtil.java   | 20 +++++++++++++++++++-
 .../apache/cxf/transport/jms/util/JMSUtilTest.java   | 13 +++++++++++++
 4 files changed, 43 insertions(+), 2 deletions(-)

diff --git 
a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java
 
b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java
index fd1817277f2..b72a111885d 100644
--- 
a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java
+++ 
b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java
@@ -87,6 +87,7 @@ public class JMSConfiguration {
     private volatile Destination replyToDestinationDest;
 
     private String messageType = JMSConstants.TEXT_MESSAGE_TYPE;
+    private boolean useObjectMessageFallback;
     private boolean pubSubDomain;
     private boolean replyPubSubDomain;
 
@@ -284,6 +285,14 @@ public class JMSConfiguration {
         this.messageType = messageType;
     }
 
+    public boolean isUseObjectMessageFallback() {
+        return useObjectMessageFallback;
+    }
+
+    public void setUseObjectMessageFallback(boolean useObjectMessageFallback) {
+        this.useObjectMessageFallback = useObjectMessageFallback;
+    }
+
     public boolean isPubSubDomain() {
         return pubSubDomain;
     }
diff --git 
a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSMessageUtils.java
 
b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSMessageUtils.java
index b3f75f4c770..5e28ebbad4c 100644
--- 
a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSMessageUtils.java
+++ 
b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSMessageUtils.java
@@ -186,7 +186,8 @@ final class JMSMessageUtils {
                                        String headerType)
         throws JMSException {
 
-        Message jmsMessage = JMSUtil.createAndSetPayload(payload, session, 
messageType);
+        Message jmsMessage = JMSUtil.createAndSetPayload(payload, session, 
messageType,
+                                                         
jmsConfig.isUseObjectMessageFallback());
         JMSMessageHeadersType messageHeaders = getOrCreateHeader(outMessage, 
headerType);
         if (!messageHeaders.isSetJMSDeliveryMode()) {
             messageHeaders.setJMSDeliveryMode(jmsConfig.getDeliveryMode());
diff --git 
a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/JMSUtil.java
 
b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/JMSUtil.java
index 9478732a96d..22b192bc12b 100644
--- 
a/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/JMSUtil.java
+++ 
b/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/util/JMSUtil.java
@@ -106,12 +106,30 @@ public final class JMSUtil {
      * @param messageType the JMS message type
      * @return a JMS of the appropriate type populated with the given payload
      */
+    @Deprecated(since = "4.2.3", forRemoval = true)
     public static Message createAndSetPayload(Object payload, Session session, 
String messageType)
         throws JMSException {
+        return createAndSetPayload(payload, session, messageType, true);
+    }
+
+    /**
+     * Create a JMS of the appropriate type populated with the given payload.
+     *
+     * @param payload the message payload, expected to be either of type 
String or byte[] depending on payload
+     *            type
+     * @param session the JMS session
+     * @param messageType the JMS message type
+     * @param useObjectMessageFallback whether non-text payloads should fall 
back to ObjectMessage
+     * @return a JMS of the appropriate type populated with the given payload
+     */
+    public static Message createAndSetPayload(Object payload, Session session, 
String messageType,
+                                              boolean useObjectMessageFallback)
+        throws JMSException {
         final Message message;
         if (JMSConstants.TEXT_MESSAGE_TYPE.equals(messageType)) {
             message = session.createTextMessage((String)payload);
-        } else if (JMSConstants.BYTE_MESSAGE_TYPE.equals(messageType)) {
+        } else if (JMSConstants.BYTE_MESSAGE_TYPE.equals(messageType)
+            || !useObjectMessageFallback) {
             message = session.createBytesMessage();
             ((BytesMessage)message).writeBytes((byte[])payload);
         } else {
diff --git 
a/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/util/JMSUtilTest.java
 
b/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/util/JMSUtilTest.java
index 25143c0b20c..5345b9bf540 100644
--- 
a/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/util/JMSUtilTest.java
+++ 
b/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/util/JMSUtilTest.java
@@ -27,6 +27,7 @@ import java.util.concurrent.atomic.AtomicLong;
 import jakarta.jms.BytesMessage;
 import jakarta.jms.Connection;
 import jakarta.jms.JMSException;
+import jakarta.jms.ObjectMessage;
 import jakarta.jms.Session;
 import org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory;
 import org.apache.activemq.artemis.junit.EmbeddedActiveMQResource;
@@ -84,6 +85,18 @@ public class JMSUtilTest {
             jakarta.jms.Message jmsMessage =
                 JMSUtil.createAndSetPayload(testBytes, session, 
JMSConstants.BYTE_MESSAGE_TYPE);
             assertTrue("Message should have been of type BytesMessage ", 
jmsMessage instanceof BytesMessage);
+            jmsMessage = JMSUtil.createAndSetPayload(testBytes, session, 
JMSConstants.BINARY_MESSAGE_TYPE);
+            assertTrue("Binary message fallback should have been of type 
ObjectMessage ",
+                       jmsMessage instanceof ObjectMessage);
+            jmsMessage = JMSUtil.createAndSetPayload(testBytes, session, 
JMSConstants.BINARY_MESSAGE_TYPE, false);
+            assertTrue("Fallback-disabled binary message should have been of 
type BytesMessage ",
+                       jmsMessage instanceof BytesMessage);
+            jmsMessage = JMSUtil.createAndSetPayload(testBytes, session, 
"application/octet-stream", true);
+            assertTrue("Non-text message fallback should have been of type 
ObjectMessage ",
+                       jmsMessage instanceof ObjectMessage);
+            jmsMessage = JMSUtil.createAndSetPayload(testBytes, session, 
"application/octet-stream", false);
+            assertTrue("Fallback-disabled message should have been of type 
BytesMessage ",
+                       jmsMessage instanceof BytesMessage);
         }
 
     }

Reply via email to