当前位置: 首页 > 知识库问答 >
问题:

java.lang.ClassCastException: xx不能投到org.apache.avro.generic.IndexedRecord

宰父跃
2023-03-14

我能够将我的JavaBean类作为avro记录发布到kafka。但当我尝试消费时,我得到了类强制转换异常。为什么会发生这种情况?

制作人

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);

消费者

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);

例外

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.xxx.listener.KafkaMessageListenerThread.run(KafkaMessageListenerThread.java:56)

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

at java.util.

Avro模式

{
    "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"
         }
     ]
}

共有1个答案

梁丘波鸿
2023-03-14

尝试<code>org.apache.avro.reflect。ReflectDatumReader而不是<code>org.apache.avro.specific.SpecificDatumReader。

 类似资料:
  • 我向服务器调用一个请求网络,服务器总是响应如下所示的格式json: 对于每种请求,只有jsonObject数据包含不同的字段。新响应的示例: 因此,我决定让一个通用类调用ServerResult包含一个字段“Object”,以便将其强制转换为特定对象。 //ServerResult.class //client.java 请求完成后,我通过GSON将json转换为ServerResult对象: 然

  • 以下是异常日志: 下面是android.app.ContextImpl.GetSharedReferences异常抛出的代码 让我们假设日志信息是正确的,它应该几乎是正确的。 我的第一个问题是:在文件的第358行抛出强制转换异常ContextImpl.java什么意思?那里只有一个右括号。 我猜第358行下面的语句是异常的根本原因 因为sp被声明为SharedReferencesImpl,并且当g

  • 首先,请记住我是一个Java新手,这对我来说都是未探索的领域。 我遵循了一个指南(大约6个月前)来实现Spring Security性,但从未找到一个专门用于单独前端层的指南。 在实现令牌之前,每个步骤都有效,我得到了这个错误: 我在这里看到过其他类似的帖子,尽管它们讨论的内容不同 例如。 > 用户不能被强制转换为com.example.security.CustomUserDetailsSpri

  • 我创建了一个简单的Web API项目,我正试图用邮递员软件发布数据,但有些东西不起作用... 我的web api控制器的名称是ValuesController。 我的数据如下所示: 当我将Post方法修改为: 我收到邮递员的“坏请求”信息

  • 本文向大家介绍PHP+AJAX 投票器功能,包括了PHP+AJAX 投票器功能的使用技巧和注意事项,需要的朋友参考一下 终于到AJAX,翻译过来就是”异步Javascript和XML”,他可以实现网页内容的部分加载,可提高用户体验。现在有很多网站都有用这技术,反正你知道他能实现网页的异步更新就差不多了。当然下面的例子都相对简单,并没有体现它这一特点~ 投票器 新建文件【 AJAX投票.html】

  • 问题内容: 我想从数据库中获取价值,就我而言,我曾经从数据库中获取价值,但是却遇到了这个错误 这是我的代码 任何帮助将是荣幸:) @raffian,你的意思是这样吗? 问题答案: 问题是 这将返回一个 对象数组 列表 (Object []), 其中包含表中每一列的标量值。Hibernate将使用ResultSetMetadata推断返回的标量值的实际顺序和类型。 解 相关连结 使用迭代器