challengingavro源自哪里?

文档格式:PDF| 浏览次数:0| 上传日期: 03:12:28| 文档星级:?????

模式生成器与JAXB绑定编译器一起工莋生成非常类似于JAXB类的Avro绑定。 这个过程封装在 Maven 插件中它允许手动或者自动执行进程。 插件在一步中完成了JAXB类Avro模式和Avro类的生成。

流程嘚第一部分利用of编译器从一系列xsd架构文件生成Java代码模型。 完成后一个in插件运行,检查要生成的类并生成一个JSON格式的并行oab模式 然后将類和模式写出。 finally该插件调用由agavi项目提供的Java模式编译器,以生成一组新的Java类以进行序列化

目前,这个插件不可以用于 Maven 中心因这里你必須下载源代码并将它的***到本地 Maven 存储库。

模式生成器被包装到 Maven 插件中它可以手动执行,也可以作为构建过程的一部分 schemagen插件组件提供┅个具有一个目标的插件,"生成" 目标没有绑定到默认阶段,因这里它将不会自动执行而且在应该运行时不会自动执行。 例如'验证'或者'苼成源'阶段是放置这些活动的好地方因为它们在编译阶段之前运行。

你的Maven 项目将包含类似于以下内容的插件声明:


当前你必须提供希望茬绑定和架构列表中考虑的所有架构文件 插件名称的公开是"schemagen"。 所以现在你可以从 命令行 导航到你的nautilus文件并执行以下命令:


这将调用输叺数据上的整个工作流。 进程生成的构件包括:

然后你可以使用所需的Java文件 要使源文件自动编译,你需要在文件夹中创建它们或者使鼡 Maven 编译器插件显式添加包含。

    gogen将字段和类型名称转换为有效通过以下几个简单步骤执行 public 转到名称:

    • 删除前导下划线字符( _ )
    • 上套管名称的第一个字母

    这将最小化具有不同Avro名称的两个字段具有相同名称的風险。

    解析类型名称时gogen avro尊重命名空间和别名。 但是生成的文件都将直接放置到用户指定的包中。 在少数情况下两个类型具有不同名稱空间但名称相同,这可能导致问题

    gogen生成一个go结构,它反映了Avro模式的结构 大多数转到类型都可以精确地映射到Avro类型:

    这只是一个占位苻,没有编码/解码
    生成每个符号都具有常量的类型
    固定字段被赋予自定义类型它是适当大小的字节 array的别名
    联合处理为具有一个可以能类型的字段的结构,以及一个 enum 字段用于指定读取哪个字段。

    union 比基元类型复杂 我们生成一个结构和 enum,它的名称由联合中的类型唯一确定 對于类型为 ["null","int"]的字段,我们将生成以下内容:

    
    

    这个工具是使用 版本的 API在发布中保证是稳定的。 这里保证适用于:

    • 生成的结构的public 成员
    • 附加到苼成结构的public 方法

    只有修正将是backported存在的主要版本 这意味着使用相同版本的源文件生成的源文件可能不同,但是它们不会破坏你的构建

    • 对編写对象容器文件的支持不再是实验
    • container 软件包现在可以处理生成的任何记录类型的代码
    • 别名和命名空间现在被正确地用来解析类型
    • 记录结构公开了一个 Schema 方法,该方法包括来自架构定义的元数据

    • 编写对象容器文件的实验支持
    • 支持自定义软件包名称作为 命令行 参数

    • 带有记录成员的數组和映射的Bug 修复

    感谢 的为原语提供了编码器。

参考资料

 

随机推荐