Details
-
Type:
Improvement
-
Status: Resolved
-
Priority:
Major
-
Resolution: Fixed
-
Affects Version/s: 2.14.2, 2.15.2, 2.16.0
-
Component/s: camel-kafka
-
Labels:None
-
Patch Info:Patch Available
-
Estimated Complexity:Unknown
-
Flags:Patch
Description
Kafka natively supports two encoders for messages:
- kafka.serializer.DefaultEncoder - encodes as byte arrays
- kafka.serializer.StringEncoder - encodes as Strings
Camel-kafka exposes settings to select the encoder ((serializerClass and keySerializerClass), but the org.apache.camel.component.kafka.KafkaProducer class hard-codes String for both the key and value types. This results in a ClassCastException when using the DefaultDecoder.
The attached patch fixes this as follows (conforming to kafka itself):
- If no serializerClass option is specified, the DefaultDecoder is used.
- If no keySerializerClass option is specified, the same encoder as serializerClass is used
This fix shouldn't break any existing code, as there was not previously a default setting (i.e., StringEncoder always had to be specified).
I created the patch against master, but it should backport easily to 2.15.x and 2.14.x.