You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by or...@apache.org on 2018/09/10 00:11:09 UTC

[3/6] qpid-broker-j git commit: QPID-8238: [Broker-J] Use java.lang.String values in keys/values of FieldTable.

QPID-8238: [Broker-J] Use java.lang.String values in keys/values of FieldTable.


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

Branch: refs/heads/master
Commit: 8c58e38e53d9b7a2064e73882603951fe3e3c7e4
Parents: 7ff50ba
Author: Alex Rudyy <or...@apache.org>
Authored: Sun Sep 9 23:43:37 2018 +0100
Committer: Alex Rudyy <or...@apache.org>
Committed: Mon Sep 10 01:10:54 2018 +0100

----------------------------------------------------------------------
 .../berkeleydb/upgrade/UpgradeFrom4To5.java     |   4 +-
 .../berkeleydb/upgrade/UpgradeFrom5To6.java     |   2 +-
 .../server/protocol/v0_8/AMQShortString.java    |  45 ++-
 .../server/protocol/v0_8/EncodingUtils.java     |  12 +
 .../qpid/server/protocol/v0_8/FieldTable.java   | 382 +++++++++++--------
 .../server/protocol/v0_8/FieldTableTest.java    |   6 +-
 .../MessageConverter_0_10_to_0_8.java           |   2 +-
 7 files changed, 285 insertions(+), 168 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/8c58e38e/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom4To5.java
----------------------------------------------------------------------
diff --git a/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom4To5.java b/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom4To5.java
index b310081..8935d37 100644
--- a/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom4To5.java
+++ b/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom4To5.java
@@ -135,7 +135,7 @@ public class UpgradeFrom4To5 extends AbstractStoreUpgrade
                             arguments = new FieldTable();
                         }
 
-                        AMQShortString selectorFilterKey = AMQShortString.valueOf(AMQPFilterTypes.JMS_SELECTOR.getValue());
+                        String selectorFilterKey = AMQPFilterTypes.JMS_SELECTOR.getValue();
                         if (!arguments.containsKey(selectorFilterKey))
                         {
                             if (LOGGER.isDebugEnabled())
@@ -143,7 +143,7 @@ public class UpgradeFrom4To5 extends AbstractStoreUpgrade
                                 LOGGER.info("adding the empty string (i.e. 'no selector') value for " + queueName
                                         + " and exchange " + exchangeName);
                             }
-                            arguments.put(selectorFilterKey, "");
+                            arguments.setObject(selectorFilterKey, "");
                         }
                     }
                     addBindingToDatabase(bindingTuple, targetDatabase, transaction, queueName, exchangeName, routingKey,

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/8c58e38e/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom5To6.java
----------------------------------------------------------------------
diff --git a/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom5To6.java b/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom5To6.java
index 68287b6..cde1bec 100644
--- a/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom5To6.java
+++ b/bdbstore/src/main/java/org/apache/qpid/server/store/berkeleydb/upgrade/UpgradeFrom5To6.java
@@ -547,7 +547,7 @@ public class UpgradeFrom5To6 extends AbstractStoreUpgrade
             LOGGER.info("Non-exclusive owner " + owner + " for queue " + queueName + " moved to " + QueueArgumentsConverter.X_QPID_DESCRIPTION);
 
             attributesMap.put(Queue.OWNER, null);
-            argumentsCopy.put(AMQShortString.valueOf(QueueArgumentsConverter.X_QPID_DESCRIPTION), owner);
+            argumentsCopy.setObject(QueueArgumentsConverter.X_QPID_DESCRIPTION, owner);
         }
         else
         {

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/8c58e38e/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQShortString.java
----------------------------------------------------------------------
diff --git a/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQShortString.java b/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQShortString.java
index 59f96e5..13af160 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQShortString.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQShortString.java
@@ -74,7 +74,7 @@ public final class AMQShortString implements Comparable<AMQShortString>
         _data = data;
     }
 
-    public static AMQShortString readAMQShortString(QpidByteBuffer buffer)
+    private static byte[] readAMQShortStringAsBytes(QpidByteBuffer buffer)
     {
         int length = buffer.getUnsignedByte();
         if(length == 0)
@@ -96,8 +96,34 @@ public final class AMQShortString implements Comparable<AMQShortString>
 
             }
             byte[] data = new byte[length];
-            buffer.get(data);
+            buffer.get(data,0, length);
+
+            return data;
+        }
+    }
 
+    public static String readAMQShortStringAsString(QpidByteBuffer buffer)
+    {
+        byte[] data = readAMQShortStringAsBytes(buffer);
+        if (data == null)
+        {
+            return null;
+        }
+        else
+        {
+            return new String(data, StandardCharsets.UTF_8);
+        }
+    }
+
+    public static AMQShortString readAMQShortString(QpidByteBuffer buffer)
+    {
+        byte[] data = readAMQShortStringAsBytes(buffer);
+        if (data == null)
+        {
+            return null;
+        }
+        else
+        {
             ByteBuffer stringBuffer = ByteBuffer.wrap(data);
             AMQShortString cached = getShortStringCache().getIfPresent(stringBuffer);
             if (cached == null)
@@ -167,11 +193,20 @@ public final class AMQShortString implements Comparable<AMQShortString>
 
     public void writeToBuffer(QpidByteBuffer buffer)
     {
-        final short size = (short) length();
-        buffer.putUnsignedByte(size);
-        buffer.put(_data, 0, size);
+        writeShortStringBytes(buffer, _data);
+    }
+
+    public static void writeShortString(final QpidByteBuffer buffer, final String data)
+    {
+        writeShortStringBytes(buffer, data.getBytes(StandardCharsets.UTF_8));
     }
 
+    private static void writeShortStringBytes(final QpidByteBuffer buffer, final byte[] data)
+    {
+        final short size = (short) data.length;
+        buffer.putUnsignedByte(size);
+        buffer.put(data, 0, size);
+    }
 
     @Override
     public boolean equals(Object o)

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/8c58e38e/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/EncodingUtils.java
----------------------------------------------------------------------
diff --git a/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/EncodingUtils.java b/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/EncodingUtils.java
index 7b49e9c..653d12c 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/EncodingUtils.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/EncodingUtils.java
@@ -147,6 +147,18 @@ public class EncodingUtils
         }
     }
 
+    public static void writeShortStringBytes(QpidByteBuffer buffer, String s)
+    {
+        if (s != null)
+        {
+            AMQShortString.writeShortString(buffer, s);
+        }
+        else
+        {
+            buffer.put((byte) 0);
+        }
+    }
+
     public static void writeLongStringBytes(QpidByteBuffer buffer, String s)
     {
         if (s != null)

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/8c58e38e/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/FieldTable.java
----------------------------------------------------------------------
diff --git a/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/FieldTable.java b/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/FieldTable.java
index 1896f40..561a24e 100644
--- a/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/FieldTable.java
+++ b/broker-core/src/main/java/org/apache/qpid/server/protocol/v0_8/FieldTable.java
@@ -32,6 +32,7 @@ import java.util.LinkedHashSet;
 import java.util.Map;
 import java.util.Set;
 import java.util.UUID;
+import java.util.stream.Collectors;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -45,7 +46,7 @@ public class FieldTable
     private static final boolean STRICT_AMQP = Boolean.valueOf(System.getProperty(STRICT_AMQP_NAME, "false"));
 
     private QpidByteBuffer _encodedForm;
-    private Map<AMQShortString, AMQTypedValue> _properties = null;
+    private Map<String, AMQTypedValue> _properties = null;
     private long _encodedSize;
     private static final int INITIAL_HASHMAP_CAPACITY = 16;
     private final boolean _strictAMQP;
@@ -93,8 +94,14 @@ public class FieldTable
         return _encodedForm != null;
     }
 
+    @Deprecated
     public AMQTypedValue getProperty(AMQShortString string)
     {
+        return getProperty(AMQShortString.toString(string));
+    }
+
+    private AMQTypedValue getProperty(String string)
+    {
         checkPropertyName(string);
 
         synchronized (this)
@@ -124,18 +131,29 @@ public class FieldTable
 
     private void populateFromBuffer()
     {
-        try
-        {
-            setFromBuffer();
-        }
-        catch (AMQFrameDecodingException e)
+        if (_encodedSize > 0)
         {
-            LOGGER.error("Error decoding FieldTable in deferred decoding mode ", e);
-            throw new IllegalArgumentException(e);
+            _properties = new LinkedHashMap<>(INITIAL_HASHMAP_CAPACITY);
+
+            _encodedForm.mark();
+            try
+            {
+                do
+                {
+                    final String key = AMQShortString.readAMQShortStringAsString(_encodedForm);
+                    AMQTypedValue value = AMQTypedValue.readFromBuffer(_encodedForm);
+                    _properties.put(key, value);
+                }
+                while (_encodedForm.hasRemaining());
+            }
+            finally
+            {
+                _encodedForm.reset();
+            }
         }
     }
 
-    private AMQTypedValue setProperty(AMQShortString key, AMQTypedValue val)
+    private AMQTypedValue setProperty(String key, AMQTypedValue val)
     {
         checkPropertyName(key);
 
@@ -187,7 +205,7 @@ public class FieldTable
             {
                 if ((_encodedForm == null) || (_encodedSize == 0))
                 {
-                    _properties = new LinkedHashMap<AMQShortString, AMQTypedValue>();
+                    _properties = new LinkedHashMap<>();
                 }
                 else
                 {
@@ -198,12 +216,13 @@ public class FieldTable
         }
     }
 
-    public Boolean getBoolean(String string)
+    @Deprecated
+    public Boolean getBoolean(AMQShortString string)
     {
-        return getBoolean(AMQShortString.valueOf(string));
+        return getBoolean(AMQShortString.toString(string));
     }
 
-    public Boolean getBoolean(AMQShortString string)
+    public Boolean getBoolean(String string)
     {
         AMQTypedValue value = getProperty(string);
         if ((value != null) && (value.getType() == AMQType.BOOLEAN))
@@ -216,12 +235,13 @@ public class FieldTable
         }
     }
 
-    public Byte getByte(String string)
+    @Deprecated
+    public Byte getByte(AMQShortString string)
     {
-        return getByte(AMQShortString.valueOf(string));
+        return getByte(AMQShortString.toString(string));
     }
 
-    public Byte getByte(AMQShortString string)
+    public Byte getByte(String string)
     {
         AMQTypedValue value = getProperty(string);
         if ((value != null) && (value.getType() == AMQType.BYTE))
@@ -234,12 +254,13 @@ public class FieldTable
         }
     }
 
-    public Short getShort(String string)
+    @Deprecated
+    public Short getShort(AMQShortString string)
     {
-        return getShort(AMQShortString.valueOf(string));
+        return getShort(AMQShortString.toString(string));
     }
 
-    public Short getShort(AMQShortString string)
+    public Short getShort(String string)
     {
         AMQTypedValue value = getProperty(string);
         if ((value != null) && (value.getType() == AMQType.SHORT))
@@ -252,12 +273,13 @@ public class FieldTable
         }
     }
 
-    public Integer getInteger(String string)
+    @Deprecated
+    public Integer getInteger(AMQShortString string)
     {
-        return getInteger(AMQShortString.valueOf(string));
+        return getInteger(AMQShortString.toString(string));
     }
 
-    public Integer getInteger(AMQShortString string)
+    public Integer getInteger(String string)
     {
         AMQTypedValue value = getProperty(string);
         if ((value != null) && (value.getType() == AMQType.INT))
@@ -270,12 +292,13 @@ public class FieldTable
         }
     }
 
-    public Long getLong(String string)
+    @Deprecated
+    public Long getLong(AMQShortString string)
     {
-        return getLong(AMQShortString.valueOf(string));
+        return getLong(AMQShortString.toString(string));
     }
 
-    public Long getLong(AMQShortString string)
+    public Long getLong(String string)
     {
         AMQTypedValue value = getProperty(string);
         if ((value != null) && (value.getType() == AMQType.LONG))
@@ -288,12 +311,13 @@ public class FieldTable
         }
     }
 
-    public Float getFloat(String string)
+    @Deprecated
+    public Float getFloat(AMQShortString string)
     {
-        return getFloat(AMQShortString.valueOf(string));
+        return getFloat(AMQShortString.toString(string));
     }
 
-    public Float getFloat(AMQShortString string)
+    public Float getFloat(String string)
     {
         AMQTypedValue value = getProperty(string);
         if ((value != null) && (value.getType() == AMQType.FLOAT))
@@ -306,12 +330,13 @@ public class FieldTable
         }
     }
 
-    public Double getDouble(String string)
+    @Deprecated
+    public Double getDouble(AMQShortString string)
     {
-        return getDouble(AMQShortString.valueOf(string));
+        return getDouble(AMQShortString.toString(string));
     }
 
-    public Double getDouble(AMQShortString string)
+    public Double getDouble(String string)
     {
         AMQTypedValue value = getProperty(string);
         if ((value != null) && (value.getType() == AMQType.DOUBLE))
@@ -324,12 +349,13 @@ public class FieldTable
         }
     }
 
-    public String getString(String string)
+    @Deprecated
+    public String getString(AMQShortString string)
     {
-        return getString(AMQShortString.valueOf(string));
+        return getString(AMQShortString.toString(string));
     }
 
-    public String getString(AMQShortString string)
+    public String getString(String string)
     {
         AMQTypedValue value = getProperty(string);
         if ((value != null) && ((value.getType() == AMQType.WIDE_STRING) || (value.getType() == AMQType.ASCII_STRING)))
@@ -347,12 +373,13 @@ public class FieldTable
 
     }
 
-    public Character getCharacter(String string)
+    @Deprecated
+    public Character getCharacter(AMQShortString string)
     {
-        return getCharacter(AMQShortString.valueOf(string));
+        return getCharacter(AMQShortString.toString(string));
     }
 
-    public Character getCharacter(AMQShortString string)
+    public Character getCharacter(String string)
     {
         AMQTypedValue value = getProperty(string);
         if ((value != null) && (value.getType() == AMQType.ASCII_CHARACTER))
@@ -365,12 +392,13 @@ public class FieldTable
         }
     }
 
-    public byte[] getBytes(String string)
+    @Deprecated
+    public byte[] getBytes(AMQShortString string)
     {
-        return getBytes(AMQShortString.valueOf(string));
+        return getBytes(AMQShortString.toString(string));
     }
 
-    public byte[] getBytes(AMQShortString string)
+    public byte[] getBytes(String string)
     {
         AMQTypedValue value = getProperty(string);
         if ((value != null) && (value.getType() == AMQType.BINARY))
@@ -391,9 +419,10 @@ public class FieldTable
      * @return The associated FieldTable value, or <tt>null</tt> if the associated value is not of FieldTable type or
      *         not present in the field table at all.
      */
-    public FieldTable getFieldTable(String string)
+    @Deprecated
+    public FieldTable getFieldTable(AMQShortString string)
     {
-        return getFieldTable(AMQShortString.valueOf(string));
+        return getFieldTable(AMQShortString.toString(string));
     }
 
     /**
@@ -404,7 +433,7 @@ public class FieldTable
      * @return The associated FieldTable value, or <tt>null</tt> if the associated value is not of FieldTable type or
      *         not present in the field table at all.
      */
-    public FieldTable getFieldTable(AMQShortString string)
+    public FieldTable getFieldTable(String string)
     {
         AMQTypedValue value = getProperty(string);
 
@@ -418,12 +447,13 @@ public class FieldTable
         }
     }
 
-    public Object getObject(String string)
+    @Deprecated
+    public Object getObject(AMQShortString string)
     {
-        return getObject(AMQShortString.valueOf(string));
+        return getObject(AMQShortString.toString(string));
     }
 
-    public Object getObject(AMQShortString string)
+    public Object getObject(String string)
     {
         AMQTypedValue value = getProperty(string);
         if (value != null)
@@ -432,13 +462,19 @@ public class FieldTable
         }
         else
         {
-            return value;
+            return null;
         }
 
     }
 
+    @Deprecated
     public Long getTimestamp(AMQShortString name)
     {
+        return getTimestamp(AMQShortString.toString(name));
+    }
+
+    public Long getTimestamp(String name)
+    {
         AMQTypedValue value = getProperty(name);
         if ((value != null) && (value.getType() == AMQType.TIMESTAMP))
         {
@@ -450,8 +486,14 @@ public class FieldTable
         }
     }
 
+    @Deprecated
     public BigDecimal getDecimal(AMQShortString propertyName)
     {
+        return getDecimal(AMQShortString.toString(propertyName));
+    }
+
+    public BigDecimal getDecimal(String propertyName)
+    {
         AMQTypedValue value = getProperty(propertyName);
         if ((value != null) && (value.getType() == AMQType.DECIMAL))
         {
@@ -464,82 +506,91 @@ public class FieldTable
     }
 
     // ************  Setters
-    public Object setBoolean(String string, Boolean b)
+
+    @Deprecated
+    public Object setBoolean(AMQShortString string, Boolean b)
     {
-        return setBoolean(AMQShortString.valueOf(string), b);
+        return setBoolean(AMQShortString.toString(string), b);
     }
 
-    public Object setBoolean(AMQShortString string, Boolean b)
+    public Object setBoolean(String string, Boolean b)
     {
         return setProperty(string, AMQType.BOOLEAN.asTypedValue(b));
     }
 
-    public Object setByte(String string, Byte b)
+    @Deprecated
+    public Object setByte(AMQShortString string, Byte b)
     {
-        return setByte(AMQShortString.valueOf(string), b);
+        return setByte(AMQShortString.toString(string), b);
     }
 
-    public Object setByte(AMQShortString string, Byte b)
+    public Object setByte(String string, Byte b)
     {
         return setProperty(string, AMQType.BYTE.asTypedValue(b));
     }
 
-    public Object setShort(String string, Short i)
+    @Deprecated
+    public Object setShort(AMQShortString string, Short i)
     {
-        return setShort(AMQShortString.valueOf(string), i);
+        return setShort(AMQShortString.toString(string), i);
     }
 
-    public Object setShort(AMQShortString string, Short i)
+    public Object setShort(String string, Short i)
     {
         return setProperty(string, AMQType.SHORT.asTypedValue(i));
     }
 
-    public Object setInteger(String string, int i)
+    @Deprecated
+    public Object setInteger(AMQShortString string, int i)
     {
-        return setInteger(AMQShortString.valueOf(string), i);
+        return setInteger(AMQShortString.toString(string), i);
     }
 
-    public Object setInteger(AMQShortString string, int i)
+    public Object setInteger(String string, int i)
     {
         return setProperty(string, AMQTypedValue.createAMQTypedValue(i));
     }
 
-    public Object setLong(String string, long l)
+    @Deprecated
+    public Object setLong(AMQShortString string, long l)
     {
-        return setLong(AMQShortString.valueOf(string), l);
+        return setLong(AMQShortString.toString(string), l);
     }
 
-    public Object setLong(AMQShortString string, long l)
+    public Object setLong(String string, long l)
     {
         return setProperty(string, AMQTypedValue.createAMQTypedValue(l));
     }
 
-    public Object setFloat(String string, Float f)
+    @Deprecated
+    public Object setFloat(AMQShortString string, Float v)
     {
-        return setFloat(AMQShortString.valueOf(string), f);
+        return setFloat(AMQShortString.toString(string), v);
     }
 
-    public Object setFloat(AMQShortString string, Float v)
+    public Object setFloat(String string, Float f)
     {
-        return setProperty(string, AMQType.FLOAT.asTypedValue(v));
+        return setProperty(string, AMQType.FLOAT.asTypedValue(f));
     }
 
-    public Object setDouble(String string, Double d)
+    @Deprecated
+    public Object setDouble(AMQShortString string, Double d)
     {
-        return setDouble(AMQShortString.valueOf(string), d);
+        return setDouble(AMQShortString.toString(string), d);
     }
 
-    public Object setDouble(AMQShortString string, Double v)
+    public Object setDouble(String string, Double v)
     {
         return setProperty(string, AMQType.DOUBLE.asTypedValue(v));
     }
 
-    public Object setString(String string, String s)
+    @Deprecated
+    public Object setString(AMQShortString string, String value)
     {
-        return setString(AMQShortString.valueOf(string), s);
+        return setString(AMQShortString.toString(string), value);
     }
 
-    public Object setAsciiString(AMQShortString string, String value)
+    public Object setString(String string, String value)
     {
         if (value == null)
         {
@@ -547,11 +598,17 @@ public class FieldTable
         }
         else
         {
-            return setProperty(string, AMQType.ASCII_STRING.asTypedValue(value));
+            return setProperty(string, AMQType.LONG_STRING.asTypedValue(value));
         }
     }
 
-    public Object setString(AMQShortString string, String value)
+    @Deprecated
+    public Object setAsciiString(AMQShortString string, String value)
+    {
+        return setAsciiString(AMQShortString.toString(string), value);
+    }
+
+    public Object setAsciiString(String string, String value)
     {
         if (value == null)
         {
@@ -559,64 +616,76 @@ public class FieldTable
         }
         else
         {
-            return setProperty(string, AMQType.LONG_STRING.asTypedValue(value));
+            return setProperty(string, AMQType.ASCII_STRING.asTypedValue(value));
         }
     }
 
-    public Object setChar(String string, char c)
+    @Deprecated
+    public Object setChar(AMQShortString string, char c)
     {
-        return setChar(AMQShortString.valueOf(string), c);
+        return setChar(AMQShortString.toString(string), c);
     }
 
-    public Object setChar(AMQShortString string, char c)
+    public Object setChar(String string, char c)
     {
         return setProperty(string, AMQType.ASCII_CHARACTER.asTypedValue(c));
     }
 
-    public Object setFieldArray(String string, Collection<?> collection)
+    @Deprecated
+    public Object setFieldArray(AMQShortString string, Collection<?> collection)
     {
-        return setFieldArray(AMQShortString.valueOf(string), collection);
+        return setFieldArray(AMQShortString.toString(string), collection);
     }
-    public Object setFieldArray(AMQShortString string, Collection<?> collection)
+
+    public Object setFieldArray(String string, Collection<?> collection)
     {
         return setProperty(string, AMQType.FIELD_ARRAY.asTypedValue(collection));
     }
 
-    public Object setBytes(String string, byte[] b)
+    @Deprecated
+    public Object setBytes(AMQShortString string, byte[] bytes)
     {
-        return setBytes(AMQShortString.valueOf(string), b);
+        return setBytes(AMQShortString.toString(string), bytes);
     }
 
-    public Object setBytes(AMQShortString string, byte[] bytes)
+    public Object setBytes(String string, byte[] bytes)
     {
         return setProperty(string, AMQType.BINARY.asTypedValue(bytes));
     }
 
-    public Object setBytes(String string, byte[] bytes, int start, int length)
+    @Deprecated
+    public Object setBytes(AMQShortString string, byte[] bytes, int start, int length)
     {
-        return setBytes(AMQShortString.valueOf(string), bytes, start, length);
+        return setBytes(AMQShortString.toString(string), bytes, start, length);
     }
 
-    public Object setBytes(AMQShortString string, byte[] bytes, int start, int length)
+    public Object setBytes(String string, byte[] bytes, int start, int length)
     {
         byte[] newBytes = new byte[length];
         System.arraycopy(bytes, start, newBytes, 0, length);
 
-        return setBytes(string, bytes);
+        return setBytes(string, newBytes);
     }
 
-    public Object setObject(String string, Object o)
+    @Deprecated
+    public Object setTimestamp(AMQShortString string, long datetime)
     {
-        return setObject(AMQShortString.valueOf(string), o);
+        return setTimestamp(AMQShortString.toString(string), datetime);
     }
 
-    public Object setTimestamp(AMQShortString string, long datetime)
+    public Object setTimestamp(String string, long datetime)
     {
         return setProperty(string, AMQType.TIMESTAMP.asTypedValue(datetime));
     }
 
+    @Deprecated
     public Object setDecimal(AMQShortString string, BigDecimal decimal)
     {
+        return setDecimal(AMQShortString.toString(string), decimal);
+    }
+
+    public Object setDecimal(String string, BigDecimal decimal)
+    {
         if (decimal.longValue() > Integer.MAX_VALUE)
         {
             throw new UnsupportedOperationException("AMQP does not support decimals larger than " + Integer.MAX_VALUE);
@@ -630,8 +699,14 @@ public class FieldTable
         return setProperty(string, AMQType.DECIMAL.asTypedValue(decimal));
     }
 
+    @Deprecated
     public Object setVoid(AMQShortString string)
     {
+        return setVoid(AMQShortString.toString(string));
+    }
+
+    public Object setVoid(String string)
+    {
         return setProperty(string, AMQType.VOID.asTypedValue(null));
     }
 
@@ -643,9 +718,10 @@ public class FieldTable
      *
      * @return The stored value.
      */
-    public Object setFieldTable(String string, FieldTable ftValue)
+    @Deprecated
+    public Object setFieldTable(AMQShortString string, FieldTable ftValue)
     {
-        return setFieldTable(AMQShortString.valueOf(string), ftValue);
+        return setFieldTable(AMQShortString.toString(string), ftValue);
     }
 
     /**
@@ -656,13 +732,19 @@ public class FieldTable
      *
      * @return The stored value.
      */
-    public Object setFieldTable(AMQShortString string, FieldTable ftValue)
+    public Object setFieldTable(String string, FieldTable ftValue)
     {
         return setProperty(string, AMQType.FIELD_TABLE.asTypedValue(ftValue));
     }
 
+    @Deprecated
     public Object setObject(AMQShortString string, Object object)
     {
+        return setObject(AMQShortString.toString(string), object);
+    }
+
+    public Object setObject(String string, Object object)
+    {
         if (object instanceof Boolean)
         {
             return setBoolean(string, (Boolean) object);
@@ -733,21 +815,22 @@ public class FieldTable
 
     public boolean isNullStringValue(String name)
     {
-        AMQTypedValue value = getProperty(AMQShortString.valueOf(name));
+        AMQTypedValue value = getProperty(name);
 
         return (value != null) && (value.getType() == AMQType.VOID);
     }
 
     // ***** Methods
 
-    public Enumeration getPropertyNames()
+    private Enumeration getPropertyNames()
     {
         return Collections.enumeration(keys());
     }
 
+    @Deprecated
     public boolean propertyExists(AMQShortString propertyName)
     {
-        return itemExists(propertyName);
+        return itemExists(AMQShortString.toString(propertyName));
     }
 
     public boolean propertyExists(String propertyName)
@@ -755,19 +838,20 @@ public class FieldTable
         return itemExists(propertyName);
     }
 
+    @Deprecated
     public boolean itemExists(AMQShortString propertyName)
     {
+        return itemExists(AMQShortString.toString(propertyName));
+    }
+
+    private boolean itemExists(String propertyName)
+    {
         checkPropertyName(propertyName);
         initMapIfNecessary();
 
         return _properties.containsKey(propertyName);
     }
 
-    public boolean itemExists(String string)
-    {
-        return itemExists(AMQShortString.valueOf(string));
-    }
-
     @Override
     public String toString()
     {
@@ -776,7 +860,7 @@ public class FieldTable
         return _properties.toString();
     }
 
-    private void checkPropertyName(AMQShortString propertyName)
+    private void checkPropertyName(String propertyName)
     {
         if (propertyName == null)
         {
@@ -793,8 +877,14 @@ public class FieldTable
         }
     }
 
+    @Deprecated
     protected static void checkIdentiferFormat(AMQShortString propertyName)
     {
+        checkIdentiferFormat(AMQShortString.toString(propertyName));
+    }
+
+    private static void checkIdentiferFormat(String propertyName)
+    {
         // AMQP Spec: 4.2.5.5 Field Tables
         // Guidelines for implementers:
         // * Field names MUST start with a letter, '$' or '#' and may continue with
@@ -870,7 +960,7 @@ public class FieldTable
         int encodedSize = 0;
         if (_properties != null)
         {
-            for (Map.Entry<AMQShortString, AMQTypedValue> e : _properties.entrySet())
+            for (Map.Entry<String, AMQTypedValue> e : _properties.entrySet())
             {
                 encodedSize += EncodingUtils.encodedShortStringLength(e.getKey());
                 encodedSize++; // the byte for the encoding Type
@@ -896,7 +986,7 @@ public class FieldTable
 
     public static Map<String, Object> convertToMap(final FieldTable fieldTable)
     {
-        final Map<String, Object> map = new HashMap<String, Object>();
+        final Map<String, Object> map = new HashMap<>();
 
         if(fieldTable != null)
         {
@@ -983,14 +1073,15 @@ public class FieldTable
         public Object getResult();
     }
 
+    @Deprecated // make it private
     public Object processOverElements(FieldTableElementProcessor processor)
     {
         initMapIfNecessary();
         if (_properties != null)
         {
-            for (Map.Entry<AMQShortString, AMQTypedValue> e : _properties.entrySet())
+            for (Map.Entry<String, AMQTypedValue> e : _properties.entrySet())
             {
-                boolean result = processor.processElement(e.getKey().toString(), e.getValue());
+                boolean result = processor.processElement(e.getKey(), e.getValue());
                 if (!result)
                 {
                     break;
@@ -1015,68 +1106,69 @@ public class FieldTable
         return size() == 0;
     }
 
+    @Deprecated
     public boolean containsKey(AMQShortString key)
     {
-        initMapIfNecessary();
-
-        return _properties.containsKey(key);
+        return containsKey(AMQShortString.toString(key));
     }
 
     public boolean containsKey(String key)
     {
-        return containsKey(AMQShortString.valueOf(key));
+        initMapIfNecessary();
+
+        return _properties.containsKey(key);
     }
 
     public Set<String> keys()
     {
         initMapIfNecessary();
-        Set<String> keys = new LinkedHashSet<String>();
-        for (AMQShortString key : _properties.keySet())
-        {
-            keys.add(key.toString());
-        }
-
-        return keys;
+        return new LinkedHashSet<>(_properties.keySet());
     }
 
+    @Deprecated
     public Iterator<Map.Entry<AMQShortString, AMQTypedValue>> iterator()
     {
         initMapIfNecessary();
-        return _properties.entrySet().iterator();
+        return _properties.entrySet()
+                          .stream()
+                          .collect(Collectors.toMap(e-> AMQShortString.valueOf(e.getKey()), Map.Entry::getValue))
+                          .entrySet()
+                          .iterator();
     }
 
     public Object get(String key)
     {
-        return get(AMQShortString.valueOf(key));
-    }
-
-    public Object get(AMQShortString key)
-    {
         return getObject(key);
     }
 
+    @Deprecated
     public Object put(AMQShortString key, Object value)
     {
-        return setObject(key, value);
+        return setObject(AMQShortString.toString(key), value);
     }
 
     public Object remove(String key)
     {
+        AMQTypedValue val = removeKey(key);
 
-        return remove(AMQShortString.valueOf(key));
+        return (val == null) ? null : val.getValue();
 
     }
 
+    @Deprecated
     public Object remove(AMQShortString key)
     {
-        AMQTypedValue val = removeKey(key);
-
-        return (val == null) ? null : val.getValue();
-
+        return remove(AMQShortString.toString(key));
     }
 
+    @Deprecated
     public AMQTypedValue removeKey(AMQShortString key)
     {
+        return removeKey(AMQShortString.toString(key));
+    }
+
+    private AMQTypedValue removeKey(String key)
+    {
         synchronized (this)
         {
             initMapIfNecessary();
@@ -1111,12 +1203,12 @@ public class FieldTable
     }
 
 
-
+    @Deprecated
     public Set<AMQShortString> keySet()
     {
         initMapIfNecessary();
 
-        return _properties.keySet();
+        return _properties.keySet().stream().map(k->AMQShortString.valueOf(k)).collect(Collectors.toSet());
     }
 
     private synchronized void putDataInBuffer(QpidByteBuffer buffer)
@@ -1130,14 +1222,14 @@ public class FieldTable
         }
         else if (_properties != null)
         {
-            final Iterator<Map.Entry<AMQShortString, AMQTypedValue>> it = _properties.entrySet().iterator();
+            final Iterator<Map.Entry<String, AMQTypedValue>> it = _properties.entrySet().iterator();
 
             // If there are values then write out the encoded Size... could check _encodedSize != 0
             // write out the total length, which we have kept up to date as data is added
 
             while (it.hasNext())
             {
-                final Map.Entry<AMQShortString, AMQTypedValue> me = it.next();
+                final Map.Entry<String, AMQTypedValue> me = it.next();
                 try
                 {
                     // Write the actual parameter name
@@ -1153,25 +1245,6 @@ public class FieldTable
     }
 
 
-    private void setFromBuffer() throws AMQFrameDecodingException
-    {
-        if (_encodedSize > 0)
-        {
-            try(QpidByteBuffer slice = _encodedForm.slice())
-            {
-                _properties = new LinkedHashMap<>(INITIAL_HASHMAP_CAPACITY);
-
-                do
-                {
-                    final AMQShortString key = AMQShortString.readAMQShortString(slice);
-                    AMQTypedValue value = AMQTypedValue.readFromBuffer(slice);
-                    _properties.put(key, value);
-                }
-                while (slice.hasRemaining());
-            }
-        }
-    }
-
     @Override
     public int hashCode()
     {
@@ -1209,8 +1282,7 @@ public class FieldTable
             FieldTable table = new FieldTable();
             for(Map.Entry<String,Object> entry : map.entrySet())
             {
-                final AMQShortString propertyNameAsShotString = AMQShortString.valueOf(entry.getKey());
-                table.put(propertyNameAsShotString, entry.getValue());
+                table.setObject(entry.getKey(), entry.getValue());
             }
 
             return table;

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/8c58e38e/broker-core/src/test/java/org/apache/qpid/server/protocol/v0_8/FieldTableTest.java
----------------------------------------------------------------------
diff --git a/broker-core/src/test/java/org/apache/qpid/server/protocol/v0_8/FieldTableTest.java b/broker-core/src/test/java/org/apache/qpid/server/protocol/v0_8/FieldTableTest.java
index c43916f..7adac31 100644
--- a/broker-core/src/test/java/org/apache/qpid/server/protocol/v0_8/FieldTableTest.java
+++ b/broker-core/src/test/java/org/apache/qpid/server/protocol/v0_8/FieldTableTest.java
@@ -404,8 +404,6 @@ public class FieldTableTest extends UnitTestBase
         assertEquals(0, table.getEncodedSize());
         assertTrue(table.isEmpty());
         assertEquals(0, table.size());
-
-        assertEquals(0, table.keySet().size());
     }
 
     /**
@@ -942,11 +940,11 @@ public class FieldTableTest extends UnitTestBase
     @Test
     public void testAddingAllFromFieldTableCreatedUsingEncodedBytes() throws Exception
     {
-        AMQShortString myBooleanTestProperty = AMQShortString.createAMQShortString("myBooleanTestProperty");
+        String myBooleanTestProperty = "myBooleanTestProperty";
 
         //Create a new FieldTable and use it to encode data into a byte array.
         FieldTable encodeTable = new FieldTable();
-        encodeTable.put(myBooleanTestProperty, true);
+        encodeTable.setObject(myBooleanTestProperty, true);
         byte[] data = encodeTable.getDataAsBytes();
         int length = data.length;
 

http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/8c58e38e/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java
----------------------------------------------------------------------
diff --git a/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java b/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java
index ab23155..300699f 100644
--- a/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java
+++ b/broker-plugins/amqp-msg-conv-0-8-to-0-10/src/main/java/org/apache/qpid/server/protocol/converter/v0_8_v0_10/MessageConverter_0_10_to_0_8.java
@@ -195,7 +195,7 @@ public class MessageConverter_0_10_to_0_8 implements MessageConverter<MessageTra
                     String headerName = entry.getKey();
                     try
                     {
-                        ft.put(AMQShortString.validValueOf(headerName), entry.getValue());
+                        ft.setObject(headerName, entry.getValue());
                     }
                     catch (AMQPInvalidClassException e)
                     {


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