summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Ritchie <ritchiem@apache.org>2006-12-13 13:40:39 +0000
committerMartin Ritchie <ritchiem@apache.org>2006-12-13 13:40:39 +0000
commitcc3d9dfed5f5e3f97aa96270bec743cb60f409f6 (patch)
tree5f4cbfdcf114fc66e940b860e607239e0ff69ab6
parent95faa9d5a4bb495f9f6a60a4483c246ffa476f52 (diff)
downloadqpid-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
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/EncodingUtils.java18
-rw-r--r--java/common/src/main/java/org/apache/qpid/framing/PropertyFieldTable.java40
-rw-r--r--java/common/src/test/java/org/apache/qpid/framing/PropertyFieldTableTest.java6
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);