Qpid Broker-J supports message conversion from one protocol into another. For example, when message is published with AMQP 0-9-1 and consumed using AMQP 1.0, the Broker takes care about converting the message from AMQP 0-9-1 format into AMQP 1.0. This page provides summary of how conversion from one protocol into another works.
Type conversion matrices
Various types can be used to set values of message properties and values in Map, List messages. The matrices below show how the types are converted. The red colour is used to highlight the types where conversion is unsupported yet. The orange/yellow colours are used to highlight the types for which conversion is implemented but the target type does not correspond to the original one even when protocol supports such type. The green colour is used to highlight the types where conversion is implemented into correct corresponding type on another protocol.
X - used to indicate the corresponding type to convert to
? - used to indicate the type which is currently used to convert
AMQP 0-8...0-9-1 types conversion into AMQP 1-0 types
AMQP 0-9-1 type | Used in JMS Client | AMQP 1-0 types | |||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
null | boolean | ubyte | ushort | uint | ulong | byte | short | int | long | float | double | decimal32 | decimal64 | decimal128 | char | timestamp | uuid | binary | string | symbol | list | map | array | ||
short-string | yes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
long-string | yes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
field-array | no *** |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
field-table | yes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
float | yes |
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
double | yes |
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
void | yes | X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
boolean | yes |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
byte (short-short-int) | yes |
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
short (short-int) | yes |
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
integer (long-int) | yes |
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
long (long-long-int) | yes |
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unsigned byte (short-short-uint) | no |
|
| X |
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unsigned short (short-uint) | no |
|
|
| X |
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unsigned integer (long-uint) | no |
|
|
|
| X |
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
unsigned long (long-long-unit) | no |
|
|
|
|
| X |
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
timestamp | no **** |
|
|
|
|
|
|
|
|
| ? |
|
|
|
|
|
| X |
|
|
|
|
|
|
|
decimal (decimal-value) | no ***** |
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
binary * | yes ** |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
ascii string * | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
wide string * | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
ascii character * | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
* types are not defined in 0-8...0-9-1 specifications
** Binary type is used to encode byte[] in Map message value. JMS does not allow using byte[] in values for message properties but Qpid Jms implementation allows setting byte[] as property values.
*** Implementation of Message#setObjectProperty(String,Object) allows to pass objects of types java.util.Map and java.util.List which would be encoded using FieldTable and FiledArray accordingly.
**** Timestamp type is used for specifying message timestamp as part of message properties. Values of type "java.util.Date" are not allowed to be used into Message#setObjectProperty(String,Object) where they are encoded as timestamps
***** Decimal types is used to encoded java.math.BigDecimal in Message#setObjectProperty(String,Object)
AMQP 0-8...0-9.1 types conversion into AMQP 0-10 types
AMQP 0-9.1 type | Used in JMS Client | AMQP 0-10 types | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
void | boolean | char | int8 | int16 | int32 | int64 | float | double | map | list | uuid | str16 | vbin32 | datetime | dec32 | dec64 | uint8 | uint16 | uint32 | uint64 | ||
short-string | yes |
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
| |
long-string | yes |
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
| |
field-array | no *** |
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
| |
field-table | yes *** |
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
| |
float | yes |
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
| |
double | yes |
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
| |
void | yes | X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
boolean | yes |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
byte (short-short-int) | yes |
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
short (short-int) | yes |
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
integer (long-int) | yes |
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
long (long-long-int) | yes |
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
| |
unsigned byte(short-short-uint) | no |
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
| |
unsigned short (short-uint) | no |
|
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
| X |
| |
unsigned integer (long-uint) | no |
|
|
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
| X | |
unsigned long (long-long-unit) | no |
|
|
|
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
| X |
timestamp | no **** |
|
|
|
|
|
| ? |
|
|
|
|
|
|
| X |
|
|
|
|
| |
decimal (decimal-value) | no ***** |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
| |
binary * | yes ** |
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
| |
ascii string * | no |
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
| |
wide string * | no |
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
| |
ascii character * | no |
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* types are not defined in 0-9-1/0-9/0-8 specifications
** Binary type is used to encode byte[] in Map message value. JMS does not allow using byte[] in values for message properties but Qpid Jms implementation allows setting byte[] as property values.
*** Implementation of Message#setObjectProperty(String,Object) allows to pass objects of types java.util.Map and java.util.List which would be encoded using FieldTable and FiledArray accordingly.
**** Timestamp type is used for specifying message timestamp as part of message properties. Values of type "java.util.Date" are allowed to be passed into Message#setObjectProperty(String,Object) where they are encoded as timestamps
***** Decimal type java.math.BigDecimal is allowed to pass into Message#setObjectProperty(String,Object). It is encoded as decimal
AMQP 0-10 types conversion into AMQP 0-8...0-9-1
0-10 defines the following mandatory types: uint8, uint16, uint32, sequence-no, uint64, datetime, uuid, vbin8, str8, vbin16, str16, byte-ranges, sequence-set, vbin32,map, array, struct32, bit.
AMQP 0-10 type
| Used in JMS Clients | AMQP 0-9-1 types | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
short-string | long-string | timestamp | field-array | field-table | float | double | decimal | void | boolean | byte | unsigned byte | short | unsigned short | int | unsigned int | long | unsigned long | binary | ascii str | wide str | ascii char | ||
bin8 | no |
|
|
|
|
|
|
|
|
|
|
|
| ? |
|
|
|
|
| X |
|
|
|
int8 | yes |
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
uint8 | no |
|
|
|
|
|
|
|
|
|
|
| X | ? |
|
|
|
|
|
|
|
|
|
char | no ****** |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
boolean | yes |
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
bin16 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
| ? |
|
|
| X |
|
|
|
int16 | yes |
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
uint16 | no |
|
|
|
|
|
|
|
|
|
|
|
|
| X | ? |
|
|
|
|
|
|
|
bin32 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ? |
| X |
|
|
|
int32 | yes |
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
uint32 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X | ? |
|
|
|
|
|
float | yes |
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char-utf32 | no |
| X*** |
|
|
|
|
|
|
|
|
|
|
|
| ? |
|
|
|
|
|
| |
sequence-no | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
bin64 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ? |
| X |
|
|
|
int64 | yes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
uint64 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ? | X |
|
|
|
|
double | yes |
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
datetime | no |
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
| ? |
|
|
|
|
|
bin128 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
uuid ** | no ****** | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
bin256 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
bin512 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
bin1024 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
bin40 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
dec32 | no |
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
| ? |
|
|
|
bin72 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
dec64 | no |
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
| X |
|
|
|
void | yes |
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
bit | no |
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
| ? |
|
|
|
vbin8 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
str8-latin | no | X | ? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
str8 | no |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
str8-utf16 | no |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
vbin16 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
str16-latin | no |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
str16 | no |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
str16-utf16 | yes |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
byte-ranges | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
sequence-se | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
vbin32 | yes **** |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
map | no ***** |
|
|
|
| X* |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
list | no ***** |
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
array | no |
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct32 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
* the type of keys in AMQP 0-10 map is utf8 encoded str8 whilst earlier protocols's FiledTable key type is short-string which allows only ASCII characters. Thus, conversion of UTF characters into ASCII characters would change the keys.
** UUID type is unsupported by AMQP 0-8/0-9.x. An exception is thrown on attempt to convert. Should it be converted into short string?
*** there is no corresponding type in AMQP 0-8..0-9.x. Thus, the most appropriate type for conversion UTF32 char is long-string.
**** byte[] can be used as a Map message value. JMS does not allow using in values for message properties
***** Qpid Client JMS extensions like ListMessage and MapMesssage allows specifying instances of java.util.Collection in parts of the messages. As result, the corresponding collections are encoded as AMQP 0-10 maps and lists.
****** Instances of java.util.UUID and java.lang.Character can be specified as part of ListMessage. They are encoded into AMQP 0-10 types "uui" and "char" (one byte) accordingly.
****** Values of type java.lang.Character are allowed to be set in Message#setObjectProperty(String,Object). They are encoded using type AMQP 0-10 type "char" (one byte).
AMQP 0-10 types conversion into AMQP 1.0 types
AMQP 0-10 type | Used in JMS Client | AMQP 1.0 types | |||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
null | boolean | ubyte | ushort | uint | ulong | byte | short | int | long | float | double | decimal32 | decimal64 | decimal128 | char | timestamp | uuid | binary | string | symbol | list | map | array | ||
bin8 | no |
|
|
|
|
|
|
| ? |
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
int8 | yes |
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uint8 | no |
|
| X |
|
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char | no ****** |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
boolean | yes |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bin16 | no |
|
|
|
|
|
|
|
| ? |
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
int16 | yes |
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uint16 | no |
|
|
| X |
|
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bin32 | no |
|
|
|
|
|
|
|
|
| ? |
|
|
|
|
|
|
|
| X |
|
|
|
|
|
int32 | yes |
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uint32 | no |
|
|
|
| X |
|
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
float | yes |
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
char-utf32 | no |
|
|
|
|
|
|
|
| ? |
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
sequence-no | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
bin64 | no |
|
|
|
|
|
|
|
|
| ? |
|
|
|
|
|
|
|
| X |
|
|
|
|
|
int64 | yes |
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
uint64 | no |
|
|
|
|
| X |
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
double | yes |
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
datetime | no |
|
|
|
|
|
|
|
|
| ? |
|
|
|
|
|
| X |
|
|
|
|
|
|
|
bin128 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
uuid | no ****** |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
bin256 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
bin512 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
bin1024 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
bin40 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
dec32 | no |
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
| ? |
|
|
|
|
|
bin72 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
dec64 | no |
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
| ? |
|
|
|
|
|
void | yes | X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
bit | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
vbin8 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
str8-latin | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
str8 | yes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
str8-utf16 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
vbin16 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
str16-latin | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
str16 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
str16-utf16 | yes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
byte-ranges | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
sequence-se | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
vbin32 | yes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
map | no ****** |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
list | no ****** |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
array | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
struct32 | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
**** byte[] can be used as a Map message value. JMS does not allow using in values for message properties
***** Qpid Client JMS extensions like ListMessage and MapMesssage allows specifying instances of java.util.Collection in parts of the messages. As result, the corresponding collections are encoded as AMQP 0-10 maps and lists.
****** Instances of java.util.UUID and java.lang.Character can be specified as part of ListMessage. They are encoded into AMQP 0-10 types "uui" and "char" (one byte) accordingly.
****** Values of type java.lang.Character are allowed to be set in Message#setObjectProperty(String,Object). They are encoded using type AMQP 0-10 type "char" (one byte).
AMQP 1-0 types conversion into AMQP 0-8...0-9.1
AMQP 1-0 type | Used in JMS Client | AMQP 0-9-1 types | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
short-string | long-string | timestamp | field-array | field-table | float | double | decimal | void | boolean | byte | ubyte | short | ushort | int | uint | long | ulong | binary | ascii str | wide str | ascii char | ||
null | yes |
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
boolean | yes |
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
ubyte | no |
|
|
|
|
|
|
|
|
|
|
| X | ? |
|
|
|
|
|
|
|
|
|
ushort | no |
|
|
|
|
|
|
|
|
|
|
|
|
| X | ? |
|
|
|
|
|
|
|
uint | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X | ? |
|
|
|
|
|
ulong | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ? | X |
|
|
|
|
byte | yes |
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
short | yes |
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
int | yes |
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
long | yes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
float | yes |
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
double | yes |
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
decimal32 | no |
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
decimal64 | no |
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
decimal128 | no |
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
char | no |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ? **** |
timestamp | no |
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
| ? |
|
|
|
|
|
uuid *** | no |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
binary | yes |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
string | yes |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
symbol | no |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
list | no |
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
map | no |
|
|
|
| X * |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
array | no |
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* - 1.0 map allows any type in keys whilst 0-8...0-9-1 FiledTable type supports only short-string as a key type. For string keys with length greater than 256, an exception is thrown on conversion.
*** - UUID type is unsupported by AMQP 0-8/0-9.x. An exception is thrown on attempt to convert. Should it be converted into short string?
**** - char in 1-0 is a UTF-32BE encoded unicode character but char in 0-10 is an octet. Should it be converted into string?
AMQP 1-0 types conversion into AMQP 0-10 types
AMQP 1-0 type | Used in JMS Client | AMQP 0-10 types | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
void | boolean | char | char-utf32 | int8 | int16 | int32 | int64 | float | double | map | list | uuid | str16 | vbin32 | datetime | dec32 | dec64 | uint8 | uint16 | uint32 | unit64 | ||
null | null | X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||
boolean | boolean |
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||
ubyte | - |
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
| ||
ushort | - |
|
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
| X |
| ||
uint | - |
|
|
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
| X | ||
ulong | - |
|
|
|
|
|
| ? |
|
|
|
|
|
|
|
|
|
|
|
|
| X | |
byte | byte |
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||
short | short |
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||
int | int |
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
|
| ||
long | long |
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
|
| ||
float | float |
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
|
| ||
double | double |
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
|
| ||
decimal32 | - |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
| ||
decimal64 | - |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
| ||
decimal128 | - |
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
| ||
char | - |
|
| ? | X |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
timestamp | - |
|
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
| ? | |
uuid | - |
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
| ||
binary | byte[] |
|
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
| ||
string | String |
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
| ||
symbol | - |
|
|
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
| ||
list | - |
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
| ||
map | - |
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
| ||
array | - |
|
|
|
|
|
|
|
|
|
| X |
|
|
|
|
|
|
|
|
|
Message properties conversion matrices
AMQP 0-8...0-9-1 message properties conversion into AMQP 1-0 message properties
AMQP 0-8...0-9-1 message | AMQP 1-0 message | ||||||
---|---|---|---|---|---|---|---|
Property origin | Property name | type | Section name | Property name | Type | Comments | Implemented |
message property | delivery mode | octet | header | durable | boolean | true when 'delivery mode'=2, otherwise false | Y |
message property | priority | octet | header | priority | unsigned byte |
| Y |
message property | expiration | short-string | header | ttl | milliseconds/ulong | expiration - 'arrival-time' | Y |
message property | expiration | short-string | header | absolute-expiry-time | timestamp /ulong |
| Y |
message property | content type | short-string | properties | content-type | symbol | value '"application/java-object-stream' changed to 'application/x-java-serialized-object' | Y |
message property | encoding | short-string | properties | content-encoding | symbol |
| Y |
message property | message id | short-string | properties | message-id | binary |
| Y |
message property | correlation id | short-string | properties | correlation-id | binary |
| Y |
message property | user id | short-string | properties | user-id | binary |
| Y |
message property | reply to | short-string | properties | reply-to | string | if binding url the value is changed to <exchange name>/<routing key> or <queue name> or <routing key> when either <exchange name>, <routing key> or <queue name> is specified, otherwise original value. No address support. | Y |
message property | timestamp | long | properties | creation-time | timestamp/ulong |
| N |
message property | type | short-string | message-annotation | jms-type | string |
| N |
message property | application id | short-string | application-properties | application-id | string |
| N |
message property | cluster id | short-string | application-properties | cluster-id | string |
| N |
message property | headers | field-table | application-properties | * | every entry except for 'qpid.subject' is put into application-properties as separate property. | Y | |
message property 'headers' | qpid.subject | short-string | properties | subject | string |
| Y |
message property 'headers' | JMSXGroupID | short-string | properties | group-id | string |
| N |
message property 'headers' | JMSXGroupSeq | int | properties | group-sequence | sequence number |
| N |
message delivery count | int | header | delivery-count | uint | dynamically set on sending | Y | |
message delivery count | int | header | first-acquirer | boolean | dynamically set on sending | Y | |
basic.publish | routing-key | short-string | properties | subject | string |
| Y |
basic.publish | exchange | short-string | properties | to | string |
| N |
AMQP 0-8...0-9-1 message properties conversion into AMQP 0-10 message properties
AMQP 0-8...0-9-1 message | AMQP 0-10 message | Implemented | |||||
---|---|---|---|---|---|---|---|
Property origin | Property name | type | Header entry | Property name | Type | Comments | |
message property | delivery mode | octet | delivery-properties | delivery-mode | uint8 |
| Y |
message property | priority | octet | delivery-properties | priority | uint8 |
| Y |
message property | expiration | short-string | delivery-properties | expiration | datetime | dynamically set on sending | Y |
message property | expiration | short-string | delivery-properties | ttl | uint64 |
| Y |
message property | timestamp | long | delivery-properties | timestamp | datetime |
| Y |
message property | content type | short-string | message-properties | content-type | str8 |
| Y |
message property | encoding | short-string | message-properties | content-encoding | str8 |
| Y |
message property | message id | short-string | message-properties | message-id | uuid | removes 'ID:', if value cannpt be converted into uuid, null is used . Is it correct? | Y |
message property | correlation id | short-string | message-properties | correlation-id | vbin16 |
| Y |
message property | user id | short-string | message-properties | user-id | vbin16 |
| Y |
message property | reply to | short-string | message-properties | reply-to | reply-to |
| Y |
message property | application id | short-string | message-properties | app-id | vbin16 |
| Y |
message property | headers | field-table | message-properties | application-headers | map |
| Y |
message property | type | short-string | message-properties | application-headers['x-jms-type'] | str8 |
| Y |
message content | long | message-properties | content-length | uint64 |
| Y | |
entry delivery count | int | delivery-properties | redelivered | bit | dynamically set on sending | Y | |
basic.publish | routing-key | short-string | delivery-properties | routing-key | str8 |
| Y |
basic.publish | exchange | short-string | delivery-properties | exchange | str8 |
| Y |
basic.publish | immediate | bit | delivery-properties | immediate | bit |
| Y |
basic.publish | mandatory | bit | delivery-properties | discard-unroutable | bit |
| N |
AMQP 0-10 message properties conversion into AMQP 1-0 message properties
AMQP 0-10 message | AMQP 1-0 message | Implemented
| |||||
---|---|---|---|---|---|---|---|
Property origin | Property name | Type | Section name | Property name | Type | Comments | |
delivery-properties | delivery-mode | uint8 | header | durable | unsigned byte |
| Y |
delivery-properties | priority | uint8 | header | priority | unsigned byte |
| Y |
delivery-properties | ttl | uint64 | header | ttl | milliseconds/ulong |
| Y |
delivery-properties | expiration | datetime | header | absolute-expiry-time | timestamp/ulong |
| Y |
delivery-properties | timestamp | datetime | properties | creation-time | timestamp/ulong |
| N |
delivery-properties | redelivered | bit | header | first-acquirer | boolean |
| N |
delivery-properties | routing-key | str8 | properties | subject | string |
| N |
delivery-properties | exchange | str8 | properties | to | string |
| N |
delivery-properties | immediate | bit |
|
|
|
|
|
delivery-properties | discard-unroutable | bit |
|
| |||
message-properties | content-type | str8 | properties | content-type | symbol | "application/java-object-stream" replaced with "application/x-java-serialized-object" | Y |
message-properties | content-encoding | str8 | properties | content-encoding | symbol |
| Y |
message-properties | message-id | uuid | properties | message-id | binary |
| Y |
message-properties | correlation-id | vbin16 | properties | correlation-id | binary |
| Y |
message-properties | user-id | vbin16 | properties | user-id | binary |
| Y |
message-properties | reply-to | reply-to | properties | reply-to | string |
| Y |
message-properties | app-id | vbin16 | application-properties | application-id | string |
| N |
message-properties | application-headers | map | application-properties | * |
| Y | |
message-properties | content-length | uint64 |
|
|
|
|
|
message-properies headers | qpid.subject | str8 | properties | subject | string |
| Y |
message properies headers | JMSXGroupID | str8 | properties | group-id | string |
| N |
message properties headers | JMSXGroupSeq | int | properties | group-sequence | sequence number |
| N |
message-properties | content-type | str8 | message-annotation | jms-type | string | N |
AMQP 0-10 message properties conversion into AMQP 0-8...0-9-1 message properties
AMQP 0-10 message | AMQP 0-9 message | Implemented
| |||||
---|---|---|---|---|---|---|---|
Property origin | Property name | Type | Section name | Property name | Type | Comments | |
delivery-properties | delivery-mode | uint8 | message property | delivery mode | octet |
| Y |
delivery-properties | priority | uint8 | message property | priority | octet |
| Y |
delivery-properties | ttl | uint64 | message property | expiration | short-string |
| Y |
delivery-properties | timestamp | datetime | message property | timestamp | long |
| N |
delivery-properties | redelivered | bit | |||||
delivery-properties | routing-key | str8 | |||||
delivery-properties | exchange | str8 | |||||
delivery-properties | immediate | bit |
|
|
|
|
|
delivery-properties | discard-unroutable | bit | |||||
message-properties | content-type | str8 | message property | content type | short-string |
| Y |
message-properties | content-encoding | str8 | message property | encoding | short-string |
| Y |
message-properties | message-id | uuid | message property | message id | short-string |
| Y |
message-properties | correlation-id | vbin16 | message property | correlation id | short-string |
| Y |
message-properties | user-id | vbin16 | message property | user id | short-string |
| Y |
message-properties | reply-to | reply-to | message property | reply to | short-string |
| Y |
message-properties | app-id | vbin16 | message property | application-id | short-string |
| N |
message-properties | application-headers | map | message property | headers | field-table |
| Y |
message-properties | content-length | uint64 |
|
|
|
|
|
AMQP 1-0 message properties conversion into AMQP 0-8...0-9-1 message properties
AMQP 1-0 message | AMQP 0-8...0-9-1 message |
|
|
| Implemented
| ||
---|---|---|---|---|---|---|---|
Section name | Property name | Type | Properties | Property name | Type | Comments | |
header | durable | boolean | message property | delivery mode | unsigned byte |
| Y |
header | priority | unsigned byte | message property | priority | unsigned byte |
| Y |
header | ttl | milliseconds/ulong | message property | expiration | short-string |
| Y |
header | absolute-expiry-time | timestamp /ulong |
|
|
|
|
|
header | delivery-count | uint |
|
|
|
|
|
header | first-acquirer | boolean |
|
|
|
|
|
properties | content-type | symbol | message property | content type | short-string |
| Y |
properties | content-encoding | symbol | message property | encoding | short-string |
| Y |
properties | message-id | binary | message property | message id | short-string |
| Y |
properties | correlation-id | binary | message property | correlation id | short-string |
| Y |
properties | user-id | binary | message property | user id | short-string |
| Y |
properties | reply-to | string | message property | reply to | short-string |
| Y |
properties | creation-time | timestamp /ulong | message property | timestamp | long |
| N |
properties | subject | string | message property | headers['qpid.subject'] | short-string |
| N |
properties | group-id | string | message property | headers['JMSXGroupID'] | short-string |
| N |
properties | group-sequence | sequence number | message property | headers['JMSXGroupSeq'] | int |
| N |
properties | to | string |
|
|
| exchange/routing-key | N |
application-properties | * | * | message property | headers | field-table |
| Y |
application-properties | cluster-id | string | message property | cluster-id | short-string |
| N |
application-properties | application-id | string | message property | application-id | short-string |
| N |
message-annotation | jms-type | string | message property | type | short-string |
| N |
AMQP 1-0 message properties conversion into AMQP 0-10 message properties
AMQP 1-0 message | AMQP 0-10 message | Implemented
| |||||
---|---|---|---|---|---|---|---|
Section name | Property name | Type | Property segment | Property name | type | Comments | |
header | durable | boolean | delivery-properties | delivery-mode | uint8 |
| Y |
header | priority | unsigned byte | delivery-properties | priority | uint8 |
| Y |
header | ttl /absolute-expiry-time | milliseconds/ulong | delivery-properties | ttl | uint64 |
| Y |
properties | content-type | symbol | message-properties | content-type | str8 |
| Y |
properties | content-encoding | symbol | message-properties | content-encoding | str8 |
| Y |
properties | message-id | binary | message-properties | message-id | uuid |
| Y |
properties | correlation-id | binary | message-properties | correlation-id | vbin16 |
| Y |
properties | user-id | binary | message-properties | user-id | vbin16 |
| Y |
properties | reply-to | string | message-properties | reply-to | reply-to |
| Y |
properties | creation-time | timestamp /ulong | delivery-properties | timestamp | datetime |
| N |
properties | subject | string | message-properies | headers['qpid.subject'] and routing-key | str8 |
| N |
properties | group-id | string | message-properies | headers['JMSXGroupID'] | str8 |
| N |
properties | group-sequence | sequence number | message properies | headers['JMSXGroupSeq' | str8 |
| N |
properties | to | string | delivery-properties | exchange | str8 |
| N |
properties | to | string | delivery-properties | routing-key | str8 |
| N |
application-properties | - | map | message-properties | application-headers | map |
| Y |
content | delivery-properties | content-length |
|
| Y | ||
message-annotation | jms-type | string | message-properties | content-type | str8 | N |
Message types conversion
Conversion of message content from AMQP 0-8...0-9-1 into AMQP 0-10 and back is simply a matter of copying the content bytes.
Conversion of message content from AMQP 0-8...0-10 into AMQP 1-0 is based on mime-type of the message (which is set as message property 'content-type'). Depending from mime-type the message content is converted into amqp:amqp-value
or amqp:data
formats. The table below contains the list of mime-types and corresponding AMQP 1-0 types. *
is used to indicate any other mime type which is not listed in the table.
mime type | content type |
---|---|
text/plain | amqp:amqp-value containing string |
text/xml | amqp:amqp-value containing string |
jms/stream-message | amqp:amqp-value containing list |
jms/map-message | amqp:amqp-value containing map |
amqp/list | amqp:amqp-value containing list |
amqp/map | amqp:amqp-value containing map |
* | amqp:data containing binary |
Conversion of message content from AMQP 1-0 to AQMQP 0-x is based on the AMQP type used in AMQP 1-0 message
AMQP type | java type | Target protocol | Target mime-type | Comment |
---|---|---|---|---|
string | String | 0-8...0-10 | text/plain | |
list of primitive types (double,float,string,byte[],boolean,byte,short,int,long, char) | java.util.List | 0-8...0-10 | jms/stream-message | |
map with primitive value types (double,float,string,byte[],boolean,byte,short,int,long, char) | java.util.Map | 0-8...0-10 | jms/map-message | Should null be included into the allowed types? |
list | java.util.List | 0-10 | amqp/list | |
map | java.util.Map | 0-10 | amqp/map | |
binary | java.lang.Serializable | 0-8...0-10 | application/java-object-stream | |
binary | byte[] | 0-8...0-10 | application/octet-stream |
At the moment the conversion into AMQP 1-0 might end-up in unexpected message types, for example, stream message can be received as object message and map message can be received as object message. It seems the same applies to conversion from AMQP 1-0 into AMQP 0-x
Conversion issues
This section summarises existing conversion issues
Issue description | Protocols |
---|---|
Missing Type conversion (decimal, uuid (0-10 --> 0-8...0-9-1)) | All |
Inaccurate Type conversion (unsigned types are converted into types (all), timestamps are converted into long (all), utf chars are converted into ascii chars, binary types are converted into signed (0-10)) | All |
Unsupported property key or value (uuid is unsupported in 0-8...0-9-1, decimal is unsupported in 0-10, etc) | All |
Missing conversion of message properties | All |
Conversion of application properties from AMQP 1-0 into AMQP 0-x headers (0-8...0-9-1 FieldTable and 0-10 map) when application properties length exceeds 255 character ( or contains non-ascii characters or start with illegal characters) | 1-0 --> 0-x |
Conversion of AMQP 0.x headers (represented as 0-8...0-9-1 FieldTable or 0-10 map) into AMQP 1-0 application properties when headers values are not primitives (for example, maps, collections, etc) | 0-x --> 1-0 |
Conversion of Map content from AMQP 1-0 into AMQP 0-x Map Message when keys are not strings | 1-0 --> 0-x |
JMS message type is changed when converted from AMQP 0.x into AMQP 1.0 (jms-type annotation is not set) | 0-x --> 1-0 |
JMS message type is changed when converted from AMQP 1-0 into AMQP 0.x (jms-type annotation is not respected) | 1-0 --> 0-x |
Handling of conversion error
The converter modules should employ the following strategies when message cannot be converted into target protocol format (for example, due to unsupported types, values, etc)
- log conversion failure and close connection with appropriate error
- log conversion failure and move message into DLQ or delete the message if no DLQ is configured
- log conversion failure and skip the message (similar as if the client rejected the message)
The approaches above can be configured on broker or virtual host using context variables.
Closing the connections should be a default behaviour.