A JAXBElement
будет сгенерировано для свойств выбора, где несколько элементов XML будут соответствовать одному и тому же классу Java.Это делается для того, чтобы сохранить информацию об элементе, поскольку ее нельзя извлечь из типа значения.
binding.xml
Следующий файл привязок схемы JAXBобеспечит генерацию свойства выбора:
<?xml version="1.0" encoding="UTF-8"?>
<bindings xmlns="http://java.sun.com/xml/ns/jaxb"
version="2.1">
<globalBindings choiceContentProperty="true"/>
</bindings>
XML-схема, которая будет производить Object
Свойство
В этой версии XML-схемы все элементы XML будут соответствовать другому классу Java:
<xsd:choice>
<xsd:element name="address" type="address"/>
<xsd:element name="phone-number" type="phoneNumber"/>
<xsd:element name="note" type="xsd:string"/>
</xsd:choice>
Поскольку значение свойства choice достаточно для однозначной идентификации элемента, свойство не содержит JAXBElement для сохранения этой информации:
@XmlElements({
@XmlElement(name = "address", type = Address.class),
@XmlElement(name = "phone-number", type = PhoneNumber.class),
@XmlElement(name = "note", type = String.class)
})
protected Object addressOrPhoneNumberOrNote;
XML-схема, которая будет производить JAXBElement
Свойство
Теперь мы изменим структуру выбора так, чтобы методы note
и email
соответствовали String
class.
<xsd:choice>
<xsd:element name="address" type="address"/>
<xsd:element name="phone-number" type="phoneNumber"/>
<xsd:element name="note" type="xsd:string"/>
<xsd:element name="email" type="xsd:string"/>
</xsd:choice>
Поскольку значение свойства выбора больше не является достаточным для однозначной идентификации элемента, свойство должно содержать JAXBElement для сохранения этой информации:
@XmlElementRefs({
@XmlElementRef(name = "phone-number", type = JAXBElement.class),
@XmlElementRef(name = "email", type = JAXBElement.class),
@XmlElementRef(name = "address", type = JAXBElement.class),
@XmlElementRef(name = "note", type = JAXBElement.class)
})
protected JAXBElement<?> addressOrPhoneNumberOrNote;
Для получения дополнительной информации