Message Codecs

You can send any object you like across the event bus if you define and register a message codec for it.

Message codecs have a name and you specify that name in the DeliveryOptions when sending or publishing the message:

eventBus.registerCodec(myCodec);

DeliveryOptions options = new DeliveryOptions().setCodecName(myCodec.name());

eventBus.send("orders", new MyPOJO(), options);

If you always want the same codec to be used for a particular type then you can register a default codec for it, then you don’t have to specify the codec on each send in the delivery options:

eventBus.registerDefaultCodec(MyPOJO.class, myCodec);

eventBus.send("orders", new MyPOJO());

You unregister a message codec with unregisterCodec.

Message codecs don’t always have to encode and decode as the same type. For example you can write a codec that allows a MyPOJO class to be sent, but when that message is sent to a handler it arrives as a MyOtherPOJO class.

Vert.x has built-in codecs for certain data types:

  • basic types (string, byte array, byte, int, long, double, boolean, short, char), or

  • some Vert.x data types (buffers, JSON array, JSON objects), or

  • types implementing the ClusterSerializable interface, or

  • types implementing the java.io.Serializable interface.

Important

In clustered mode, ClusterSerializable and java.io.Serializable objects are rejected by default, for security reasons.

You can define which classes are allowed for encoding and decoding by providing functions which inspect the name of the class: