You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@avro.apache.org by Ratha v <vi...@gmail.com> on 2016/04/14 09:33:43 UTC

java.lang.ClassCastException:xx cannot be cast to org.apache.avro.generic.IndexedRecord

Hi all;
I was able to publish my java bean class as avro record to kafka. but when
i try to consume i get class cast exception. Why this occurs?

*producer*

Schema schema = new Schema.Parser().parse(new File(
"/schemas/avro_schemas/test_schema.avsc"));

GenericRecord payload = new GenericData.Record(schema);

payload.put("name", fileName);

payload.put("timestamp", dateTime.toString());

payload.put("source", source);

payload.put("content", buf);

payload.put("customerCode", customercode);

producer.publish(topic, payload, schema);

*Consumer*

ConsumerIterator<byte[], byte[]> it = stream.iterator();

while (it.hasNext()) {

try {

byte[] received_message = it.next().message();

Schema  schema = new Schema.Parser().parse(new File(
"/schemas/avro_schemas/test_schema.avsc"));

DatumReader<GenericRecord> reader = new SpecificDatumReader<GenericRecord>(
schema);

Decoder decoder = DecoderFactory.get().binaryDecoder(received_message, null
);

GenericRecord payload = reader.read(null, decoder);

*Exception*

ava.lang.ClassCastException: com.xxx.File cannot be cast to
org.apache.avro.generic.IndexedRecord

at org.apache.avro.generic.GenericData.setField(GenericData.java:573)

at org.apache.avro.generic.GenericData.setField(GenericData.java:590)

at org.apache.avro.generic.GenericDatumReader.readField(
GenericDatumReader.java:193)

at org.apache.avro.generic.GenericDatumReader.readRecord(
GenericDatumReader.java:183)

at org.apache.avro.generic.GenericDatumReader.read(
GenericDatumReader.java:151)

at org.apache.avro.generic.GenericDatumReader.read(
GenericDatumReader.java:142)

at com.leightonobrien.core.impl.listener.KafkaMessageListenerThread.run(
KafkaMessageListenerThread.java:56)

at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)

at java.util.
*Avro Schema*

{

    "namespace": "com.xx",

     "type": "record",

     "name": "File",

     "fields":[

         {

            "name": "name", "type": "string"

         },

         {

            "name": "timestamp",  "type": "string"

         },

         {

            "name": "source", "type": "string"

         },

         {

            "name": "content", "type": "bytes"

         },

         {

            "name": "customerCode", "type": "string"

         }

     ]

}
-- 
-Ratha
http://vvratha.blogspot.com/