XSD 到 Avro 转换 - SchemaParseException:无法重新定义 roleNotesGroup
XSD to Avro Conversion - SchemaParseException: can't redefine 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 的子级,而 roleNotesSubGroup 是 roleNotesGroup 的子级。
我可以递归地获取 avro 模式,直到 roleNotesSubGroup 然后转换为列表。
List<Schema.Field> is obtained recursively.
现在的问题是,当我尝试使用
将形成的字段添加到头元素 roleNotesGroup 时
Schema schema = Schema.createRecord(name, null, null, false);
schema.setFields(schemaFields);
我收到以下错误:
SchemaParseException:无法重新定义 roleNotesGroup
avro 或 avro 转换中是否有相同名称不应再次出现的限制?
从 apache jira 得到了答案。
解决方案是为重复出现的元素使用不同的名称空间(apache 建议)或使用别名(对我有用)。
我正在努力将 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 的子级,而 roleNotesSubGroup 是 roleNotesGroup 的子级。 我可以递归地获取 avro 模式,直到 roleNotesSubGroup 然后转换为列表。
List<Schema.Field> is obtained recursively.
现在的问题是,当我尝试使用
将形成的字段添加到头元素 roleNotesGroup 时Schema schema = Schema.createRecord(name, null, null, false);
schema.setFields(schemaFields);
我收到以下错误: SchemaParseException:无法重新定义 roleNotesGroup
avro 或 avro 转换中是否有相同名称不应再次出现的限制?
从 apache jira 得到了答案。 解决方案是为重复出现的元素使用不同的名称空间(apache 建议)或使用别名(对我有用)。