QPID-7897, QPID-7899: [Java Client, AMQP 0-x] Do not convert to/from String in Message#set-/getJMSCorrelationIDAsBytes()
diff --git a/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10.java b/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10.java
index 398a6e8..dde0a1b 100644
--- a/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10.java
+++ b/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_10.java
@@ -21,6 +21,7 @@
package org.apache.qpid.client.message;
+import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
@@ -252,15 +253,13 @@
public void setJMSCorrelationID(String correlationId) throws JMSException
{
-
- setJMSCorrelationIDAsBytes(correlationId == null ? null : correlationId.getBytes());
+ setJMSCorrelationIDAsBytes(correlationId == null ? null : correlationId.getBytes(StandardCharsets.UTF_8));
}
public String getJMSCorrelationID() throws JMSException
{
-
byte[] correlationIDAsBytes = getJMSCorrelationIDAsBytes();
- return correlationIDAsBytes == null ? null : new String(correlationIDAsBytes);
+ return correlationIDAsBytes == null ? null : new String(correlationIDAsBytes, StandardCharsets.UTF_8);
}
public Destination getJMSReplyTo()
diff --git a/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_8.java b/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_8.java
index 8e8e00d..cb61770 100644
--- a/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_8.java
+++ b/client/src/main/java/org/apache/qpid/client/message/AMQMessageDelegate_0_8.java
@@ -252,12 +252,13 @@
public byte[] getJMSCorrelationIDAsBytes() throws JMSException
{
- return getContentHeaderProperties().getCorrelationIdAsString().getBytes();
+ final AMQShortString correlationId = getContentHeaderProperties().getCorrelationId();
+ return correlationId == null ? null : correlationId.getBytes();
}
public void setJMSCorrelationIDAsBytes(byte[] bytes) throws JMSException
{
- getContentHeaderProperties().setCorrelationId(new String(bytes));
+ getContentHeaderProperties().setCorrelationId(new AMQShortString(bytes));
}
public void setJMSCorrelationID(String correlationId) throws JMSException
diff --git a/client/src/test/java/org/apache/qpid/test/unit/message/MessageTest.java b/client/src/test/java/org/apache/qpid/test/unit/message/MessageTest.java
new file mode 100644
index 0000000..fc263d2
--- /dev/null
+++ b/client/src/test/java/org/apache/qpid/test/unit/message/MessageTest.java
@@ -0,0 +1,28 @@
+package org.apache.qpid.test.unit.message;
+
+import static org.junit.Assert.assertArrayEquals;
+
+import org.apache.qpid.client.message.AMQMessageDelegateFactory;
+import org.apache.qpid.client.message.JMSTextMessage;
+import org.apache.qpid.test.utils.QpidTestCase;
+
+public class MessageTest extends QpidTestCase
+{
+ private JMSTextMessage _testTextMessage;
+
+ @Override
+ protected void setUp() throws Exception
+ {
+ super.setUp();
+ _testTextMessage = new JMSTextMessage(AMQMessageDelegateFactory.FACTORY_0_8);
+ _testTextMessage.setText("testTextMessage text");
+ }
+
+ public void testJMSCorrelationIdAdBytesWithNonUtf8Bytes() throws Exception
+ {
+ // QPID-7897 and QPID-7899
+ byte[] correlationId = new byte[]{(byte) 0xc3, 0x28};
+ _testTextMessage.setJMSCorrelationIDAsBytes(correlationId);
+ assertArrayEquals("", correlationId, _testTextMessage.getJMSCorrelationIDAsBytes());
+ }
+}