Về @XmlSeeAlso
Mục đích của @XmlSeeAlso
chú thích chỉ để cho JAXB của bạn (JSR-222) thực hiện biết rằng khi nó được xử lý siêu dữ liệu cho Resource
rằng nó cũng nên xử lý siêu dữ liệu cho các SomeItem
là lớp học. Một số người nhầm tưởng rằng nó liên quan đến kế thừa bản đồ vì đó là trường hợp sử dụng nó thường được sử dụng nhất. Vì các lớp con của một lớp không thể được xác định bằng cách sử dụng sự phản chiếu Java, nên @XmlSeeAlso
được sử dụng để cho phép thực hiện JAXB biết rằng các ánh xạ cho các lớp con cũng sẽ được tạo ra.
Dưới đây là một ví dụ về cách bạn có thể hỗ trợ trường hợp sử dụng của bạn:
Resource
Tên loại phức tạp tương ứng với một lớp Java được cung cấp thông qua @XmlType
chú thích.
package forum12288631;
import javax.xml.bind.annotation.XmlType;
@XmlType(name="some_item")
public class Resource {
}
Demo tên phần tử
Gốc có thể đến từ các @XmlRootElement
chú thích hoặc có thể được cung cấp thông qua một thể hiện của JAXBElement
. Chúng tôi sẽ tạo một phiên bản JAXBElement
và cho biết rằng nó đang giữ một phiên bản Object
. Khi marshalled này sẽ cho các thuộc tính xsi:type
được bao gồm trong đầu ra.
package forum12288631;
import javax.xml.bind.*;
import javax.xml.namespace.QName;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Resource.class);
Resource resource = new Resource();
JAXBElement<Object> jaxbElement = new JAXBElement<Object>(QName.valueOf("resource"), Object.class, resource);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(jaxbElement, System.out);
}
}
Output
XML kết quả có phần tử gốc được cung cấp bởi các JAXBElement
và giá trị của thuộc tính xsi:type
xuất phát từ @XmlType
chú thích trên Resource
.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<resource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="some_item"/>
Nguồn
2012-09-05 20:23:07