Repository: qpid-broker-j
Updated Branches:
  refs/heads/master a10f3063b -> d12b40a4d


QPID-7434: [Java Broker] Fix AMQP 0-10 to 1.0 correlationId conversion


Project: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/commit/d12b40a4
Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/d12b40a4
Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/d12b40a4

Branch: refs/heads/master
Commit: d12b40a4d066d79e5dc38b7b137a73b776817f0a
Parents: a7e4a71
Author: Lorenz Quack <lqu...@apache.org>
Authored: Wed Aug 23 15:30:22 2017 +0100
Committer: Lorenz Quack <lqu...@apache.org>
Committed: Wed Aug 23 16:36:38 2017 +0100

----------------------------------------------------------------------
 .../MessageConverter_0_10_to_1_0.java           | 25 ++++++++++++++++----
 .../PropertyConverter_0_10_to_1_0Test.java      | 23 ++++++++++++++----
 2 files changed, 39 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/d12b40a4/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/MessageConverter_0_10_to_1_0.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/MessageConverter_0_10_to_1_0.java
 
b/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/MessageConverter_0_10_to_1_0.java
index 5bdfbf5..af4bd9a 100644
--- 
a/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/MessageConverter_0_10_to_1_0.java
+++ 
b/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/MessageConverter_0_10_to_1_0.java
@@ -21,6 +21,11 @@
 
 package org.apache.qpid.server.protocol.converter.v0_10_v1_0;
 
+import java.nio.ByteBuffer;
+import java.nio.charset.CharacterCodingException;
+import java.nio.charset.CharsetDecoder;
+import java.nio.charset.CodingErrorAction;
+import java.nio.charset.StandardCharsets;
 import java.util.Date;
 import java.util.LinkedHashMap;
 import java.util.Map;
@@ -28,6 +33,9 @@ import java.util.Map;
 import org.apache.qpid.server.plugin.PluggableService;
 import org.apache.qpid.server.protocol.converter.MessageConversionException;
 import org.apache.qpid.server.protocol.v0_10.MessageTransferMessage;
+import org.apache.qpid.server.protocol.v0_10.transport.DeliveryProperties;
+import org.apache.qpid.server.protocol.v0_10.transport.MessageDeliveryMode;
+import org.apache.qpid.server.protocol.v0_10.transport.MessageProperties;
 import org.apache.qpid.server.protocol.v0_10.transport.ReplyTo;
 import org.apache.qpid.server.protocol.v1_0.MessageConverter_to_1_0;
 import org.apache.qpid.server.protocol.v1_0.MessageMetaData_1_0;
@@ -37,15 +45,11 @@ import org.apache.qpid.server.protocol.v1_0.type.Symbol;
 import org.apache.qpid.server.protocol.v1_0.type.UnsignedByte;
 import org.apache.qpid.server.protocol.v1_0.type.UnsignedInteger;
 import 
org.apache.qpid.server.protocol.v1_0.type.messaging.ApplicationProperties;
-import org.apache.qpid.server.protocol.v1_0.type.messaging.Data;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.DataSection;
 import 
org.apache.qpid.server.protocol.v1_0.type.messaging.EncodingRetainingSection;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.Header;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.MessageAnnotations;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.Properties;
-import org.apache.qpid.server.protocol.v0_10.transport.DeliveryProperties;
-import org.apache.qpid.server.protocol.v0_10.transport.MessageDeliveryMode;
-import org.apache.qpid.server.protocol.v0_10.transport.MessageProperties;
 import org.apache.qpid.server.util.GZIPUtils;
 
 @PluggableService
@@ -123,7 +127,18 @@ public class MessageConverter_0_10_to_1_0  extends 
MessageConverter_to_1_0<Messa
 
             if(msgProps.hasCorrelationId())
             {
-                props.setCorrelationId(new 
Binary(msgProps.getCorrelationId()));
+                CharsetDecoder charsetDecoder = 
StandardCharsets.UTF_8.newDecoder()
+                                                                      
.onMalformedInput(CodingErrorAction.REPORT)
+                                                                      
.onUnmappableCharacter(CodingErrorAction.REPORT);
+                try
+                {
+                    String correlationIdAsString = 
charsetDecoder.decode(ByteBuffer.wrap(msgProps.getCorrelationId())).toString();
+                    props.setCorrelationId(correlationIdAsString);
+                }
+                catch (CharacterCodingException e)
+                {
+                    props.setCorrelationId(new 
Binary(msgProps.getCorrelationId()));
+                }
             }
 
             if(msgProps.hasMessageId())

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/d12b40a4/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/PropertyConverter_0_10_to_1_0Test.java
----------------------------------------------------------------------
diff --git 
a/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/PropertyConverter_0_10_to_1_0Test.java
 
b/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/PropertyConverter_0_10_to_1_0Test.java
index 30eed53..f9b90f6 100644
--- 
a/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/PropertyConverter_0_10_to_1_0Test.java
+++ 
b/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/PropertyConverter_0_10_to_1_0Test.java
@@ -22,6 +22,7 @@
 package org.apache.qpid.server.protocol.converter.v0_10_v1_0;
 
 import static java.nio.charset.StandardCharsets.UTF_8;
+import static org.junit.Assert.assertArrayEquals;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
@@ -178,15 +179,29 @@ public class PropertyConverter_0_10_to_1_0Test extends 
QpidTestCase
     {
         final String correlationId = "testCorrelationId";
         final MessageProperties messageProperties = new MessageProperties();
-        messageProperties.setCorrelationId(correlationId.getBytes());
+        messageProperties.setCorrelationId(correlationId.getBytes(UTF_8));
         MessageTransferMessage message = createTestMessage(messageProperties);
 
         final Message_1_0 convertedMessage = 
_messageConverter.convert(message, _namedAddressSpace);
 
         Properties properties = 
convertedMessage.getPropertiesSection().getValue();
-        assertEquals("Unexpected correlationId",
-                     correlationId,
-                     new String(((Binary) 
properties.getCorrelationId()).getArray(), UTF_8));
+        assertEquals("Unexpected correlationId", correlationId, 
properties.getCorrelationId());
+    }
+
+    public void testBinaryCorrelationIdConversion()
+    {
+        final byte[] correlationId = new byte[]{0x00, (byte) 0xff, (byte) 
0xc3};
+        final MessageProperties messageProperties = new MessageProperties();
+        messageProperties.setCorrelationId(correlationId);
+        MessageTransferMessage message = createTestMessage(messageProperties);
+
+        final Message_1_0 convertedMessage = 
_messageConverter.convert(message, _namedAddressSpace);
+
+        Properties properties = 
convertedMessage.getPropertiesSection().getValue();
+        assertTrue(String.format("Unexpected correlationId type. expected 
'Binary' actual '%s'",
+                                 
properties.getCorrelationId().getClass().getSimpleName()),
+                   properties.getCorrelationId() instanceof Binary);
+        assertArrayEquals("Unexpected correlationId", correlationId, ((Binary) 
properties.getCorrelationId()).getArray());
     }
 
     public void testReplyToConversionWhenExchangeAndRoutingKeySpecified()


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org
For additional commands, e-mail: commits-h...@qpid.apache.org

Reply via email to