甲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>
既然选择属性的值是足以唯一地识别元件,该属性不包含的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
类。
<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;
更多信息
感谢您的回答,所以您告诉我**总是**如果我有对应于相同Java类的元素,我会得到一个JAXBElement >? – Nicolas
@Nicolas - 这是真实的,并确保您的XML文档可以被循环移除。如果没有JAXB元素,你会如何区分元帅应该使用哪个元素(例如,在我的例子中,是否将字符串的实例包装在“email”或“note”中?) –
好吧,我明白了,谢谢你的快速响应。 – Nicolas