Protobuf

JVM since1.0.0 Native since1.5.0

Serialize and deserialize Java objects using Google’s Protocol buffers.

What’s inside

Please refer to the above link for usage and configuration details.

Maven coordinates

Or add the coordinates to your existing project:

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-protobuf</artifactId>
</dependency>

Check the User guide for more information about writing Camel Quarkus applications.

Additional Camel Quarkus configuration

Generate classes from protobuf .proto files

Use the generate-code goal of quarkus-maven-plugin to generate Java classes from your *.proto service and message definitions stored in the src/main/proto directory:

<build>
    <plugins>
        <plugin>
            <groupId>io.quarkus</groupId>
            <artifactId>quarkus-maven-plugin</artifactId>
            <executions>
                <execution>
                    <goals>
                        <goal>generate-code</goal>
                        <goal>build</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

The camel-quarkus-protobuf integration test is a good way to learn more.

Serialize/Deserialize Java beans using JSON fields representation

Please note that some additional configurations might be needed when using contentTypeFormat=json. Indeed, in such a case, the generated Builder class needs to be registered for reflection.

For instance, let’s examine the ProtobufDataFormat below:

ProtobufDataFormat protobufJsonDataFormat = new ProtobufDataFormat(Person.getDefaultInstance(), ProtobufDataFormat.CONTENT_TYPE_FORMAT_JSON);

In such a case, the Person.Builder class should be registered for reflection, for instance as below:

@RegisterForReflection(targets = { org.apache.camel.quarkus.component.protobuf.it.model.AddressBookProtos.Person.Builder.class })

A concrete implementation of such a scenario is present in the camel-quarkus-protobuf integration test.