我正在努力将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);
在上面的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: can't redefine roleNotesGroup。
在avro或avro转换中有没有什么限制,不能再出现相同的名称?
从apache jira那里得到了一个答案.解决方案将是使用一个不同的命名空间(apache建议的)来处理那些重复出现的元素,或者使用别名(对我来说是可行的)。