Code Generator for Java
The java generator is the core of providence, and should act as the source of truth for all other generated code. The generated code is described at depth in Providence Models and in Providence Services.
Options available in the Java generator:
android
: Adds [android.os.Parcelable] to messages.jackson
: Adds [Jackson 2.x] serialization annotations (tested on Jackson 2.7.2 and later).no_rw_binary
: Removes generated code to serialize and deserialize the [binary serializer protocol]. This can be done if not needed on limited platforms to reduce code size.hazelcast_portable
: Adds support for [hazelcast portable] and associated functionality. This only adapts the annotated part of the declared thrift.
Providence Android Parcelable
Providence supports android Parcelable
serialization. Adding the android
generator param will add the android.os.Parcelable
interface to all
messages, and add a static CREATOR
field for the parcelable creator.
class MyMessage extends PMessage<MyMessage,MyMessage._Field> implements Parcelable {
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel parcel) {
// ...
}
public static final Parcelable.Creator<MyMessage> CREATOR = new Parcelable.Creator<>() {
// ...
};
}
This way the generated objects can be used as stateful objects when sending intents between android processes.
Providence Jackson Serializable
Jackson is supported by using the Jackson 2+ JsonSerialize
and JsonDeserialize
annotations
on messages, and setting the JsonValue
annotation for getting the numeric value on enums.
The serialized content from the jackson serialization is compatible with the JsonSerializer
protocol, and it can parse anything the providence JsonSerializer
(and also the
TSimpleProtocolSerializer
) can generate, including supporting the json.compact
annotation.
It is triggered with the jackson
generator option.
The generated code will now also require maven dependencies to jackson 2.8.+
:
<dependencies>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
</dependency>
</dependencies>