You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by lq...@apache.org on 2017/07/31 16:01:34 UTC

qpid-broker-j git commit: QPID-7434: Add missing properties conversion for message conversion layer from 1.0 to 0-10 and add unit tests

Repository: qpid-broker-j
Updated Branches:
  refs/heads/master f218a1dd8 -> a94d6ffe8


QPID-7434: Add missing properties conversion for message conversion layer from 1.0 to 0-10 and add unit tests

 * also fix some 1.0 to 0-8 conversion issues


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/a94d6ffe
Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/a94d6ffe
Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/a94d6ffe

Branch: refs/heads/master
Commit: a94d6ffe8e3afee7cf5e4db5ef061fbf432f8524
Parents: f218a1d
Author: Lorenz Quack <lq...@apache.org>
Authored: Mon Jul 31 16:58:00 2017 +0100
Committer: Lorenz Quack <lq...@apache.org>
Committed: Mon Jul 31 16:58:00 2017 +0100

----------------------------------------------------------------------
 .../v1_0/MessageConverter_from_1_0.java         | 125 +++
 .../MessageConverter_1_0_to_v0_10.java          | 344 ++++++-
 .../PropertyConverter_1_0_to_0_10Test.java      | 956 +++++++++++++++++++
 .../v0_8_v1_0/MessageConverter_1_0_to_v0_8.java | 195 ++--
 .../PropertyConverter_1_0_to_0_8Test.java       |   6 +-
 5 files changed, 1450 insertions(+), 176 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/a94d6ffe/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageConverter_from_1_0.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageConverter_from_1_0.java b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageConverter_from_1_0.java
index a7b7a0a..cf35014 100644
--- a/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageConverter_from_1_0.java
+++ b/broker-plugins/amqp-1-0-protocol/src/main/java/org/apache/qpid/server/protocol/v1_0/MessageConverter_from_1_0.java
@@ -49,6 +49,10 @@ import org.apache.qpid.server.protocol.v1_0.type.messaging.AmqpSequenceSection;
 import org.apache.qpid.server.protocol.v1_0.type.messaging.AmqpValueSection;
 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.HeaderSection;
+import org.apache.qpid.server.protocol.v1_0.type.messaging.Properties;
+import org.apache.qpid.server.protocol.v1_0.type.messaging.PropertiesSection;
 import org.apache.qpid.server.util.ConnectionScopedRuntimeException;
 
 public class MessageConverter_from_1_0
@@ -223,4 +227,125 @@ public class MessageConverter_from_1_0
         }
         return result;
     }
+
+    public static UnsignedInteger getGroupSequence(final Message_1_0 serverMsg)
+    {
+        final PropertiesSection propertiesSection = serverMsg.getPropertiesSection();
+        if (propertiesSection != null)
+        {
+            final Properties properties = propertiesSection.getValue();
+            if (properties != null)
+            {
+                return properties.getGroupSequence();
+            }
+        }
+        return null;
+    }
+
+    public static String getGroupId(final Message_1_0 serverMsg)
+    {
+        final PropertiesSection propertiesSection = serverMsg.getPropertiesSection();
+        if (propertiesSection != null)
+        {
+            final Properties properties = propertiesSection.getValue();
+            if (properties != null)
+            {
+                return properties.getGroupId();
+            }
+        }
+        return null;
+    }
+
+    public static Date getCreationTime(final Message_1_0 serverMsg)
+    {
+        final PropertiesSection propertiesSection = serverMsg.getPropertiesSection();
+        if (propertiesSection != null)
+        {
+            final Properties properties = propertiesSection.getValue();
+            if (properties != null)
+            {
+                return properties.getCreationTime();
+            }
+        }
+        return null;
+    }
+
+    public static Date getAbsoluteExpiryTime(final Message_1_0 serverMsg)
+    {
+        final PropertiesSection propertiesSection = serverMsg.getPropertiesSection();
+        if (propertiesSection != null)
+        {
+            final Properties properties = propertiesSection.getValue();
+            if (properties != null)
+            {
+                return properties.getAbsoluteExpiryTime();
+            }
+        }
+        return null;
+    }
+
+    public static Long getTtl(final Message_1_0 serverMsg)
+    {
+        HeaderSection headerSection = serverMsg.getHeaderSection();
+        if (headerSection != null)
+        {
+            Header header = headerSection.getValue();
+            if (header != null)
+            {
+                UnsignedInteger ttl = header.getTtl();
+                if (ttl != null)
+                {
+                    return ttl.longValue();
+                }
+            }
+        }
+        return null;
+    }
+
+    public static Binary getUserId(final Message_1_0 serverMsg)
+    {
+        Binary userId = null;
+        final PropertiesSection propertiesSection = serverMsg.getPropertiesSection();
+        if (propertiesSection != null)
+        {
+            final Properties properties = propertiesSection.getValue();
+            if (properties != null)
+            {
+                userId = properties.getUserId();
+            }
+        }
+        return userId;
+    }
+
+    public static Object getCorrelationId(final Message_1_0 serverMsg)
+    {
+        Object correlationIdObject = null;
+        final PropertiesSection propertiesSection = serverMsg.getPropertiesSection();
+        if (propertiesSection != null)
+        {
+            final Properties properties = propertiesSection.getValue();
+            if (properties != null)
+            {
+                correlationIdObject = properties.getCorrelationId();
+
+            }
+        }
+        return correlationIdObject;
+    }
+
+    public static Object getMessageId(final Message_1_0 serverMsg)
+    {
+        Object messageId = null;
+        final PropertiesSection propertiesSection = serverMsg.getPropertiesSection();
+        if (propertiesSection != null)
+        {
+            final Properties properties = propertiesSection.getValue();
+            if (properties != null)
+            {
+                messageId = properties.getMessageId();
+
+            }
+        }
+        return messageId;
+    }
 }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/a94d6ffe/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/MessageConverter_1_0_to_v0_10.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_1_0_to_v0_10.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_1_0_to_v0_10.java
index 851374a..3d67655 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_1_0_to_v0_10.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_1_0_to_v0_10.java
@@ -20,33 +20,56 @@
  */
 package org.apache.qpid.server.protocol.converter.v0_10_v1_0;
 
+import static java.nio.charset.StandardCharsets.UTF_8;
+import static org.apache.qpid.server.protocol.v1_0.MessageConverter_from_1_0.convertBodyToObject;
+import static org.apache.qpid.server.protocol.v1_0.MessageConverter_from_1_0.convertValue;
+import static org.apache.qpid.server.protocol.v1_0.MessageConverter_from_1_0.getAbsoluteExpiryTime;
+import static org.apache.qpid.server.protocol.v1_0.MessageConverter_from_1_0.getCorrelationId;
+import static org.apache.qpid.server.protocol.v1_0.MessageConverter_from_1_0.getCreationTime;
+import static org.apache.qpid.server.protocol.v1_0.MessageConverter_from_1_0.getGroupId;
+import static org.apache.qpid.server.protocol.v1_0.MessageConverter_from_1_0.getGroupSequence;
+import static org.apache.qpid.server.protocol.v1_0.MessageConverter_from_1_0.getMessageId;
+import static org.apache.qpid.server.protocol.v1_0.MessageConverter_from_1_0.getTtl;
+import static org.apache.qpid.server.protocol.v1_0.MessageConverter_from_1_0.getUserId;
+
+import java.nio.ByteBuffer;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.Date;
 import java.util.LinkedHashMap;
 import java.util.Map;
+import java.util.UUID;
 
 import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
-import org.apache.qpid.server.message.mimecontentconverter.ObjectToMimeContentConverter;
+import org.apache.qpid.server.message.MessageDestination;
 import org.apache.qpid.server.message.mimecontentconverter.MimeContentConverterRegistry;
+import org.apache.qpid.server.message.mimecontentconverter.ObjectToMimeContentConverter;
 import org.apache.qpid.server.model.Exchange;
 import org.apache.qpid.server.model.NamedAddressSpace;
+import org.apache.qpid.server.model.Queue;
 import org.apache.qpid.server.plugin.MessageConverter;
 import org.apache.qpid.server.plugin.PluggableService;
+import org.apache.qpid.server.protocol.converter.MessageConversionException;
 import org.apache.qpid.server.protocol.v0_10.MessageMetaData_0_10;
 import org.apache.qpid.server.protocol.v0_10.MessageTransferMessage;
-import org.apache.qpid.server.protocol.v1_0.MessageConverter_from_1_0;
-import org.apache.qpid.server.protocol.v1_0.MessageMetaData_1_0;
-import org.apache.qpid.server.protocol.v1_0.Message_1_0;
-import org.apache.qpid.server.store.StoredMessage;
 import org.apache.qpid.server.protocol.v0_10.transport.DeliveryProperties;
 import org.apache.qpid.server.protocol.v0_10.transport.Header;
+import org.apache.qpid.server.protocol.v0_10.transport.MessageDeliveryMode;
 import org.apache.qpid.server.protocol.v0_10.transport.MessageDeliveryPriority;
 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.MessageMetaData_1_0;
+import org.apache.qpid.server.protocol.v1_0.Message_1_0;
+import org.apache.qpid.server.protocol.v1_0.type.Binary;
+import org.apache.qpid.server.protocol.v1_0.type.UnsignedInteger;
+import org.apache.qpid.server.protocol.v1_0.type.UnsignedLong;
+import org.apache.qpid.server.store.StoredMessage;
 
 @PluggableService
 public class MessageConverter_1_0_to_v0_10 implements MessageConverter<Message_1_0, MessageTransferMessage>
 {
+    private static final int MAX_STR8_LENGTH = 0xFF;
+    private static final int MAX_VBIN16_LENGTH = 0xFFFF;
 
     @Override
     public Class<Message_1_0> getInputClass()
@@ -72,10 +95,16 @@ public class MessageConverter_1_0_to_v0_10 implements MessageConverter<Message_1
 
     }
 
+    @Override
+    public String getType()
+    {
+        return "v1-0 to v0-10";
+    }
+
     private StoredMessage<MessageMetaData_0_10> convertToStoredMessage(final Message_1_0 serverMsg,
                                                                        final NamedAddressSpace addressSpace)
     {
-        Object bodyObject = MessageConverter_from_1_0.convertBodyToObject(serverMsg);
+        Object bodyObject = convertBodyToObject(serverMsg);
 
         final ObjectToMimeContentConverter converter = MimeContentConverterRegistry.getBestFitObjectToMimeContentConverter(bodyObject);
         final byte[] messageContent = converter == null ? new byte[] {} : converter.toMimeContent(bodyObject);
@@ -153,66 +182,311 @@ public class MessageConverter_1_0_to_v0_10 implements MessageConverter<Message_1
         DeliveryProperties deliveryProps = new DeliveryProperties();
         MessageProperties messageProps = new MessageProperties();
 
-        final MessageMetaData_1_0.MessageHeader_1_0  origHeader = serverMsg.getMessageHeader();
+        final MessageMetaData_1_0.MessageHeader_1_0 origHeader = serverMsg.getMessageHeader();
+
+        setExchangeAndRoutingKeyOnDeliveryProperties(deliveryProps, origHeader, addressSpace);
 
+        deliveryProps.setDeliveryMode(serverMsg.isPersistent()
+                                              ? MessageDeliveryMode.PERSISTENT
+                                              : MessageDeliveryMode.NON_PERSISTENT);
 
         deliveryProps.setExpiration(serverMsg.getExpiration());
         deliveryProps.setPriority(MessageDeliveryPriority.get(origHeader.getPriority()));
-        deliveryProps.setRoutingKey(serverMsg.getInitialRoutingAddress());
-        deliveryProps.setTimestamp(origHeader.getTimestamp());
 
-        messageProps.setContentEncoding(origHeader.getEncoding());
+        Date creationTime = getCreationTime(serverMsg);
+        final long arrivalTime = serverMsg.getArrivalTime();
+        if (creationTime != null)
+        {
+            deliveryProps.setTimestamp(creationTime.getTime());
+        }
+        else
+        {
+            deliveryProps.setTimestamp(arrivalTime);
+        }
+
+        Long ttl = getTtl(serverMsg);
+        Date absoluteExpiryTime = getAbsoluteExpiryTime(serverMsg);
+        if (ttl != null)
+        {
+            deliveryProps.setTtl(ttl);
+            deliveryProps.setExpiration(arrivalTime + ttl);
+        }
+        else if (absoluteExpiryTime != null)
+        {
+            final long time = absoluteExpiryTime.getTime();
+            deliveryProps.setTtl(Math.max(0, time - arrivalTime));
+            deliveryProps.setExpiration(time);
+        }
+
+        UUID messageId = getMessageIdAsUUID(serverMsg);
+        if (messageId != null)
+        {
+            messageProps.setMessageId(messageId);
+        }
+
+        byte[] correlationId = getCorrelationIdAsBytes(serverMsg);
+        if (correlationId != null)
+        {
+            messageProps.setCorrelationId(correlationId);
+        }
+
+        final String encoding = origHeader.getEncoding();
+        if (encoding != null)
+        {
+            messageProps.setContentEncoding(ensureStr8("content-encoding", encoding));
+        }
+
         messageProps.setContentLength(size);
         messageProps.setContentType(bodyMimeType);
-        if(origHeader.getCorrelationId() != null)
+        byte[] userId = getUserIdAsBytes(serverMsg);
+        if (userId != null && userId.length <= MAX_VBIN16_LENGTH)
         {
-            messageProps.setCorrelationId(origHeader.getCorrelationId().getBytes());
+            messageProps.setUserId(ensureVBin16("user-id", userId));
         }
+
         final String origReplyTo = origHeader.getReplyTo();
-        if(origReplyTo != null && !origReplyTo.equals(""))
+        if (origReplyTo != null && !origReplyTo.equals(""))
         {
-            ReplyTo replyTo;
-            if(origReplyTo.startsWith("/"))
+            messageProps.setReplyTo(getReplyTo(addressSpace, origReplyTo));
+        }
+
+        Map<String, Object> appHeaders = getApplicationHeaders(serverMsg);
+
+        messageProps.setApplicationHeaders(appHeaders);
+
+        Header header = new Header(deliveryProps, messageProps, null);
+        return new MessageMetaData_0_10(header, size, arrivalTime);
+    }
+
+    private Map<String, Object> getApplicationHeaders(final Message_1_0 serverMsg)
+    {
+        final MessageMetaData_1_0.MessageHeader_1_0 origHeader = serverMsg.getMessageHeader();
+        final Map<String, Object> applicationProperties = serverMsg.getMessageHeader().getHeadersAsMap();
+        for(String key: applicationProperties.keySet())
+        {
+            ensureStr8("application-properties[\"" + key + "\"]", key);
+        }
+
+        Map<String, Object> appHeaders =
+                new LinkedHashMap((Map<String, Object>) convertValue(applicationProperties));
+        if (origHeader.getSubject() != null)
+        {
+            if (!appHeaders.containsKey("qpid.subject"))
             {
-                replyTo = new ReplyTo("",origReplyTo);
+                appHeaders.put("qpid.subject", origHeader.getSubject());
             }
-            else if(origReplyTo.contains("/"))
+
+            if (!appHeaders.containsKey("x-jms-type"))
+            {
+                appHeaders.put("x-jms-type", origHeader.getSubject());
+            }
+        }
+
+        String groupId = getGroupId(serverMsg);
+        if (groupId != null && !appHeaders.containsKey("JMSXGroupID"))
+        {
+            appHeaders.put("JMSXGroupID", groupId);
+        }
+
+        UnsignedInteger groupSequence = getGroupSequence(serverMsg);
+        if (groupSequence != null && !appHeaders.containsKey("JMSXGroupSeq"))
+        {
+            appHeaders.put("JMSXGroupSeq", groupSequence.intValue());
+        }
+
+        return appHeaders;
+    }
+
+    private ReplyTo getReplyTo(final NamedAddressSpace addressSpace, final String origReplyTo)
+    {
+        String exchange, routingKey;
+        if (origReplyTo.startsWith("/"))
+        {
+            exchange = "";
+            routingKey = origReplyTo;
+        }
+        else if (origReplyTo.contains("/"))
+        {
+            String[] parts = origReplyTo.split("/", 2);
+            exchange = parts[0];
+            routingKey = parts[1];
+        }
+        else if (addressSpace.getAttainedMessageDestination(origReplyTo) instanceof Exchange)
+        {
+            exchange = origReplyTo;
+            routingKey = "";
+        }
+        else
+        {
+            exchange = "";
+            routingKey = origReplyTo;
+        }
+        return new ReplyTo(ensureStr8("reply-to[\"exchange\"]", exchange),
+                           ensureStr8("reply-to[\"routing-key\"]", routingKey));
+    }
+
+    private void setExchangeAndRoutingKeyOnDeliveryProperties(final DeliveryProperties deliveryProps,
+                                                              final MessageMetaData_1_0.MessageHeader_1_0 origHeader,
+                                                              final NamedAddressSpace addressSpace)
+    {
+        final String to = origHeader.getTo();
+        final String subject = origHeader.getSubject() == null ? "" : origHeader.getSubject();
+
+        final String exchangeName;
+        final String routingKey;
+
+        if (to != null)
+        {
+            if (to.startsWith("/"))
             {
-                String[] parts = origReplyTo.split("/",2);
-                replyTo = new ReplyTo(parts[0],parts[1]);
+                //TODO: get local address from global
+                throw new MessageConversionException("Could not convert message from 1.0 to 0-10 because conversion of 'to' failed. Global addresses cannot be converted.");
             }
-            else if(addressSpace.getAttainedMessageDestination(origReplyTo) instanceof Exchange)
+
+            int separatorPosition = to.indexOf('/');
+            if (separatorPosition != -1)
             {
-                replyTo = new ReplyTo(origReplyTo,"");
+                exchangeName = to.substring(0, separatorPosition);
+                routingKey = to.substring(separatorPosition + 1);
             }
             else
             {
-                replyTo = new ReplyTo("",origReplyTo);
+                MessageDestination destination = addressSpace.getAttainedMessageDestination(to);
+                if (destination instanceof Queue)
+                {
+                    exchangeName = "";
+                    routingKey = to;
+                }
+                else
+                {
+                    exchangeName = to;
+                    routingKey = subject;
+                }
             }
-            messageProps.setReplyTo(replyTo);
         }
+        else
+        {
+            exchangeName = "";
+            routingKey = subject;
+        }
+        deliveryProps.setRoutingKey(ensureStr8("to' or 'subject", routingKey));
+        deliveryProps.setExchange(ensureStr8("to", exchangeName));
+    }
 
-        Map<String, Object> appHeaders =
-                (Map<String, Object>) MessageConverter_from_1_0.convertValue(serverMsg.getMessageHeader()
-                                                                                     .getHeadersAsMap());
-        if(origHeader.getSubject() != null && !appHeaders.containsKey("qpid.subject"))
+    private byte[] getUserIdAsBytes(final Message_1_0 serverMsg)
+    {
+        Binary userId = getUserId(serverMsg);
+        if (userId != null)
         {
-            appHeaders = new LinkedHashMap<>(appHeaders);
-            appHeaders.put("qpid.subject", origHeader.getSubject());
+            return userId.getArray();
         }
-        messageProps.setApplicationHeaders(appHeaders);
+        return null;
+    }
 
-        Header header = new Header(deliveryProps, messageProps, null);
-        return new MessageMetaData_0_10(header, size, serverMsg.getArrivalTime());
+    private UUID getMessageIdAsUUID(final Message_1_0 serverMsg)
+    {
+        Object messageId = getMessageId(serverMsg);
+        if (messageId == null)
+        {
+            return null;
+        }
+        else if (messageId instanceof UUID)
+        {
+            return (UUID)messageId;
+        }
+        else if (messageId instanceof String)
+        {
+            try
+            {
+                return UUID.fromString(((String) messageId));
+            }
+            catch (IllegalArgumentException e)
+            {
+                return UUID.nameUUIDFromBytes(((String) messageId).getBytes(UTF_8));
+            }
+        }
+        else if (messageId instanceof Binary)
+        {
+            return UUID.nameUUIDFromBytes(((Binary) messageId).getArray());
+        }
+        else if (messageId instanceof byte[])
+        {
+            return UUID.nameUUIDFromBytes((byte[]) messageId);
+        }
+        else if (messageId instanceof UnsignedLong)
+        {
+            return UUID.nameUUIDFromBytes(longToBytes(((UnsignedLong) messageId).longValue()));
+        }
+        else
+        {
+            return UUID.nameUUIDFromBytes(String.valueOf(messageId).getBytes(UTF_8));
+        }
     }
 
+    private byte[] getCorrelationIdAsBytes(final Message_1_0 serverMsg)
+    {
+        final Object correlationIdObject = getCorrelationId(serverMsg);
+        final byte[] correlationId;
+        if (correlationIdObject == null)
+        {
+            correlationId = null;
+        }
+        else if (correlationIdObject instanceof Binary)
+        {
+            correlationId = ((Binary) correlationIdObject).getArray();
+        }
+        else if (correlationIdObject instanceof byte[])
+        {
+            correlationId = (byte[]) correlationIdObject;
+        }
+        else if (correlationIdObject instanceof UUID)
+        {
+            UUID uuid = (UUID)correlationIdObject;
+            correlationId = longToBytes(uuid.getMostSignificantBits(), uuid.getLeastSignificantBits());
+        }
+        else if (correlationIdObject instanceof UnsignedLong)
+        {
+            correlationId = longToBytes(((UnsignedLong) correlationIdObject).longValue());
+        }
+        else
+        {
+            correlationId = String.valueOf(correlationIdObject).getBytes(UTF_8);
+        }
+        return ensureVBin16("correlation-id", correlationId);
+    }
 
+    private String ensureStr8(final String propertyName, String string)
+    {
+        if (string != null && string.length() > MAX_STR8_LENGTH)
+        {
+            throw new MessageConversionException(String.format(
+                    "Could not convert message from 1.0 to 0-10 because conversion of '%s' failed."
+                    + " The string length exceeds allowed maximum.",
+                    propertyName));
+        }
+        return string;
+    }
 
-    @Override
-    public String getType()
+    private byte[] ensureVBin16(final String propertyName, final byte[] result)
     {
-        return "v1-0 to v0-10";
+        if (result != null && result.length > MAX_VBIN16_LENGTH)
+        {
+            throw new MessageConversionException(String.format(
+                    "Could not convert message from 1.0 to 0-10 because conversion of '%s' failed."
+                    + " The array length exceeds allowed maximum.",
+                    propertyName));
+        }
+        return result;
     }
 
+    private byte[] longToBytes(long... x)
+    {
+        ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES * x.length);
+        for (long l : x)
+        {
+            buffer.putLong(l);
+        }
+        return buffer.array();
+    }
 
 }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/a94d6ffe/broker-plugins/amqp-msg-conv-0-10-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_10_v1_0/PropertyConverter_1_0_to_0_10Test.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_1_0_to_0_10Test.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_1_0_to_0_10Test.java
new file mode 100644
index 0000000..a2515c2
--- /dev/null
+++ 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_1_0_to_0_10Test.java
@@ -0,0 +1,956 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.qpid.server.protocol.converter.v0_10_v1_0;
+
+import static java.nio.charset.StandardCharsets.UTF_8;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.nio.ByteBuffer;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.UUID;
+
+import org.apache.qpid.server.bytebuffer.QpidByteBuffer;
+import org.apache.qpid.server.bytebuffer.QpidByteBufferUtils;
+import org.apache.qpid.server.model.Exchange;
+import org.apache.qpid.server.model.NamedAddressSpace;
+import org.apache.qpid.server.model.Queue;
+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.v1_0.MessageMetaData_1_0;
+import org.apache.qpid.server.protocol.v1_0.Message_1_0;
+import org.apache.qpid.server.protocol.v1_0.type.Binary;
+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.UnsignedLong;
+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.DeliveryAnnotations;
+import org.apache.qpid.server.protocol.v1_0.type.messaging.Footer;
+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.store.StoredMessage;
+import org.apache.qpid.test.utils.QpidTestCase;
+
+public class PropertyConverter_1_0_to_0_10Test extends QpidTestCase
+{
+    private NamedAddressSpace _namedAddressSpace;
+    private MessageConverter_1_0_to_v0_10 _messageConverter;
+
+    @Override
+    public void setUp() throws Exception
+    {
+        super.setUp();
+        _namedAddressSpace = mock(NamedAddressSpace.class);
+        _messageConverter = new MessageConverter_1_0_to_v0_10();
+    }
+
+    public void testContentEncodingConversion()
+    {
+
+        String contentEncoding = "my-test-encoding";
+        final Properties properties = new Properties();
+        properties.setContentEncoding(Symbol.valueOf(contentEncoding));
+        Message_1_0 message = createTestMessage(properties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        assertEquals("Unexpected content encoding", contentEncoding, messageProperties.getContentEncoding());
+    }
+
+    public void testContentEncodingConversionWhenLengthExceeds255()
+    {
+        String contentEncoding = generateLongString();
+        final Properties properties = new Properties();
+        properties.setContentEncoding(Symbol.valueOf(contentEncoding));
+        Message_1_0 message = createTestMessage(properties);
+
+        try
+        {
+            _messageConverter.convert(message, _namedAddressSpace);
+            fail("expected exception not thrown");
+        }
+        catch (MessageConversionException e)
+        {
+            // pass
+        }
+    }
+
+    public void testApplicationPropertiesConversion()
+    {
+        Map<String, Object> properties = new HashMap<>();
+        properties.put("testProperty1", "testProperty1Value");
+        properties.put("intProperty", 1);
+        ApplicationProperties applicationProperties = new ApplicationProperties(properties);
+        Message_1_0 message = createTestMessage(applicationProperties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        final Map<String, Object> headers = messageProperties.getApplicationHeaders();
+        assertEquals("Unexpected headers", properties, new HashMap<>(headers));
+    }
+
+    public void testSubjectConversion()
+    {
+        final String subject = "testSubject";
+        Properties properties = new Properties();
+        properties.setSubject(subject);
+        Message_1_0 message = createTestMessage(properties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        final Map<String, Object> headers = messageProperties.getApplicationHeaders();
+        assertEquals("Unexpected qpid.subject is missing from headers", subject, headers.get("qpid.subject"));
+        assertEquals("Unexpected type", subject, headers.get("x-jms-type"));
+        final DeliveryProperties deliveryProperties =
+                convertedMessage.getStoredMessage().getMetaData().getDeliveryProperties();
+        assertEquals("Unexpected routing-key", subject, deliveryProperties.getRoutingKey());
+    }
+
+    public void testSubjectDoesNoReplaceApplicationPropertyQpidSubject()
+    {
+        final String subject = "testSubject";
+        Properties properties = new Properties();
+        properties.setSubject(subject);
+        final String qpidSubject = "testSubject2";
+        Map<String, Object> applicationPropertiesMap = Collections.singletonMap("qpid.subject", qpidSubject);
+        ApplicationProperties applicationProperties = new ApplicationProperties(applicationPropertiesMap);
+
+        Message_1_0 message = createTestMessage(new Header(),
+                                                new DeliveryAnnotations(Collections.emptyMap()),
+                                                new MessageAnnotations(Collections.emptyMap()),
+                                                properties,
+                                                applicationProperties,
+                                                0,
+                                                null);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        final Map<String, Object> headers = messageProperties.getApplicationHeaders();
+        assertEquals("Unexpected qpid.subject is missing from headers", qpidSubject, headers.get("qpid.subject"));
+        assertEquals("Unexpected type", subject, headers.get("x-jms-type"));
+        final DeliveryProperties deliveryProperties =
+                convertedMessage.getStoredMessage().getMetaData().getDeliveryProperties();
+        assertEquals("Unexpected routing-key", subject, deliveryProperties.getRoutingKey());
+    }
+
+    public void testSubjectDoesNoReplaceApplicationPropertyXJMSType()
+    {
+        final String subject = "testSubject";
+        Properties properties = new Properties();
+        properties.setSubject(subject);
+        final String jmsType = "testJmsType";
+        Map<String, Object> applicationPropertiesMap = Collections.singletonMap("x-jms-type", jmsType);
+        ApplicationProperties applicationProperties = new ApplicationProperties(applicationPropertiesMap);
+
+        Message_1_0 message = createTestMessage(new Header(),
+                                                new DeliveryAnnotations(Collections.emptyMap()),
+                                                new MessageAnnotations(Collections.emptyMap()),
+                                                properties,
+                                                applicationProperties,
+                                                0,
+                                                null);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        final Map<String, Object> headers = messageProperties.getApplicationHeaders();
+        assertEquals("Unexpected qpid.subject is missing from headers", subject, headers.get("qpid.subject"));
+        assertEquals("Unexpected type", jmsType, headers.get("x-jms-type"));
+        final DeliveryProperties deliveryProperties =
+                convertedMessage.getStoredMessage().getMetaData().getDeliveryProperties();
+        assertEquals("Unexpected routing-key", subject, deliveryProperties.getRoutingKey());
+    }
+
+    public void testSubjectConversionWhenSubjectExceeds255()
+    {
+        final String subject = generateLongString();
+        Properties properties = new Properties();
+        properties.setSubject(subject);
+        Message_1_0 message = createTestMessage(properties);
+
+        try
+        {
+            _messageConverter.convert(message, _namedAddressSpace);
+            fail("Expected conversion exception");
+        }
+        catch (MessageConversionException e)
+        {
+            // pass
+        }
+    }
+
+    public void testDurableConversion()
+    {
+        final Header header = new Header();
+        header.setDurable(true);
+        Message_1_0 message = createTestMessage(header);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final DeliveryProperties deliveryProperties =
+                convertedMessage.getStoredMessage().getMetaData().getDeliveryProperties();
+        assertEquals("Unexpected deliveryMode", MessageDeliveryMode.PERSISTENT, deliveryProperties.getDeliveryMode());
+    }
+
+    public void testNonDurableConversion()
+    {
+        final Header header = new Header();
+        header.setDurable(false);
+        Message_1_0 message = createTestMessage(header);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final DeliveryProperties deliveryProperties =
+                convertedMessage.getStoredMessage().getMetaData().getDeliveryProperties();
+        assertEquals("Unexpected deliveryMode",
+                     MessageDeliveryMode.NON_PERSISTENT,
+                     deliveryProperties.getDeliveryMode());
+    }
+
+    public void testPriorityConversion()
+    {
+        final Header header = new Header();
+        final byte priority = (byte) 7;
+        header.setPriority(UnsignedByte.valueOf(priority));
+        Message_1_0 message = createTestMessage(header);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final DeliveryProperties deliveryProperties =
+                convertedMessage.getStoredMessage().getMetaData().getDeliveryProperties();
+        assertEquals("Unexpected priority", priority, deliveryProperties.getPriority().getValue());
+    }
+
+    public void testCorrelationIdStringConversion()
+    {
+        final String correlationId = "testCorrelationId";
+        Properties properties = new Properties();
+        properties.setCorrelationId(correlationId);
+        Message_1_0 message = createTestMessage(properties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        assertTrue("Unexpected correlationId",
+                   Arrays.equals(correlationId.getBytes(), messageProperties.getCorrelationId()));
+    }
+
+    public void testCorrelationIdLongStringConversion()
+    {
+        final String correlationId = generateLongLongString();
+        Properties properties = new Properties();
+        properties.setCorrelationId(correlationId);
+        Message_1_0 message = createTestMessage(properties);
+
+        try
+        {
+            _messageConverter.convert(message, _namedAddressSpace);
+            fail("Expected exception not thrown");
+        }
+        catch (MessageConversionException e)
+        {
+            // pass
+        }
+    }
+
+    public void testCorrelationIdULongConversion()
+    {
+        final UnsignedLong correlationId = UnsignedLong.valueOf(-1);
+        Properties properties = new Properties();
+        properties.setCorrelationId(correlationId);
+        Message_1_0 message = createTestMessage(properties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        assertTrue("Unexpected correlationId",
+                   Arrays.equals(longToBytes(correlationId.longValue()), messageProperties.getCorrelationId()));
+    }
+
+    public void testCorrelationIdUUIDConversion()
+    {
+        final UUID correlationId = UUID.randomUUID();
+        Properties properties = new Properties();
+        properties.setCorrelationId(correlationId);
+        Message_1_0 message = createTestMessage(properties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        final byte[] expectedBytes =
+                longToBytes(correlationId.getMostSignificantBits(), correlationId.getLeastSignificantBits());
+        assertTrue("Unexpected correlationId", Arrays.equals(expectedBytes, messageProperties.getCorrelationId()));
+    }
+
+    public void testCorrelationIdBinaryConversion()
+    {
+        final String testCorrelationId = "testCorrelationId";
+        final Binary correlationId = new Binary(testCorrelationId.getBytes(UTF_8));
+        Properties properties = new Properties();
+        properties.setCorrelationId(correlationId);
+        Message_1_0 message = createTestMessage(properties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        assertTrue("Unexpected correlationId",
+                   Arrays.equals(testCorrelationId.getBytes(), messageProperties.getCorrelationId()));
+    }
+
+    public void testReplyToConversionWhenResultExceeds255()
+    {
+        final String replyTo = generateLongString() + "/" + generateLongString();
+        Properties properties = new Properties();
+        properties.setReplyTo(replyTo);
+        Message_1_0 message = createTestMessage(properties);
+
+        try
+        {
+            _messageConverter.convert(message, _namedAddressSpace);
+            fail("expected exception not thrown");
+        }
+        catch (MessageConversionException e)
+        {
+            // pass
+        }
+    }
+
+    public void testTTLConversion()
+    {
+        long ttl = 10000;
+        long arrivalTime = System.currentTimeMillis();
+        long expectedExpiration = arrivalTime + ttl;
+        Header header = new Header();
+        header.setTtl(UnsignedInteger.valueOf(ttl));
+        Message_1_0 message = createTestMessage(header, arrivalTime);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final DeliveryProperties deliveryProperties =
+                convertedMessage.getStoredMessage().getMetaData().getDeliveryProperties();
+        assertEquals("Unexpected ttl", ttl, deliveryProperties.getTtl());
+        assertEquals("Unexpected expiration", expectedExpiration, deliveryProperties.getExpiration());
+    }
+
+    public void testAbsoluteExpiryTimeConversion()
+    {
+        long ttl = 10000;
+        long arrivalTime = System.currentTimeMillis();
+        long expiryTime = arrivalTime + ttl;
+        Properties properties = new Properties();
+        properties.setAbsoluteExpiryTime(new Date(expiryTime));
+        Message_1_0 message = createTestMessage(properties, arrivalTime);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final DeliveryProperties deliveryProperties =
+                convertedMessage.getStoredMessage().getMetaData().getDeliveryProperties();
+        assertEquals("Unexpected ttl", ttl, deliveryProperties.getTtl());
+        assertEquals("Unexpected expiration", expiryTime, deliveryProperties.getExpiration());
+    }
+
+    public void testConversionOfTtlTakesPrecedenceOverAbsoluteExpiryTime()
+    {
+        long ttl = 10000;
+        final long time = System.currentTimeMillis();
+        long absoluteExpiryTime = time + ttl;
+        long arrivalTime = time + 1;
+
+        Header header = new Header();
+        header.setTtl(UnsignedInteger.valueOf(ttl));
+
+        Properties properties = new Properties();
+        properties.setAbsoluteExpiryTime(new Date(absoluteExpiryTime));
+
+        Message_1_0 message = createTestMessage(header,
+                                                new DeliveryAnnotations(Collections.emptyMap()),
+                                                new MessageAnnotations(Collections.emptyMap()),
+                                                properties,
+                                                new ApplicationProperties(Collections.emptyMap()),
+                                                arrivalTime,
+                                                null);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final DeliveryProperties deliveryProperties =
+                convertedMessage.getStoredMessage().getMetaData().getDeliveryProperties();
+        assertEquals("Unexpected ttl", ttl, deliveryProperties.getTtl());
+        assertEquals("Unexpected expiration", arrivalTime + ttl, deliveryProperties.getExpiration());
+    }
+
+    public void testMessageIdStringConversion()
+    {
+        final String messageId = "testMessageId";
+        Properties properties = new Properties();
+        properties.setMessageId(messageId);
+        Message_1_0 message = createTestMessage(properties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        assertEquals("Unexpected messageId",
+                     UUID.nameUUIDFromBytes(messageId.getBytes(UTF_8)),
+                     messageProperties.getMessageId());
+    }
+
+    public void testMessageIdUuidAsStringConversion()
+    {
+        final UUID messageId = UUID.randomUUID();
+        Properties properties = new Properties();
+        properties.setMessageId(messageId.toString());
+        Message_1_0 message = createTestMessage(properties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        assertEquals("Unexpected messageId", messageId, messageProperties.getMessageId());
+    }
+
+    public void testMessageIdUUIDConversion()
+    {
+        final UUID messageId = UUID.randomUUID();
+        Properties properties = new Properties();
+        properties.setMessageId(messageId);
+        Message_1_0 message = createTestMessage(properties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        assertEquals("Unexpected messageId", messageId, messageProperties.getMessageId());
+    }
+
+    public void testMessageIdUnsignedLongConversion()
+    {
+        final UnsignedLong messageId = UnsignedLong.valueOf(-1);
+        Properties properties = new Properties();
+        properties.setMessageId(messageId);
+        Message_1_0 message = createTestMessage(properties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        assertEquals("Unexpected messageId",
+                     UUID.nameUUIDFromBytes(longToBytes(messageId.longValue())),
+                     messageProperties.getMessageId());
+    }
+
+    public void testMessageIdBinaryConversion()
+    {
+        final String messageId = "testMessageId";
+        Properties properties = new Properties();
+        properties.setMessageId(new Binary(messageId.getBytes(UTF_8)));
+        Message_1_0 message = createTestMessage(properties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        assertEquals("Unexpected messageId",
+                     UUID.nameUUIDFromBytes(messageId.getBytes(UTF_8)),
+                     messageProperties.getMessageId());
+    }
+
+    public void testMessageIdByteArrayConversion()
+    {
+        final byte[] messageId = "testMessageId".getBytes(UTF_8);
+        Properties properties = new Properties();
+        properties.setMessageId(messageId);
+        Message_1_0 message = createTestMessage(properties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        assertEquals("Unexpected messageId", UUID.nameUUIDFromBytes(messageId), messageProperties.getMessageId());
+    }
+
+    public void testMessageIdBinaryConversionWhenNonUtf8()
+    {
+        final byte[] messageId = new byte[]{(byte) 0xc3, 0x28};
+        Properties properties = new Properties();
+        properties.setMessageId(new Binary(messageId));
+        Message_1_0 message = createTestMessage(properties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        assertEquals("Unexpected messageId", UUID.nameUUIDFromBytes(messageId), messageProperties.getMessageId());
+    }
+
+    public void testCreationTimeConversion()
+    {
+        final long timestamp = System.currentTimeMillis() - 10000;
+        final long arrivalTime = timestamp + 1;
+        Properties properties = new Properties();
+        properties.setCreationTime(new Date(timestamp));
+        Message_1_0 message = createTestMessage(new Header(),
+                                                new DeliveryAnnotations(Collections.emptyMap()),
+                                                new MessageAnnotations(Collections.emptyMap()),
+                                                properties,
+                                                new ApplicationProperties(Collections.emptyMap()),
+                                                arrivalTime,
+                                                null);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final DeliveryProperties deliveryProperties =
+                convertedMessage.getStoredMessage().getMetaData().getDeliveryProperties();
+        assertEquals("Unexpected timestamp", timestamp, deliveryProperties.getTimestamp());
+    }
+
+    public void testArrivalTimeConversion()
+    {
+        final long arrivalTime = System.currentTimeMillis() - 10000;
+        Message_1_0 message = createTestMessage(new Header(), arrivalTime);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final DeliveryProperties deliveryProperties =
+                convertedMessage.getStoredMessage().getMetaData().getDeliveryProperties();
+        assertEquals("Unexpected timestamp", arrivalTime, deliveryProperties.getTimestamp());
+    }
+
+    public void testUserIdConversion()
+    {
+        final String userId = "test-userId";
+        Properties properties = new Properties();
+        properties.setUserId(new Binary(userId.getBytes()));
+        Message_1_0 message = createTestMessage(properties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        assertTrue("Unexpected user-id", Arrays.equals(userId.getBytes(UTF_8), messageProperties.getUserId()));
+    }
+
+    public void testUserIdConversionWhenLengthExceeds16Bit()
+    {
+        final String userId = generateLongLongString();
+        Properties properties = new Properties();
+        properties.setUserId(new Binary(userId.getBytes()));
+        Message_1_0 message = createTestMessage(properties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        assertNull("Unexpected user-id", messageProperties.getUserId());
+    }
+
+    public void testGroupIdConversion()
+    {
+        String testGroupId = generateLongString();
+        Properties properties = new Properties();
+        properties.setGroupId(testGroupId);
+        Message_1_0 message = createTestMessage(properties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        final Map<String, Object> applicationHeaders = messageProperties.getApplicationHeaders();
+        assertEquals("Unexpected group-id", testGroupId, applicationHeaders.get("JMSXGroupID"));
+    }
+
+    public void testGroupIdDoesNotReplaceApplicationPropertiesJMSXGroupID()
+    {
+        String testGroupId = "group1";
+        Properties properties = new Properties();
+        properties.setGroupId(testGroupId);
+        final String JMSXGroupID = "group2";
+        Map<String, Object> applicationPropertiesMap = Collections.singletonMap("JMSXGroupID", JMSXGroupID);
+        ApplicationProperties applicationProperties = new ApplicationProperties(applicationPropertiesMap);
+
+        Message_1_0 message = createTestMessage(new Header(),
+                                                new DeliveryAnnotations(Collections.emptyMap()),
+                                                new MessageAnnotations(Collections.emptyMap()),
+                                                properties,
+                                                applicationProperties,
+                                                0,
+                                                null);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        final Map<String, Object> applicationHeaders = messageProperties.getApplicationHeaders();
+        assertEquals("Unexpected group-id", JMSXGroupID, applicationHeaders.get("JMSXGroupID"));
+    }
+
+    public void testGroupSequenceConversion()
+    {
+        int testGroupSequence = 1;
+        Properties properties = new Properties();
+        properties.setGroupSequence(UnsignedInteger.valueOf(testGroupSequence));
+        Message_1_0 message = createTestMessage(properties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        final Map<String, Object> applicationHeaders = messageProperties.getApplicationHeaders();
+        assertEquals("Unexpected group-id", testGroupSequence, applicationHeaders.get("JMSXGroupSeq"));
+    }
+
+    public void testGroupSequenceDoesNotReplaceApplicationPropertiesJMSXGroupSeq()
+    {
+        int testGroupSequence = 1;
+        Properties properties = new Properties();
+        properties.setGroupSequence(UnsignedInteger.valueOf(testGroupSequence));
+
+        final int JMSXGroupSeq = 2;
+        Map<String, Object> applicationPropertiesMap = Collections.singletonMap("JMSXGroupSeq", JMSXGroupSeq);
+        ApplicationProperties applicationProperties = new ApplicationProperties(applicationPropertiesMap);
+
+        Message_1_0 message = createTestMessage(new Header(),
+                                                new DeliveryAnnotations(Collections.emptyMap()),
+                                                new MessageAnnotations(Collections.emptyMap()),
+                                                properties,
+                                                applicationProperties,
+                                                0,
+                                                null);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        final Map<String, Object> applicationHeaders = messageProperties.getApplicationHeaders();
+        assertEquals("Unexpected JMSXGroupSeq", JMSXGroupSeq, applicationHeaders.get("JMSXGroupSeq"));
+    }
+
+
+    public void testApplicationPropertiesConversionWhenKeyLengthExceeds255()
+    {
+        Map<String, Object> properties = Collections.singletonMap("testProperty-" + generateLongString(), "testValue");
+        ApplicationProperties applicationProperties = new ApplicationProperties(properties);
+        Message_1_0 message = createTestMessage(applicationProperties);
+
+        try
+        {
+            _messageConverter.convert(message, _namedAddressSpace);
+            fail("Exception is expected");
+        }
+        catch (MessageConversionException e)
+        {
+            // pass
+        }
+    }
+
+    public void testToConversionWhenExchangeAndRoutingKeyIsSpecified()
+    {
+        final String testExchange = "testExchange";
+        final String testRoutingKey = "testRoutingKey";
+
+        String to = testExchange + "/" + testRoutingKey;
+        Properties properties = new Properties();
+        properties.setTo(to);
+        Message_1_0 message = createTestMessage(properties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final DeliveryProperties deliveryProperties =
+                convertedMessage.getStoredMessage().getMetaData().getDeliveryProperties();
+        assertEquals("Unexpected exchange", testExchange, deliveryProperties.getExchange());
+        assertEquals("Unexpected routing key", testRoutingKey, deliveryProperties.getRoutingKey());
+    }
+
+    public void testToConversionWhenExchangeIsSpecified()
+    {
+        final String testExchange = "testExchange";
+        Properties properties = new Properties();
+        properties.setTo(testExchange);
+        Message_1_0 message = createTestMessage(properties);
+
+        when(_namedAddressSpace.getAttainedMessageDestination(testExchange)).thenReturn(mock(Exchange.class));
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final DeliveryProperties deliveryProperties =
+                convertedMessage.getStoredMessage().getMetaData().getDeliveryProperties();
+        assertEquals("Unexpected exchange", testExchange, deliveryProperties.getExchange());
+        assertEquals("Unexpected routing key", "", deliveryProperties.getRoutingKey());
+    }
+
+    public void testToConversionWhenExchangeIsSpecifiedAndSubjectIsSet()
+    {
+        final String testExchange = "testExchange";
+        final String testRoutingKey = "testRoutingKey";
+        Properties properties = new Properties();
+        properties.setTo(testExchange);
+        properties.setSubject(testRoutingKey);
+        Message_1_0 message = createTestMessage(properties);
+
+        when(_namedAddressSpace.getAttainedMessageDestination(testExchange)).thenReturn(mock(Exchange.class));
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final DeliveryProperties deliveryProperties =
+                convertedMessage.getStoredMessage().getMetaData().getDeliveryProperties();
+        assertEquals("Unexpected exchange", testExchange, deliveryProperties.getExchange());
+        assertEquals("Unexpected routing key", testRoutingKey, deliveryProperties.getRoutingKey());
+    }
+
+    public void testToConversionWhenQueueIsSpecified()
+    {
+        final String testQueue = "testQueue";
+        Properties properties = new Properties();
+        properties.setTo(testQueue);
+        Message_1_0 message = createTestMessage(properties);
+
+        when(_namedAddressSpace.getAttainedMessageDestination(testQueue)).thenReturn(mock(Queue.class));
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final DeliveryProperties deliveryProperties =
+                convertedMessage.getStoredMessage().getMetaData().getDeliveryProperties();
+        assertEquals("Unexpected exchange", "", deliveryProperties.getExchange());
+        assertEquals("Unexpected routing key", testQueue, deliveryProperties.getRoutingKey());
+    }
+
+    public void testToConversionWhenGlobalAddress()
+    {
+        final String globalAddress = "/testQueue";
+        Properties properties = new Properties();
+        properties.setTo(globalAddress);
+        Message_1_0 message = createTestMessage(properties);
+
+        try
+        {
+            _messageConverter.convert(message, _namedAddressSpace);
+            fail("Exception is not thrown");
+        }
+        catch (MessageConversionException e)
+        {
+            // pass
+        }
+    }
+
+    public void testToConversionWhenExchangeLengthExceeds255()
+    {
+        final String testExchange = generateLongString();
+        final String testRoutingKey = "testRoutingKey";
+
+        String to = testExchange + "/" + testRoutingKey;
+        Properties properties = new Properties();
+        properties.setTo(to);
+        Message_1_0 message = createTestMessage(properties);
+
+        try
+        {
+            _messageConverter.convert(message, _namedAddressSpace);
+            fail("Exception is not thrown");
+        }
+        catch (MessageConversionException e)
+        {
+            // pass
+        }
+    }
+
+    public void testToConversionWhenRoutingKeyLengthExceeds255()
+    {
+        final String testExchange = "testExchange";
+        final String testRoutingKey = generateLongString();
+
+        String to = testExchange + "/" + testRoutingKey;
+        Properties properties = new Properties();
+        properties.setTo(to);
+        Message_1_0 message = createTestMessage(properties);
+
+        try
+        {
+            _messageConverter.convert(message, _namedAddressSpace);
+            fail("Exception is not thrown");
+        }
+        catch (MessageConversionException e)
+        {
+            // pass
+        }
+    }
+
+    public void testToConversionWhenDestinationIsSpecifiedButDoesNotExists()
+    {
+        final String testDestination = "testDestination";
+        Properties properties = new Properties();
+        properties.setTo(testDestination);
+        Message_1_0 message = createTestMessage(properties);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final DeliveryProperties deliveryProperties =
+                convertedMessage.getStoredMessage().getMetaData().getDeliveryProperties();
+        assertEquals("Unexpected exchange", testDestination, deliveryProperties.getExchange());
+        assertEquals("Unexpected routing key", "", deliveryProperties.getRoutingKey());
+    }
+
+    public void testContentToContentLengthConversion()
+    {
+        final byte[] content = new byte[]{0x31, 0x00, 0x10};
+        Message_1_0 message = createTestMessage(new Header(),
+                                                new DeliveryAnnotations(Collections.emptyMap()),
+                                                new MessageAnnotations(Collections.emptyMap()),
+                                                new Properties(),
+                                                new ApplicationProperties(Collections.emptyMap()),
+                                                0,
+                                                content);
+
+        final MessageTransferMessage convertedMessage = _messageConverter.convert(message, _namedAddressSpace);
+
+        final MessageProperties messageProperties =
+                convertedMessage.getStoredMessage().getMetaData().getMessageProperties();
+        assertEquals("Unexpected content length", content.length, messageProperties.getContentLength());
+    }
+
+    private Message_1_0 createTestMessage(final Header header)
+    {
+        return createTestMessage(header, 0);
+    }
+
+    private Message_1_0 createTestMessage(final Header header, long arrivalTime)
+    {
+        return createTestMessage(header,
+                                 new DeliveryAnnotations(Collections.emptyMap()),
+                                 new MessageAnnotations(Collections.emptyMap()),
+                                 new Properties(),
+                                 new ApplicationProperties(Collections.emptyMap()),
+                                 arrivalTime,
+                                 null);
+    }
+
+    private Message_1_0 createTestMessage(final Properties properties)
+    {
+        return createTestMessage(properties, 0L);
+    }
+
+    private Message_1_0 createTestMessage(final Properties properties, final long arrivalTime)
+    {
+        return createTestMessage(new Header(),
+                                 new DeliveryAnnotations(Collections.emptyMap()),
+                                 new MessageAnnotations(Collections.emptyMap()),
+                                 properties,
+                                 new ApplicationProperties(Collections.emptyMap()),
+                                 arrivalTime,
+                                 null);
+    }
+
+    private Message_1_0 createTestMessage(final ApplicationProperties applicationProperties)
+    {
+        return createTestMessage(new Header(),
+                                 new DeliveryAnnotations(Collections.emptyMap()),
+                                 new MessageAnnotations(Collections.emptyMap()),
+                                 new Properties(),
+                                 applicationProperties,
+                                 0,
+                                 null);
+    }
+
+    private Message_1_0 createTestMessage(final Header header,
+                                          final DeliveryAnnotations deliveryAnnotations,
+                                          final MessageAnnotations messageAnnotations,
+                                          final Properties properties,
+                                          final ApplicationProperties applicationProperties,
+                                          final long arrivalTime,
+                                          final byte[] content)
+    {
+        final StoredMessage<MessageMetaData_1_0> storedMessage = mock(StoredMessage.class);
+        MessageMetaData_1_0 metaData = new MessageMetaData_1_0(header.createEncodingRetainingSection(),
+                                                               deliveryAnnotations.createEncodingRetainingSection(),
+                                                               messageAnnotations.createEncodingRetainingSection(),
+                                                               properties.createEncodingRetainingSection(),
+                                                               applicationProperties.createEncodingRetainingSection(),
+                                                               new Footer(Collections.emptyMap()).createEncodingRetainingSection(),
+                                                               arrivalTime,
+                                                               content == null ? 0 : content.length);
+        when(storedMessage.getMetaData()).thenReturn(metaData);
+
+        if (content != null)
+        {
+            Binary binary = new Binary(content);
+            DataSection dataSection = new Data(binary).createEncodingRetainingSection();
+            List<QpidByteBuffer> qbbList = dataSection.getEncodedForm();
+            int length = (int) QpidByteBufferUtils.remaining(qbbList);
+            when(storedMessage.getContentSize()).thenReturn(length);
+            when(storedMessage.getContent(0, length)).thenReturn(qbbList);
+        }
+        return new Message_1_0(storedMessage);
+    }
+
+    private String generateLongString()
+    {
+        StringBuilder buffer = new StringBuilder();
+        for (int i = 0; i < 256; i++)
+        {
+            buffer.append('x');
+        }
+
+        return buffer.toString();
+    }
+
+    private String generateLongLongString()
+    {
+        StringBuilder buffer = new StringBuilder();
+        for (int i = 0; i < 1 << 16; i++)
+        {
+            buffer.append('x');
+        }
+
+        return buffer.toString();
+    }
+
+    private byte[] longToBytes(long... x)
+    {
+        ByteBuffer buffer = ByteBuffer.allocate(Long.BYTES * x.length);
+        for (long l : x)
+        {
+            buffer.putLong(l);
+        }
+        return buffer.array();
+    }
+}

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/a94d6ffe/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_1_0_to_v0_8.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_1_0_to_v0_8.java b/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_1_0_to_v0_8.java
index 2fb9243..8177444 100644
--- a/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_1_0_to_v0_8.java
+++ b/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/MessageConverter_1_0_to_v0_8.java
@@ -20,6 +20,17 @@
  */
 package org.apache.qpid.server.protocol.converter.v0_8_v1_0;
 
+import static org.apache.qpid.server.protocol.v1_0.MessageConverter_from_1_0.convertBodyToObject;
+import static org.apache.qpid.server.protocol.v1_0.MessageConverter_from_1_0.convertValue;
+import static org.apache.qpid.server.protocol.v1_0.MessageConverter_from_1_0.getAbsoluteExpiryTime;
+import static org.apache.qpid.server.protocol.v1_0.MessageConverter_from_1_0.getCorrelationId;
+import static org.apache.qpid.server.protocol.v1_0.MessageConverter_from_1_0.getCreationTime;
+import static org.apache.qpid.server.protocol.v1_0.MessageConverter_from_1_0.getGroupId;
+import static org.apache.qpid.server.protocol.v1_0.MessageConverter_from_1_0.getGroupSequence;
+import static org.apache.qpid.server.protocol.v1_0.MessageConverter_from_1_0.getMessageId;
+import static org.apache.qpid.server.protocol.v1_0.MessageConverter_from_1_0.getTtl;
+import static org.apache.qpid.server.protocol.v1_0.MessageConverter_from_1_0.getUserId;
+
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
@@ -42,22 +53,15 @@ import org.apache.qpid.server.protocol.v0_8.MessageMetaData;
 import org.apache.qpid.server.protocol.v0_8.transport.BasicContentHeaderProperties;
 import org.apache.qpid.server.protocol.v0_8.transport.ContentHeaderBody;
 import org.apache.qpid.server.protocol.v0_8.transport.MessagePublishInfo;
-import org.apache.qpid.server.protocol.v1_0.MessageConverter_from_1_0;
 import org.apache.qpid.server.protocol.v1_0.MessageMetaData_1_0;
 import org.apache.qpid.server.protocol.v1_0.Message_1_0;
 import org.apache.qpid.server.protocol.v1_0.type.Binary;
 import org.apache.qpid.server.protocol.v1_0.type.UnsignedInteger;
-import org.apache.qpid.server.protocol.v1_0.type.messaging.Header;
-import org.apache.qpid.server.protocol.v1_0.type.messaging.HeaderSection;
-import org.apache.qpid.server.protocol.v1_0.type.messaging.Properties;
-import org.apache.qpid.server.protocol.v1_0.type.messaging.PropertiesSection;
 import org.apache.qpid.server.store.StoredMessage;
 
 @PluggableService
 public class MessageConverter_1_0_to_v0_8 implements MessageConverter<Message_1_0, AMQMessage>
 {
-    private static final int BASIC_CLASS_ID = 60;
-
 
     @Override
     public Class<Message_1_0> getInputClass()
@@ -86,7 +90,7 @@ public class MessageConverter_1_0_to_v0_8 implements MessageConverter<Message_1_
     private StoredMessage<MessageMetaData> convertToStoredMessage(final Message_1_0 serverMsg,
                                                                   final NamedAddressSpace addressSpace)
     {
-        Object bodyObject = MessageConverter_from_1_0.convertBodyToObject(serverMsg);
+        Object bodyObject = convertBodyToObject(serverMsg);
 
         final ObjectToMimeContentConverter converter = MimeContentConverterRegistry.getBestFitObjectToMimeContentConverter(bodyObject);
 
@@ -169,7 +173,7 @@ public class MessageConverter_1_0_to_v0_8 implements MessageConverter<Message_1_
         props.setContentType(bodyMimeType);
         props.setEncoding(convertToShortStringForProperty("content-encoding",
                                                           serverMsg.getMessageHeader().getEncoding()));
-        props.setCorrelationId(getCorrelationId(serverMsg));
+        props.setCorrelationId(getCorrelationIdAsShortString(serverMsg));
         props.setDeliveryMode(serverMsg.isPersistent() ? BasicContentHeaderProperties.PERSISTENT : BasicContentHeaderProperties.NON_PERSISTENT);
 
 
@@ -187,21 +191,21 @@ public class MessageConverter_1_0_to_v0_8 implements MessageConverter<Message_1_
             }
         }
 
-        props.setMessageId(getMessageId(serverMsg));
+        props.setMessageId(getMessageIdAsShortString(serverMsg));
         props.setPriority(serverMsg.getMessageHeader().getPriority());
         props.setReplyTo(getReplyTo(serverMsg, addressSpace));
-        final long timestamp = serverMsg.getMessageHeader().getTimestamp();
-        if (timestamp > 0)
+        Date timestamp = getCreationTime(serverMsg);
+        if (timestamp != null)
         {
-            props.setTimestamp(timestamp);
+            props.setTimestamp(timestamp.getTime());
         }
         else
         {
             props.setTimestamp(serverMsg.getArrivalTime());
         }
-        props.setUserId(getUserId(serverMsg));
+        props.setUserId(getUserIdAsShortString(serverMsg));
 
-        Map<String,Object> headerProps = new LinkedHashMap<String, Object>();
+        Map<String,Object> headerProps = new LinkedHashMap<>();
 
         if(header.getSubject() != null)
         {
@@ -223,8 +227,7 @@ public class MessageConverter_1_0_to_v0_8 implements MessageConverter<Message_1_
 
         for (String headerName : serverMsg.getMessageHeader().getHeaderNames())
         {
-            headerProps.put(headerName,
-                            MessageConverter_from_1_0.convertValue(serverMsg.getMessageHeader().getHeader(headerName)));
+            headerProps.put(headerName, convertValue(serverMsg.getMessageHeader().getHeader(headerName)));
         }
 
         final FieldTable headers;
@@ -298,123 +301,47 @@ public class MessageConverter_1_0_to_v0_8 implements MessageConverter<Message_1_
                                                                                                 routingKey));
     }
 
-    private UnsignedInteger getGroupSequence(final Message_1_0 serverMsg)
+    private AMQShortString getUserIdAsShortString(final Message_1_0 serverMsg)
     {
-        final PropertiesSection propertiesSection = serverMsg.getPropertiesSection();
-        if (propertiesSection != null)
+        Binary userId = getUserId(serverMsg);
+        if (userId != null)
         {
-            final Properties properties = propertiesSection.getValue();
-            if (properties != null)
+            try
             {
-                return properties.getGroupSequence();
+                return new AMQShortString(userId.getArray());
             }
-        }
-        return null;
-    }
-
-    private String getGroupId(final Message_1_0 serverMsg)
-    {
-        final PropertiesSection propertiesSection = serverMsg.getPropertiesSection();
-        if (propertiesSection != null)
-        {
-            final Properties properties = propertiesSection.getValue();
-            if (properties != null)
+            catch (IllegalArgumentException e)
             {
-                return properties.getGroupId();
+                return null;
             }
         }
         return null;
     }
 
-    private AMQShortString getUserId(final Message_1_0 serverMsg)
+    private AMQShortString getMessageIdAsShortString(final Message_1_0 serverMsg)
     {
-        final PropertiesSection propertiesSection = serverMsg.getPropertiesSection();
-        if (propertiesSection != null)
+        Object messageId = getMessageId(serverMsg);
+        try
         {
-            final Properties properties = propertiesSection.getValue();
-            if (properties != null)
+            if (messageId instanceof Binary)
             {
-                Binary userId = properties.getUserId();
-                if (userId != null)
-                {
-                    try
-                    {
-                        return new AMQShortString(userId.getArray());
-                    }
-                    catch (IllegalArgumentException e)
-                    {
-                        return null;
-                    }
-                }
+                return new AMQShortString(((Binary) messageId).getArray());
             }
-        }
-        return null;
-    }
-
-    private AMQShortString getMessageId(final Message_1_0 serverMsg)
-    {
-        final PropertiesSection propertiesSection = serverMsg.getPropertiesSection();
-        if (propertiesSection != null)
-        {
-            final Properties properties = propertiesSection.getValue();
-            if (properties != null)
+            else if (messageId instanceof byte[])
             {
-                Object messageId = properties.getMessageId();
-                try
-                {
-                    if (messageId instanceof Binary)
-                    {
-                        return new AMQShortString(((Binary) messageId).getArray());
-                    }
-                    else if (messageId instanceof byte[])
-                    {
-                        return new AMQShortString(((byte[]) messageId));
-                    }
-                    else
-                    {
-                        return AMQShortString.valueOf(messageId);
-                    }
-                }
-                catch (IllegalArgumentException e)
-                {
-                    // pass
-                }
+                return new AMQShortString(((byte[]) messageId));
             }
-        }
-        return null;
-
-    }
-
-    private Date getAbsoluteExpiryTime(final Message_1_0 serverMsg)
-    {
-        final PropertiesSection propertiesSection = serverMsg.getPropertiesSection();
-        if (propertiesSection != null)
-        {
-            final Properties properties = propertiesSection.getValue();
-            if (properties != null)
+            else
             {
-                return properties.getAbsoluteExpiryTime();
+                return AMQShortString.valueOf(messageId);
             }
         }
-        return null;
-    }
-
-    private Long getTtl(final Message_1_0 serverMsg)
-    {
-        HeaderSection headerSection = serverMsg.getHeaderSection();
-        if (headerSection != null)
+        catch (IllegalArgumentException e)
         {
-            Header header = headerSection.getValue();
-            if (header != null)
-            {
-                UnsignedInteger ttl = header.getTtl();
-                if (ttl != null)
-                {
-                    return ttl.longValue();
-                }
-            }
+            // pass
         }
         return null;
+
     }
 
     private AMQShortString getReplyTo(final Message_1_0 serverMsg, final NamedAddressSpace addressSpace)
@@ -431,36 +358,28 @@ public class MessageConverter_1_0_to_v0_8 implements MessageConverter<Message_1_
         }
     }
 
-    private AMQShortString getCorrelationId(final Message_1_0 serverMsg)
+    private AMQShortString getCorrelationIdAsShortString(final Message_1_0 serverMsg)
     {
-        AMQShortString correlationId = null;
-        final PropertiesSection propertiesSection = serverMsg.getPropertiesSection();
-        if (propertiesSection != null)
+        Object correlationIdObject = getCorrelationId(serverMsg);
+        final AMQShortString correlationId;
+        try
         {
-            final Properties properties = propertiesSection.getValue();
-            if (properties != null)
+            if (correlationIdObject instanceof Binary)
             {
-                final Object correlationIdObject = properties.getCorrelationId();
-                try
-                {
-                    if (correlationIdObject instanceof Binary)
-                    {
-                        correlationId = new AMQShortString(((Binary) correlationIdObject).getArray());
-                    }
-                    else if (correlationIdObject instanceof byte[])
-                    {
-                        correlationId = new AMQShortString(((byte[]) correlationIdObject));
-                    }
-                    else
-                    {
-                        correlationId = AMQShortString.valueOf(correlationIdObject);
-                    }
-                }
-                catch (IllegalArgumentException e)
-                {
-                    throw new MessageConversionException("Could not convert message from 1.0 to 0-8 because conversion of 'correlation-id' failed.", e);
-                }
+                correlationId = new AMQShortString(((Binary) correlationIdObject).getArray());
+            }
+            else if (correlationIdObject instanceof byte[])
+            {
+                correlationId = new AMQShortString(((byte[]) correlationIdObject));
             }
+            else
+            {
+                correlationId = AMQShortString.valueOf(correlationIdObject);
+            }
+        }
+        catch (IllegalArgumentException e)
+        {
+            throw new MessageConversionException("Could not convert message from 1.0 to 0-8 because conversion of 'correlation-id' failed.", e);
         }
         return correlationId;
     }

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/a94d6ffe/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/PropertyConverter_1_0_to_0_8Test.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/PropertyConverter_1_0_to_0_8Test.java b/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/PropertyConverter_1_0_to_0_8Test.java
index ecf85ac..067fe35 100644
--- a/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/PropertyConverter_1_0_to_0_8Test.java
+++ b/broker-plugins/amqp-msg-conv-0-8-to-1-0/src/test/java/org/apache/qpid/server/protocol/converter/v0_8_v1_0/PropertyConverter_1_0_to_0_8Test.java
@@ -479,7 +479,7 @@ public class PropertyConverter_1_0_to_0_8Test extends QpidTestCase
         assertEquals("Unexpected timestamp", arrivalTime, convertedProperties.getTimestamp());
     }
 
-    public void testUserIdyConversion()
+    public void testUserIdConversion()
     {
         final String userId = "test-userId";
         Properties properties = new Properties();
@@ -492,7 +492,7 @@ public class PropertyConverter_1_0_to_0_8Test extends QpidTestCase
         assertEquals("Unexpected user-id", userId, convertedProperties.getUserIdAsString());
     }
 
-    public void testUserIdyConversionWhenLengthExceeds255()
+    public void testUserIdConversionWhenLengthExceeds255()
     {
         final String userId = generateLongString();
         Properties properties = new Properties();
@@ -505,7 +505,7 @@ public class PropertyConverter_1_0_to_0_8Test extends QpidTestCase
         assertNull("Unexpected user-id", convertedProperties.getUserId());
     }
 
-    public void testUserIdyConversionWhenNonUtf8()
+    public void testUserIdConversionWhenNonUtf8()
     {
         final byte[] userId = new byte[]{(byte) 0xc3, 0x28};
         Properties properties = new Properties();


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