![](/img/trans.png)
[英]Why does an Avro field that was string now require avro.java.string type?
[英]How to generate fields of type {"type":"string","avro.java.string":"String"} using avro-tools-1.9.1.jar IDL?
我們有JAVA gradle avro插件(davidmc24/gradle-avro-plugin)生成shema,並使用默認的stringType字符串,它會像這樣生成JAVA POJO:
Class A{
Shema = ...,{"type":"string","avro.java.string":"String"}...
string batchName;
}
然后我們使用相同的avdl文件來生成C#包,我們的解決方案是先用avro-tools-1.9.1.jar生成avsc文件,這樣會生成avsc
"fields" : [ {
"name" : "batchName",
"type" : "string"
},
我們有一個 C# 生產者和 Java 消費者,在這種情況下,batchName 不能在 JAVA 消費者端反序列化,我們得到以下錯誤: org.apache.avro.util.Utf8 cannot be cast to java.lang.String
所以,我猜是shema dissync,能否幫忙指出如何讓avro-tools-1.9.1.jar也生成avro.java.string類型關鍵字的字段,這樣我們就可以了,謝謝!
GenericDatumReader 交易字符串和 java.lang.String 不同的代碼在這里:
if (logicalType != null) {
Conversion<?> conversion = getData().getConversionFor(logicalType);
if (conversion != null) {
return convert(datum, expected, logicalType, conversion);
}
}
我的解決方案將使用架構注冊表。 通常,您將有前 1 到 5 個字節作為注冊表中的架構 ID。 您可以使用該模式對數據進行脫鹽處理。 並獲取和genericRecord。 我認為這應該可以解決您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.