in broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/transport/AbstractEncoder.java [450:570]
private void write(Type t, Object value)
{
switch (t)
{
case BIN8:
case UINT8:
writeUint8(coerce(Short.class, value));
break;
case INT8:
put(coerce(Byte.class, value));
break;
case CHAR:
put((byte) ((char)coerce(Character.class, value)));
break;
case BOOLEAN:
if (coerce(Boolean.class, value))
{
put((byte) 1);
}
else
{
put((byte) 0);
}
break;
case BIN16:
case UINT16:
writeUint16(coerce(Integer.class, value));
break;
case INT16:
writeUint16(coerce(Short.class, value));
break;
case BIN32:
case UINT32:
writeUint32(coerce(Long.class, value));
break;
case CHAR_UTF32:
case INT32:
writeUint32(coerce(Integer.class, value));
break;
case FLOAT:
writeUint32(Float.floatToIntBits(coerce(Float.class, value)));
break;
case BIN64:
case UINT64:
case INT64:
case DATETIME:
writeUint64(coerce(Long.class, value));
break;
case DOUBLE:
long bits = Double.doubleToLongBits(coerce(Double.class, value));
writeUint64(bits);
break;
case UUID:
writeUuid(coerce(UUID.class, value));
break;
case STR8:
writeStr8(coerce(String.class, value));
break;
case STR16:
writeStr16(coerce(String.class, value));
break;
case STR8_LATIN:
case STR16_LATIN:
Charset charset;
try
{
charset = Charset.forName("ISO-8859-15");
}
catch (UnsupportedCharsetException e)
{
// We do not want to start throwing execptions from here so we fall back to ISO_8859_1
charset = StandardCharsets.ISO_8859_1;
}
writeBytes(t, coerce(String.class, value).getBytes(charset));
break;
case STR8_UTF16:
case STR16_UTF16:
writeBytes(t, coerce(String.class, value).getBytes(StandardCharsets.UTF_16));
break;
case MAP:
writeMap((Map<String,Object>) coerce(Map.class, value));
break;
case LIST:
writeList(coerce(List.class, value));
break;
case ARRAY:
writeArray(coerce(List.class, value));
break;
case STRUCT32:
writeStruct32(coerce(Struct.class, value));
break;
case BIN40:
case DEC32:
case BIN72:
case DEC64:
// XXX: what types are we supposed to use here?
writeBytes(t, coerce(byte[].class, value));
break;
case VOID:
break;
default:
writeBytes(t, coerce(byte[].class, value));
break;
}
}