【问题标题】:Generating AVRO classes in specific package在特定包中生成 AVRO 类
【发布时间】:2021-06-30 02:52:37
【问题描述】:

我有两个具有匹配名称空间和字段名称的 .avsc 文件。生成时,从第一个模式生成的类被第二个模式的类覆盖。有没有办法在特定目录中生成类,但只针对其中一个 .avsc 文件?

如果我更改 avro 架构中的命名空间,一切都很好,但 Kafka 消息没有被读取,我收到以下错误:

找不到类 com.package.TestClaim

很明显,因为更改后avro的命名空间是com.package.test_claim.TestClaim

这是我将 *.test_claim 添加到其中一个模式的命名空间时生成的。

【问题讨论】:

    标签: java avro


    【解决方案1】:

    在特定目录中,但仅适用于 .avsc 文件之一?

    这就是命名空间的作用。这在其他地方是不可覆盖的,所以是的,如果单独编译两个文件会发生冲突。

    不清楚您是如何编译 Java 类的,但如果您使用 Avro IDL 而不是 AVSC,您可以在 protocol 上的单个命名空间下声明/组合许多记录类型(这会将类写入单个文件夹)

    如果您需要不同/嵌套的包装,也可以使用

    @namespace("org.apache.avro.firstNamespace")
    protocol MyProto {
      @namespace("org.apache.avro.someOtherNamespace")
      record Foo {}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多