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

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


The following commit(s) were added to refs/heads/3.6.x-fixes by this push:
     new 96916fdc0df Make it configuration to send binary JMS messages as 
BytesMessages
96916fdc0df is described below

commit 96916fdc0df37f56c4b58275a4bff1bfd3c96eae
Author: Colm O hEigeartaigh <[email protected]>
AuthorDate: Fri Jul 24 15:37:42 2026 +0100

    Make it configuration to send binary JMS messages as BytesMessages
    
    (cherry picked from commit 1695c05def5506db2c94de68f9ce835a18c1107d)
---
 .../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   | 15 ++++++++++++++-
 4 files changed, 44 insertions(+), 3 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 44e7477d379..42dd298b906 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 = true;
     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 06da1b4f2d9..dee29bd6459 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
@@ -187,7 +187,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 bc1e62821a6..363f1c63c39 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.1.8", 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 777ddd85f84..901b881a1ea 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 javax.jms.BytesMessage;
 import javax.jms.Connection;
 import javax.jms.JMSException;
+import javax.jms.ObjectMessage;
 import javax.jms.Session;
 
 import org.apache.activemq.ActiveMQConnectionFactory;
@@ -82,7 +83,19 @@ public class JMSUtilTest {
             javax.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);
         }
 
     }
-}
\ No newline at end of file
+}

Reply via email to