約@XmlSeeAlso
アノテーションの目的は、 JAXB(JSR-222)実装に、そのメタデータを処理するときにクラスのメタデータも処理する必要があることを@XmlSeeAlso
知らせることです。一部の人々は、それが最も頻繁に使用されるユースケースであるため、それがマッピング継承に関連していると誤って信じています。クラスのサブクラスはJavaリフレクションを使用して決定できないため、サブクラスのマッピングも作成する必要があることをJAXB実装に通知するために使用されます。Resource
SomeItem
@XmlSeeAlso
以下は、ユースケースをサポートする方法の例です。
リソース
Javaクラスに対応する複合型名は、@XmlType
アノテーションを介して提供されます。
package forum12288631;
import javax.xml.bind.annotation.XmlType;
@XmlType(name="some_item")
public class Resource {
}
デモ
ルート要素名は、@XmlRootElement
アノテーションから取得することも、のインスタンスを介して指定することもできますJAXBElement
。のインスタンスを作成し、のインスタンスをJAXBElement
保持していることを示しますObject
。マーシャリングすると、xsi:type
属性が出力に含まれるようになります。
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);
}
}
出力
結果のXMLには、によって提供されるルート要素があり、属性JAXBElement
の値はの注釈から取得されます。xsi:type
@XmlType
Resource
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<resource xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="some_item"/>