diff options
author | Martin Ritchie <ritchiem@apache.org> | 2006-12-13 13:40:39 +0000 |
---|---|---|
committer | Martin Ritchie <ritchiem@apache.org> | 2006-12-13 13:40:39 +0000 |
commit | cc3d9dfed5f5e3f97aa96270bec743cb60f409f6 (patch) | |
tree | 5f4cbfdcf114fc66e940b860e607239e0ff69ab6 | |
parent | 95faa9d5a4bb495f9f6a60a4483c246ffa476f52 (diff) | |
download | qpid-python-cc3d9dfed5f5e3f97aa96270bec743cb60f409f6.tar.gz |
QPID-9
Updated EncodingUtils.java to include a single Character field so we can tell the difference between a char and a string of length 1.
Tests changed accordingly.
git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@486648 13f79535-47bb-0310-9956-ffa450edef68
3 files changed, 38 insertions, 26 deletions
diff --git a/java/common/src/main/java/org/apache/qpid/framing/EncodingUtils.java b/java/common/src/main/java/org/apache/qpid/framing/EncodingUtils.java index 2efdb88fd9..61a0787fcd 100644 --- a/java/common/src/main/java/org/apache/qpid/framing/EncodingUtils.java +++ b/java/common/src/main/java/org/apache/qpid/framing/EncodingUtils.java @@ -609,8 +609,22 @@ public class EncodingUtils } } - public static long encodedCharacterLength() + //CHAR_PROPERTY + public static long encodedCharLength() { - return encodedShortStringLength("c"); + return encodedByteLength(); } + + public static char readChar(ByteBuffer buffer) + { + //This is valid as we know that the Character is ASCII 0..127 + return (char) buffer.get(); + } + + public static void writeChar(ByteBuffer buffer, char character) + { + //This is valid as we know that the Character is ASCII 0..127 + writeByte(buffer, (byte) character); + } + } diff --git a/java/common/src/main/java/org/apache/qpid/framing/PropertyFieldTable.java b/java/common/src/main/java/org/apache/qpid/framing/PropertyFieldTable.java index e6f5196434..b6556b2468 100644 --- a/java/common/src/main/java/org/apache/qpid/framing/PropertyFieldTable.java +++ b/java/common/src/main/java/org/apache/qpid/framing/PropertyFieldTable.java @@ -41,9 +41,11 @@ public class PropertyFieldTable implements FieldTable, Map public static final char AMQP_UNSIGNEDINT_PROPERTY_PREFIX = 'I'; public static final char AMQP_TIMESTAMP_PROPERTY_PREFIX = 'T'; public static final char AMQP_STRING_PROPERTY_PREFIX = 'S'; + public static final char AMQP_ASCII_CHARACTER_PROPERTY_PREFIX = 'k'; public static final char AMQP_ASCII_STRING_PROPERTY_PREFIX = 'c'; public static final char AMQP_WIDE_STRING_PROPERTY_PREFIX = 'C'; public static final char AMQP_BINARY_PROPERTY_PREFIX = 'x'; + public static final char AMQP_NULL_STRING_PROPERTY_PREFIX = 'n'; public static final char BOOLEAN_PROPERTY_PREFIX = 't'; public static final char BYTE_PROPERTY_PREFIX = 'b'; @@ -52,10 +54,10 @@ public class PropertyFieldTable implements FieldTable, Map public static final char LONG_PROPERTY_PREFIX = 'l'; public static final char FLOAT_PROPERTY_PREFIX = 'f'; public static final char DOUBLE_PROPERTY_PREFIX = 'd'; - public static final char NULL_STRING_PROPERTY_PREFIX = 'n'; + public static final char NULL_STRING_PROPERTY_PREFIX = AMQP_NULL_STRING_PROPERTY_PREFIX; public static final char STRING_PROPERTY_PREFIX = AMQP_STRING_PROPERTY_PREFIX; - public static final char CHAR_PROPERTY_PREFIX = AMQP_ASCII_STRING_PROPERTY_PREFIX; + public static final char CHAR_PROPERTY_PREFIX = AMQP_ASCII_CHARACTER_PROPERTY_PREFIX; public static final char BYTES_PROPERTY_PREFIX = AMQP_BINARY_PROPERTY_PREFIX; //Our custom prefix for encoding across the wire @@ -1180,26 +1182,26 @@ public class PropertyFieldTable implements FieldTable, Map case NULL_STRING_PROPERTY_PREFIX: buffer.put((byte) NULL_STRING_PROPERTY_PREFIX); break; + case AMQP_WIDE_STRING_PROPERTY_PREFIX: - //case AMQP_STRING_PROPERTY_PREFIX: - case STRING_PROPERTY_PREFIX: // TODO: look at using proper charset encoder buffer.put((byte) STRING_PROPERTY_PREFIX); EncodingUtils.writeLongStringBytes(buffer, (String) value); break; - - //case AMQP_ASCII_STRING_PROPERTY_PREFIX: + case AMQP_ASCII_STRING_PROPERTY_PREFIX: + case STRING_PROPERTY_PREFIX: // AMQP_STRING_PROPERTY_PREFIX: + //This is a simple ASCII string + buffer.put((byte) STRING_PROPERTY_PREFIX); + EncodingUtils.writeLongStringBytes(buffer, (String) value); + break; case CHAR_PROPERTY_PREFIX: - // TODO: look at using proper charset encoder buffer.put((byte) CHAR_PROPERTY_PREFIX); - EncodingUtils.writeShortStringBytes(buffer, "" + (Character) value); + EncodingUtils.writeChar(buffer, (Character) value); break; - case BYTES_PROPERTY_PREFIX: buffer.put((byte) BYTES_PROPERTY_PREFIX); EncodingUtils.writeBytes(buffer, (byte[]) value); break; - case XML_PROPERTY_PREFIX: // Encode as XML buffer.put((byte) XML_PROPERTY_PREFIX); @@ -1271,16 +1273,15 @@ public class PropertyFieldTable implements FieldTable, Map // TODO: use proper charset decoder case AMQP_WIDE_STRING_PROPERTY_PREFIX: - //case AMQP_STRING_PROPERTY_PREFIX: - case STRING_PROPERTY_PREFIX: + case AMQP_ASCII_STRING_PROPERTY_PREFIX: + case STRING_PROPERTY_PREFIX: // AMQP_STRING_PROPERTY_PREFIX: value = EncodingUtils.readLongString(buffer); break; case NULL_STRING_PROPERTY_PREFIX: value = null; break; - //case AMQP_ASCII_STRING_PROPERTY_PREFIX: case CHAR_PROPERTY_PREFIX: - value = EncodingUtils.readShortString(buffer).charAt(0); + value = EncodingUtils.readChar((buffer)); break; case BYTES_PROPERTY_PREFIX: value = EncodingUtils.readBytes(buffer); @@ -1356,16 +1357,15 @@ public class PropertyFieldTable implements FieldTable, Map encodingSize += EncodingUtils.encodedDoubleLength(); break; case AMQP_WIDE_STRING_PROPERTY_PREFIX: - //case AMQP_STRING_PROPERTY_PREFIX: - case STRING_PROPERTY_PREFIX: + case AMQP_ASCII_STRING_PROPERTY_PREFIX: + case STRING_PROPERTY_PREFIX: //AMQP_STRING_PROPERTY_PREFIX: encodingSize += EncodingUtils.encodedLongStringLength((String) value); break; case NULL_STRING_PROPERTY_PREFIX: - // There is no need for additiona size beyond the prefix + // There is no need for additional size beyond the prefix break; - //case AMQP_ASCII_STRING_PROPERTY_PREFIX: case CHAR_PROPERTY_PREFIX: - encodingSize += EncodingUtils.encodedShortStringLength("" + (Character) value); + encodingSize += EncodingUtils.encodedCharLength(); break; case BYTES_PROPERTY_PREFIX: encodingSize += 1 + ((byte[]) value).length; @@ -1374,7 +1374,7 @@ public class PropertyFieldTable implements FieldTable, Map encodingSize += EncodingUtils.encodedLongStringLength(valueAsXML(name, value)); break; default: - //encodingSize = 1 + EncodingUtils.encodedLongStringLength(String.valueOf(value)); + //encodingSize = 1 + EncodingUtils.encodedLongstrLength(String.valueOf(value)); // We are using XML String encoding throw new IllegalArgumentException("Unsupported type in field table: " + value.getClass()); } diff --git a/java/common/src/test/java/org/apache/qpid/framing/PropertyFieldTableTest.java b/java/common/src/test/java/org/apache/qpid/framing/PropertyFieldTableTest.java index e41487ba4b..f2067a5649 100644 --- a/java/common/src/test/java/org/apache/qpid/framing/PropertyFieldTableTest.java +++ b/java/common/src/test/java/org/apache/qpid/framing/PropertyFieldTableTest.java @@ -26,8 +26,6 @@ import junit.framework.TestCase; import java.util.Enumeration; import org.apache.mina.common.ByteBuffer; -import org.apache.mina.common.ByteBufferProxy; -import org.apache.mina.common.support.BaseByteBuffer; public class PropertyFieldTableTest extends TestCase { @@ -402,7 +400,7 @@ public class PropertyFieldTableTest extends TestCase Assert.assertEquals(size, result.getEncodedSize()); result.setChar("char", (char) 'c'); - size += 1 + EncodingUtils.encodedShortStringLength("char") + EncodingUtils.encodedCharacterLength(); + size += 1 + EncodingUtils.encodedShortStringLength("char") + EncodingUtils.encodedCharLength(); Assert.assertEquals(size, result.getEncodedSize()); result.setDouble("double", (double) Double.MAX_VALUE); @@ -444,7 +442,7 @@ public class PropertyFieldTableTest extends TestCase Assert.assertEquals(size, result.getEncodedSize()); result.setObject("object-char", 'c'); - size += 1 + EncodingUtils.encodedShortStringLength("object-char") + EncodingUtils.encodedCharacterLength(); + size += 1 + EncodingUtils.encodedShortStringLength("object-char") + EncodingUtils.encodedCharLength(); Assert.assertEquals(size, result.getEncodedSize()); result.setObject("object-double", Double.MAX_VALUE); |