У меня проблема с генерацией класса JAXB, с которой я надеялся получить помощь. Вот часть XML, которая является источником моей проблемы ...
<xs:complexType name="IDType">
<xs:choice minOccurs="0" maxOccurs="2">
<xs:element name="DriversLicense" minOccurs="0" maxOccurs="1" type="an..35" />
<xs:element name="SSN" minOccurs="0" maxOccurs="1" type="an..35" />
<xs:element name="CompanyID" minOccurs="0" maxOccurs="1" type="an..35" />
</xs:choice>
</xs:complexType>
<xs:simpleType name="an..35">
<xs:restriction base="an">
<xs:maxLength value="35" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="an">
<xs:restriction base="xs:string">
<xs:pattern value="[ !-~]*" />
</xs:restriction>
</xs:simpleType>
... теперь это сгенерирует JAXBElement
типов из-за choice
с maxOccurs > 1
. Я хочу избежать этого, поэтому я сделал это, изменив код для использования элемента «Обертка» и переместив maxOccurs
вверх в тег последовательности следующим образом ...
<xs:complexType name="IDType">
<xs:sequence maxOccurs="2">
<xs:element name=Wrapper>
<xs:complexType>
<xs:choice>
<xs:element name="DriversLicense" minOccurs="0" maxOccurs="1" type="an..35" />
<xs:element name="SSN" minOccurs="0" maxOccurs="1" type="an..35" />
<xs:element name="CompanyID" minOccurs="0" maxOccurs="1" type="an..35" />
</xs:choice>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="an..35">
<xs:restriction base="an">
<xs:maxLength value="35" />
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="an">
<xs:restriction base="xs:string">
<xs:pattern value="[ !-~]*" />
</xs:restriction>
</xs:simpleType>
Для генерации классов, похоже, он отлично работает - элемент JAXB заменяется списком упаковщиков как String
(т.е. List<IDType.Wrapper<String>
) и прекрасно компилируется.
Однако, когда я отменяю фактические данные XML в сгенерированных классах, данные в классе-обертке не заполняются - однако JAXB не выдает исключение.
Мой вопрос: Нужно ли мне изменить схему другим способом, чтобы эта работа работала? Или я могу добавить / изменить / удалить сгенерированный код или аннотации?