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/11/01 16:59:08 UTC
qpid-broker-j git commit: QPID-8238: [Broker-J] Use java.lang.String
values in keys/values of FieldTable.
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 <or...@apache.org>
Authored: Thu Nov 1 15:54:11 2018 +0000
Committer: Alex Rudyy <or...@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-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org