This is an automated email from the ASF dual-hosted git repository.
coheigea pushed a commit to branch 4.1.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git
The following commit(s) were added to refs/heads/4.1.x-fixes by this push:
new 765e14edd46 Make it configuration to send binary JMS messages as
BytesMessages
765e14edd46 is described below
commit 765e14edd462cbb487a45872d4630f2e31d9499b
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 | 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..5ea605793cd 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 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..d0cf6dc4e41 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 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);
}
}