swetha
swetha

Reputation: 111

how to resolve java.lang.IllegalArgumentException Unsupported Avro type

private KafkaTemplate<String, KafkaMessage> kafkaTemplate; 

Message<KafkaMessage> message = MessageBuilder
        .withPayload(kafkaMessage)
        .setHeader(KafkaHeaders.TOPIC, targetTopic)
        .setHeader(KafkaHeaders.MESSAGE_KEY, "someStringValue" )
        .setHeader("X-Custom-Header", headerCreator.generateHeader(source, type)).build(); 

ListenableFuture<SendResult<String, KafkaMessage>> listenableFuture = kafkaTemplate.send(message); 

This is my code. and the exception occurs at send method.

The exception is java.lang.IllegalArgumentException: Unsupported Avro type. Supported types are null, Boolean, Integer, Long, Float, Double, String, byte[] and IndexedRecord ?

Upvotes: 3

Views: 5738

Answers (1)

Assuming that the Kafka topic is expecting an AVRO serialized object, you can add the plugin "avro-maven-plugin" to the project POM, and let Maven to generate the AVRO classes for you.

This plugin reads the AVRO schema' files, and automatically (once the project is build) generates the POJO classes. If the schema contains an error or is not valid, you will be warned before executing any code.

The KafkaTeamplate should use this POJO instead of KafkaMessage.

I recommend reading How to Use Schema Registry and Avro in Spring Boot Applications for a complete consumer and producer example, using Confluent components, for the overall project configuration (SERDEs, schema registry, etc.).

Upvotes: 4

Related Questions