次の例では、xml スキーマを生成するときに xs:anyType を作成するため、JAXB に実際の型を認識させる方法を説明します。
実装クラス
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Response", propOrder = { "message", "companies", "resultsCount",
"exceptionMessage" })
@XmlSeeAlso({CompanyV8.class})
public class ResponseV8 extends Response<CompanyV8> {
}
親クラス
@XmlTransient
public abstract class Response<T extends CompanyDraft> {
private String message;
@XmlElement(name = "company")
private List<T> companies;
private Integer gisResultsCount;
private String exceptionMessage;
モデルクラス
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Company", propOrder = { "id", ...omitted... })
public class CompanyV8 extends CompanyDraft {
@XmlElement
private String BvDId;
@XmlElement
private String globalHeadquarterBvDId;
@XmlElement
private String parentHeadquarterBvDId;
@XmlElement
private String domesticHeadquarterBvDId;
@XmlElement
private List<BusinessPartnerSegmentDetailedV8> businessPartnerSegment;
XML スキーマ
<xs:sequence>
<xs:element minOccurs="0" name="message" type="xs:string"/>
<xs:element maxOccurs="unbounded" minOccurs="0" name="company" type="xs:anyType"/>
<xs:element minOccurs="0" name="gisResultsCount" type="xs:int"/>
<xs:element minOccurs="0" name="exceptionMessage" type="xs:string"/>
</xs:sequence>
JAXB が type="tns:Company" の代わりに type="xs:anyType" を作成したことがわかるように