簡體   English   中英

如何使用 avro-tools-1.9.1.jar IDL 生成 {"type":"string","avro.java.string":"String"} 類型的字段?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM