用Java将json数据序列化为avro格式我有模式,但有多个

问题描述

我在将json数据序列化为avro格式时遇到麻烦。我有不同种类的json数据和主题名称(我可以通过主题获取模式),但是我不知道如何将json转换为avro格式。

# my data
{
  "requestId":"xxxxxxxxxx","clientName": "xxx","applicationName": "ccc"
}
# subject and schema
subject = "xxxtopic-value"
schema:
{"type":"record","name":"RequestMessage","namespace":"xxxxxx.avro","fields":[{"type":["null",{"type":"string","avro.java.string":"String"}],"name":"requestId","default":null},{"type":["null","name":"clientName","name":"applicationName","default":null}]}

我之前在Python中成功:

    # avro bytes
    schema_writer = avro.io.DatumWriter(schema)
    bytes_writer = io.BytesIO()
    encoder = avro.io.BinaryEncoder(bytes_writer)
    schema_writer.write(value_json,encoder)
    value_bytes = ZERO.to_bytes(1,"big") + schema_id.to_bytes(4,'big') + bytes_writer.getvalue()

但是我在Java中失败了,我陷入了困境

GenericDatumWriter writer = new GenericDatumWriter(schema);

ByteArrayOutputStream out = new ByteArrayOutputStream();
out.write(0);
out.write(ByteBuffer.allocate(4).putInt(latestSchemaMetadata.getId()).array());

BinaryEncoder encoder = EncoderFactory.get().directBinaryEncoder(out,(BinaryEncoder) null);
writer.write(jsonBody,encoder);
encoder.flush();

byte[] bytes = out.toByteArray();
out.close();

错误堆栈为

线程“主”中的异常java.lang.ClassCastException:无法将java.lang.String强制转换为org.apache.avro.generic.IndexedRecord

at org.apache.avro.generic.GenericData.getField(GenericData.java:804)
在org.apache.avro.generic.GenericData.getField(GenericData.java:823) 在org.apache.avro.generic.GenericDatumWriter.writeField(GenericDatumWriter.java:204) 在org.apache.avro.generic.GenericDatumWriter.writeRecord(GenericDatumWriter.java:195) 在org.apache.avro.generic.GenericDatumWriter.writeWithoutConversion(GenericDatumWriter.java:130) 在org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:82) 在org.apache.avro.generic.GenericDatumWriter.write(GenericDatumWriter.java:72)

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...