XSD到Avro转换 - SchemaParseException: 不能重新定义roleNotesGroup。

问题描述 投票:1回答:1

我正在努力将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转换中有没有什么限制,不能再出现相同的名称?

java json xsd avro
1个回答
0
投票

从apache jira那里得到了一个答案.解决方案将是使用一个不同的命名空间(apache建议的)来处理那些重复出现的元素,或者使用别名(对我来说是可行的)。

https:/issues.apache.orgjirabrowseAVRO-2809)。

© www.soinside.com 2019 - 2024. All rights reserved.