Существует сложное определение сложного типа, которое имеет различные комбинации одинаковых элементов внутри 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