XSD переопределить тип с нуля - PullRequest
0 голосов
/ 20 апреля 2019

Существует сложное определение сложного типа, которое имеет различные комбинации одинаковых элементов внутри choice.

. Это сводит с ума генератор Java xjc.Он генерирует один List<Object> для всех элементов вместо отдельных свойств.

Мне было интересно, есть ли способ переопределить сложный тип с нуля с помощью <xs:redefine> или что-то еще.Я не хочу создавать полную копию исходного xsd, но вместо этого я хочу включить ее в файл меньшего размера.

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://www.editeur.org/onix/2.1/reference"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://www.editeur.org/onix/2.1/reference"
    elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="Header">
        <xs:complexType>
            <xs:sequence>
                <xs:choice>
                    <xs:sequence>
                        <xs:element ref="A" />
                        <xs:element ref="B" minOccurs="0"/>
                    </xs:sequence>
                    <xs:element ref="B" />
                </xs:choice>
                <xs:element ref="C" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>

    <xs:element name="A">
        <xs:complexType></xs:complexType>
    </xs:element>

    <xs:element name="B">
        <xs:complexType></xs:complexType>
    </xs:element>

    <xs:element name="C">
        <xs:complexType></xs:complexType>
    </xs:element>

</xs:schema>

Желаемое переопределение:

<xs:element name="Header">
    <xs:complexType>
        <xs:sequence>
            <xs:element ref="A" minOccurs="0"/>
            <xs:element ref="B" minOccurs="0"/>
            <xs:element ref="C" />
        </xs:sequence>
    </xs:complexType>
</xs:element>

Upd

установка choiceContentProperty в <jaxb:globalBindings> не решает проблему, потому что теперь у меня есть два свойства: List<Object> aAndBOrB и C c

...