java - XSD 到 Avro 的转换 - SchemaParseException:无法重新定义 roleNotesGroup
问题描述
我正在将 xsd 转换为 avro 模式
XSD 片段:
<xsd:element name="roleNotesGroup">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="roleNotesSubGroup" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="roleNotesGroup" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="roleNotes" type="xsd:string" minOccurs="0">
<xsd:annotation>
<xsd:appinfo>
<source application="CUSTOMER" field="REL.CUSTOMER"/>
<fieldPiiAttribute value="INDIRECT"/>
<fieldPiiPurpose value="LEGITIMATE"/>
<fieldPiiEraseOption value="NO.ACTION"/>
<fieldPiiAccessibility value="ACCESS PORTABLE"/>
</xsd:appinfo>
</xsd:annotation>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="index" type="xsd:integer"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="index" type="xsd:integer"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="index" type="xsd:integer"/>
</xsd:complexType>
</xsd:element>
我在用
Schema schema = Schema.createRecord(name, null, null, false);
创建 avro 模式记录。在上面的 xsd 中,roleNotesGroup 是 roleNotesSubGroup 的子代,它是 roleNotesGroup 的子代。我可以递归地获取 avro 模式,直到 roleNotesSubGroup 然后将其转换为列表。
List<Schema.Field> is obtained recursively.
现在的问题是当我尝试将形成的字段添加到头元素 roleNotesGroup 使用
Schema schema = Schema.createRecord(name, null, null, false);
schema.setFields(schemaFields);
我收到以下错误:SchemaParseException: can't redefine roleNotesGroup
在 avro 或 avro 转换中是否有任何限制不能再次出现相同的名称?
解决方案
从 apache jira 得到答案。解决方案是为该重复元素使用不同的命名空间(由 apache 建议)或使用别名(适用于我)。
推荐阅读
- linux - 检查主板/BIOS/UEFI和CPU是否支持VT-D/IOMMU
- javascript - 使用 Promise 的 MongoDB 查询性能
- javascript - 错误事件触发了 Bootstrap 下拉大型菜单
- asp.net-mvc - 如何将我的对象列表绑定到.net MVC 5中的单选按钮
- java - 类构造函数给我一个错误
- amazon-web-services - 当我的 ECS 任务进入“待定”状态时,我该去哪里查看它们实际上在做什么?
- c# - 从 datagridview 数据集中填充 ComboBox 起始值
- postgresql-9.5 - 如何根据多个表从一个表中获取值
- c# - MVC 如何创建一个允许我只对某些字段执行 ModelState.IsValid 的表单
- .net - .NET 框架 4.7.2。未安装(并且没有错误消息)