Я работаю над преобразованием 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 элемента head, используя
Schema schema = Schema.createRecord(name, null, null, false);
schema.setFields(schemaFields);
Я получаю следующую ошибку: SchemaParseException: невозможно переопределить roleNotesGroup
Есть ли какие-либо ограничения в avro или avro конвертировании, что одни и те же имена не должны появляться снова?