Тип аннотации XmlIDREF
@Retention(value=RUNTIME)
@Target(value={FIELD,METHOD})
public @interface XmlIDREF Сопоставляет свойство JavaBean с XML IDREF.
Для сохранения целостности ссылок графа объектов при сериализации в XML, а затем десериализации в XML, требуется, чтобы ссылка на объект была передана по ссылке или по содержанию соответствующим образом. Аннотации @XmlID и @XmlIDREF вместе позволяют настроить отображение типа свойства JavaBean по содержанию или ссылке.
Использование
Аннотация@XmlIDREF может использоваться со следующими элементами программы: - свойство JavaBean
- нестатическое, непеременное поле
Дополнительную общую информацию см. в разделе «Спецификация пакета» в документации javax.xml.bind.package.
Использование ограничено следующими условиями:
- Если тип поля или свойства — тип коллекции, то тип элемента коллекции должен содержать свойство или поле, помеченное аннотацией
@XmlID. - Если поле или свойство имеет единственное значение, то тип свойства или поля должен содержать свойство или поле, помеченное аннотацией
@XmlID.Примечание: Если тип элемента коллекции или тип свойства (для типов, не являющихся коллекциями) — java.lang.Object, то экземпляр должен содержать свойство/поле, помеченное атрибутом
@XmlID. - Эта аннотация может использоваться со следующими аннотациями:
XmlElement,XmlAttribute,XmlListиXmlElements.
Пример: Сопоставление свойства JavaBean с xs:IDREF (т. е. по ссылке, а не по содержанию)
//EXAMPLE: Code fragment
public class Shipping {
@XmlIDREF public Customer getCustomer();
public void setCustomer(Customer customer);
....
}
<!-- Example: XML Schema fragment -->
<xs:complexType name="Shipping">
<xs:complexContent>
<xs:sequence>
<xs:element name="customer" type="xs:IDREF"/>
....
</xs:sequence>
</xs:complexContent>
</xs:complexType> Пример 2: Ниже приведен полный пример сопоставления по содержанию и по ссылке.
// By default, Customer maps to complex type xs:Customer
public class Customer {
// map JavaBean property type to xs:ID
@XmlID public String getCustomerID();
public void setCustomerID(String id);
// .... other properties not shown
}
// By default, Invoice maps to a complex type xs:Invoice
public class Invoice {
// map by reference
@XmlIDREF public Customer getCustomer();
public void setCustomer(Customer customer);
// .... other properties not shown here
}
// By default, Shipping maps to complex type xs:Shipping
public class Shipping {
// map by reference
@XmlIDREF public Customer getCustomer();
public void setCustomer(Customer customer);
}
// at least one class must reference Customer by containment;
// Customer instances won't be marshalled.
@XmlElement(name="CustomerData")
public class CustomerData {
// map reference to Customer by containment by default.
public Customer getCustomer();
// maps reference to Shipping by containment by default.
public Shipping getShipping();
// maps reference to Invoice by containment by default.
public Invoice getInvoice();
}
<!-- XML Schema mapping for above code frament -->
<xs:complexType name="Invoice">
<xs:complexContent>
<xs:sequence>
<xs:element name="customer" type="xs:IDREF"/>
....
</xs:sequence>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Shipping">
<xs:complexContent>
<xs:sequence>
<xs:element name="customer" type="xs:IDREF"/>
....
</xs:sequence>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="Customer">
<xs:complexContent>
<xs:sequence>
....
</xs:sequence>
<xs:attribute name="CustomerID" type="xs:ID"/>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="CustomerData">
<xs:complexContent>
<xs:sequence>
<xs:element name="customer" type="xs:Customer"/>
<xs:element name="shipping" type="xs:Shipping"/>
<xs:element name="invoice" type="xs:Invoice"/>
</xs:sequence>
</xs:complexContent>
</xs:complexType>
<xs:element name"customerData" type="xs:CustomerData"/>
<!-- Instance document conforming to the above XML Schema -->
<customerData>
<customer customerID="Alice">
....
</customer>
<shipping customer="Alice">
....
</shipping>
<invoice customer="Alice">
....
</invoice>
</customerData> Пример 3: Отображение списка на повторяющийся элемент типа IDREF
// Code fragment
public class Shipping {
@XmlIDREF
@XmlElement(name="Alice")
public List customers;
}
<!-- XML schema fragment -->
<xs:complexType name="Shipping">
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Alice" type="xs:IDREF"/>
</xs:choice>
</xs:sequence>
</xs:complexType> Пример 4: Сопоставление списка со списком элементов типа IDREF.
//Code fragment
public class Shipping {
@XmlIDREF
@XmlElements(
@XmlElement(name="Alice", type="Customer.class")
@XmlElement(name="John", type="InternationalCustomer.class")
public List customers;
}
<!-- XML Schema fragment -->
<xs:complexType name="Shipping">
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Alice" type="xs:IDREF"/>
<xs:element name="John" type="xs:IDREF"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
- С момента:
- JAXB2.0
- См. также:
XmlID
© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.