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

Apache Avro未生成UUID

祁权
2023-03-14

无论我尝试了什么,Avro都不会在代码中为字段生成UUID类。

版本:1.8.2

我试图用这样的模式生成UUID:

  "type": "record",
  "name": "RecordWithUUID",
  "namespace": "avro",
  "fields": [
    {
      "name": "uuid",
      "type": {
        "type": "string",
        "logicalType": "uuid"
      }
    }
  ]
}

这是来自Avro项目测试类的类TestReflectLogicalTypesRecordWithUUID,简而言之,这是Avro用来测试其代码功能的模式示例,我希望它能正常工作。

我这样运行,从我的方案中获取java代码:

java-jaravro-tools-1.8.2.jar编译模式my_scheme.avsc。

java-jaravro-tools-1.9.1.jar编译模式my_scheme.avsc。

来自Avro的初始类代码如下所示:

class RecordWithUUID {
  UUID uuid; // <- UUID (!!!)

  @Override
  public int hashCode() {
    return uuid.hashCode();
  }

  @Override
  public boolean equals(Object obj) {
    if (obj == null) {
      return false;
    }
    if (!(obj instanceof RecordWithUUID)) {
      return false;
    }
    RecordWithUUID that = (RecordWithUUID) obj;
    return this.uuid.equals(that.uuid);
  }
}

下面是我生成后得到的代码:

1.8.2命令行中的avro工具

  ..

@SuppressWarnings("all")
@org.apache.avro.specific.AvroGenerated
public class RecordWithUUID extends org.apache.avro.specific.SpecificRecordBase implements org.apache.avro.specific.SpecificRecord {
  private static final long serialVersionUID = 9147582668665082277L;
  public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"RecordWithUUID\",\"namespace\":\"avro\",\"fields\":[{\"name\":\"uuid\",\"type\":{\"type\":\"string\",\"logicalType\":\"uuid\"}}]}");
  public static org.apache.avro.Schema getClassSchema() { return SCHEMA$; }

  ..

  @Deprecated public java.lang.CharSequence uuid; //<- NO UUID

  ..

1.9.1命令行中的avro-工具

 ..

@org.apache.avro.specific.AvroGenerated
public class RecordWithUUID extends org.apache.avro.specific.SpecificRecordBase implements org.apache.avro.specific.SpecificRecord {
  private static final long serialVersionUID = 9147582668665082277L;
  public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"RecordWithUUID\",\"namespace\":\"avro\",\"fields\":[{\"name\":\"uuid\",\"type\":{\"type\":\"string\",\"logicalType\":\"uuid\"}}]}");
  public static org.apache.avro.Schema getClassSchema() { return SCHEMA$; }

  ..

   private java.lang.CharSequence uuid; //<- NO UUID
  ..

maven插件为avro1.8.2/1.9.1

  ..

@org.apache.avro.specific.AvroGenerated
public class RecordWithUUID extends org.apache.avro.specific.SpecificRecordBase implements org.apache.avro.specific.SpecificRecord {
  private static final long serialVersionUID = 9147582668665082277L;
  public static final org.apache.avro.Schema SCHEMA$ = new org.apache.avro.Schema.Parser().parse("{\"type\":\"record\",\"name\":\"RecordWithUUID\",\"namespace\":\"avro\",\"fields\":[{\"name\":\"uuid\",\"type\":{\"type\":\"string\",\"avro.java.string\":\"String\",\"logicalType\":\"uuid\"}}]}");
  public static org.apache.avro.Schema getClassSchema() { return SCHEMA$; }

  ..

   private java.lang.String uuid;//<- NO UUID
  ..

那么,是虫子还是我做错了什么?

共有1个答案

萧无尘
2023-03-14

试试1.10.0-SNAPSHOT,我已经在那里工作了(在其他版本中遇到与您相同的问题后)

 类似资料:
  • 我是JMeter的新手。我相信我已经成功安装了它,并且正在运行脚本记录器设置(http://jmeter.apache.org/usermanual/jmeter_proxy_step_by_step.pdf)。当我启动用于拦截浏览器请求的JMeter代理服务器时,应该在jeter/bin文件夹中生成一个名为ApacheJMeterTemporaryRootCA.crt的文件。它不是。所以,我无法

  • 我正在遵循这些设置Apache Bigtop的指导,以最终支持我运行Oozie。我尝试使用Bigtop,因为Oozie网站建议如果我想在Hadoop2+上运行我的Oozie安装,就使用Bigtop。

  • 我正在尝试将一个网站从Heroku迁移到AWS,但在代码构建方面遇到了麻烦。源代码在GitHub上,我使用的是CodePipeline-CodeBuild-Elastic Beanstalk。管道运行良好,代码似乎正在向Elastic Beanstalk过渡。然而,我被困在代码构建步骤。(buildspec.yml如下所示) 日志似乎可以很好地运行命令,但是当我将构建输出到S3存储桶时,没有构建文

  • 我正在尝试创建一个公钥以允许我推送到Git,但我的. ssh文件夹尚未创建。 以下是我运行的命令: $ssh-keygen-t rsa-Cemaill@me.com 生成公共/私有rsa密钥对 输入保存密钥的文件(/h/.ssh/id\u rsa): 这就是H:驱动器配置、数据、配置文件、配置文件中的全部内容。V2 我认为有一个问题,因为当我得到提示输入文件,其中保存密钥(/h//. ssh/id

  • 我使用的是精简型脚本SCS的汇总。我的问题是我无法生成源地图。 以下是我的汇总配置文件: 我不确定我到底做错了什么。下面是我正在使用的代码的链接。任何帮助都将不胜感激!

  • 从我的终端运行时,它只生成以下APK。请告诉我如何从android Studio获得默认的未签名apk。我尝试为带有空密钥库的unsigned创建单独的buildType,但没有任何用处。