Repository: qpid-broker-j Updated Branches: refs/heads/7.0.x cc4821e34 -> 9d869019c
QPID-8238: [Broker-J] Use java.lang.String values in keys/values of FieldTable. (cherry picked from commit 8c58e38e53d9b7a2064e73882603951fe3e3c7e4) 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/9d869019 Tree: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/tree/9d869019 Diff: http://git-wip-us.apache.org/repos/asf/qpid-broker-j/diff/9d869019 Branch: refs/heads/7.0.x Commit: 9d869019c40fddc5f8edad1a2544cf1869b765a9 Parents: cc4821e Author: Alex Rudyy <oru...@apache.org> Authored: Thu Nov 1 15:54:11 2018 +0000 Committer: Alex Rudyy <oru...@apache.org> Committed: Thu Nov 1 15:54:11 2018 +0000 ---------------------------------------------------------------------- .../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 | 338 ++++++++++--------- .../server/protocol/v0_8/FieldTableTest.java | 12 +- .../MessageConverter_0_10_to_0_8.java | 2 +- 7 files changed, 245 insertions(+), 170 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-broker-j/blob/9d869019/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/9d869019/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/9d869019/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/9d869019/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/9d869019/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..4f0e6df 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; @@ -95,6 +96,11 @@ public class FieldTable public AMQTypedValue getProperty(AMQShortString string) { + return getProperty(AMQShortString.toString(string)); + } + + private AMQTypedValue getProperty(String string) + { checkPropertyName(string); synchronized (this) @@ -124,18 +130,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 +204,7 @@ public class FieldTable { if ((_encodedForm == null) || (_encodedSize == 0)) { - _properties = new LinkedHashMap<AMQShortString, AMQTypedValue>(); + _properties = new LinkedHashMap<>(); } else { @@ -198,12 +215,12 @@ public class FieldTable } } - public Boolean getBoolean(String string) + 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 +233,12 @@ public class FieldTable } } - public Byte getByte(String string) + 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 +251,12 @@ public class FieldTable } } - public Short getShort(String string) + 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 +269,12 @@ public class FieldTable } } - public Integer getInteger(String string) + 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 +287,12 @@ public class FieldTable } } - public Long getLong(String string) + 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 +305,12 @@ public class FieldTable } } - public Float getFloat(String string) + 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 +323,12 @@ public class FieldTable } } - public Double getDouble(String string) + 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 +341,12 @@ public class FieldTable } } - public String getString(String string) + 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 +364,12 @@ public class FieldTable } - public Character getCharacter(String string) + 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 +382,12 @@ public class FieldTable } } - public byte[] getBytes(String string) + 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 +408,9 @@ 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) + public FieldTable getFieldTable(AMQShortString string) { - return getFieldTable(AMQShortString.valueOf(string)); + return getFieldTable(AMQShortString.toString(string)); } /** @@ -404,7 +421,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 +435,12 @@ public class FieldTable } } - public Object getObject(String string) + 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 +449,18 @@ public class FieldTable } else { - return value; + return null; } } 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)) { @@ -452,6 +474,11 @@ public class FieldTable 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 +491,83 @@ public class FieldTable } // ************ Setters - public Object setBoolean(String string, Boolean b) + + 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) + 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) + 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) + 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) + 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) + 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) + 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) + 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 +575,16 @@ 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) + 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 +592,70 @@ 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) + 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) + 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) + 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) + 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) + 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)); } 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); @@ -632,6 +671,11 @@ public class FieldTable public Object setVoid(AMQShortString string) { + return setVoid(AMQShortString.toString(string)); + } + + public Object setVoid(String string) + { return setProperty(string, AMQType.VOID.asTypedValue(null)); } @@ -643,9 +687,9 @@ public class FieldTable * * @return The stored value. */ - public Object setFieldTable(String string, FieldTable ftValue) + public Object setFieldTable(AMQShortString string, FieldTable ftValue) { - return setFieldTable(AMQShortString.valueOf(string), ftValue); + return setFieldTable(AMQShortString.toString(string), ftValue); } /** @@ -656,13 +700,18 @@ 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)); } 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 +782,21 @@ 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()); } public boolean propertyExists(AMQShortString propertyName) { - return itemExists(propertyName); + return itemExists(AMQShortString.toString(propertyName)); } public boolean propertyExists(String propertyName) @@ -757,17 +806,17 @@ public class FieldTable 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 +825,7 @@ public class FieldTable return _properties.toString(); } - private void checkPropertyName(AMQShortString propertyName) + private void checkPropertyName(String propertyName) { if (propertyName == null) { @@ -795,6 +844,11 @@ public class FieldTable 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 +924,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 +950,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) { @@ -988,9 +1042,9 @@ public class FieldTable 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; @@ -1017,66 +1071,62 @@ public class FieldTable 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()); } 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); } 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(); } public Object remove(AMQShortString key) { - AMQTypedValue val = removeKey(key); - - return (val == null) ? null : val.getValue(); - + return remove(AMQShortString.toString(key)); } public AMQTypedValue removeKey(AMQShortString key) { + return removeKey(AMQShortString.toString(key)); + } + + private AMQTypedValue removeKey(String key) + { synchronized (this) { initMapIfNecessary(); @@ -1116,7 +1166,7 @@ public class FieldTable { initMapIfNecessary(); - return _properties.keySet(); + return _properties.keySet().stream().map(k->AMQShortString.valueOf(k)).collect(Collectors.toSet()); } private synchronized void putDataInBuffer(QpidByteBuffer buffer) @@ -1130,14 +1180,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 +1203,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 +1240,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/9d869019/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 410f27a..e932eff 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 @@ -384,11 +384,9 @@ public class FieldTableTest extends QpidTestCase */ private void checkEmpty(FieldTable table) { - Assert.assertEquals(0, table.getEncodedSize()); - Assert.assertTrue(table.isEmpty()); - Assert.assertEquals(0, table.size()); - - Assert.assertEquals(0, table.keySet().size()); + assertEquals(0, table.getEncodedSize()); + assertTrue(table.isEmpty()); + assertEquals(0, table.size()); } /** @@ -906,11 +904,11 @@ public class FieldTableTest extends QpidTestCase */ 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/9d869019/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-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org