You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 8 Next »

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 ClientAMQP 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 ClientsAMQP 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-propertiescontent-typestr8message-annotationjms-typestring 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

headersfield-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-annotationjms-typestringmessage-propertiescontent-typestr8 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 propertiesAll

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 strings1-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.

 

  • No labels