2013-07-03 145 views
1

我有數據以protobuff格式序列化,我想將其轉換爲Avro序列化。將protobuf轉換爲avro

我有使用

ProtoTest.Msg msg = buildMessage(); 
    ProtobufData protobufData = ProtobufData.get(); 
    Schema protoSchema = protobufData.getSchema(ProtoTest.Msg.class); 
    Object o = protobufData.newRecord(msg, protoSchema); 

沒有問題讀取原數據所得ö又是一個protobuf的對象。現在我想寫Ø作爲Avro公司具有相同的架構

GenericDatumWriter genericDatumWriter = new GenericDatumWriter(protoSchema); 
    OutputStream out = new ByteArrayOutputStream(); 
    Encoder encoder = EncoderFactory.get().binaryEncoder(out, null); 
    genericDatumWriter.write(o, encoder); 

但是運行上面的代碼在方法拋出一個異常

java.lang.ClassCastException: example.avro.ProtoTest$Msg cannot be cast to org.apache.avro.generic.IndexedRecord 
at org.apache.avro.generic.GenericData.getField(GenericData.java:526) 
at org.apache.avro.generic.GenericData.getField(GenericData.java:541) 
at org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:104) 
at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:66) 
at org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:58) 
at hermes.mediationOrchestrator.AvroFileWriteTest.testWriter3(AvroFileWriteTest.java:115) 

我怎樣才能改變原對象成avro對象?

Regards, Ronen。

+0

嗨羅南,你有沒有找到一種方法來解決這個問題?我也遇到同樣的情況。 – forhas

回答

相關問題