私は @XmlIDREF
リファレンスアプローチを試しています。注釈は次のとおりです。
/**
* getter for Attribute/List<Attribute> attributes
* @return attributes
*/
@XmlElementWrapper(name="attributes")
@XmlElements({
@XmlElement(name="Attribute", type=AttributeJaxbDao.class)
})
@XmlIDREF
public List<Attribute> getAttributes() {
これはエラーメッセージにつながります:
javax.xml.bind.JAXBException:
Exception Description: Since the property or field [attributes] is set as XmlIDREF, the target type of each XmlElement declared within the XmlElements list must have an XmlID property. Please ensure the target type of XmlElement [Attribute] contains an XmlID property.
- with linked exception:
[Exception [EclipseLink-50035] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.JAXBException
Exception Description: Since the property or field [attributes] is set as XmlIDREF, the target type of each XmlElement declared within the XmlElements list must have an XmlID property. Please ensure the target type of XmlElement [Attribute] contains an XmlID property.]
at org.eclipse.persistence.jaxb.JAXBContext$TypeMappingInfoInput.createContextState(JAXBContext.java:832)
at org.eclipse.persistence.jaxb.JAXBContext.<init>(JAXBContext.java:143)
AttributeJaxbDao
注釈がありますが:
/**
* getter for xsd:string/String id
* @return id
*/
@XmlAttribute(name="id")
@XmlID
public String getId() {
「標準的な使用法」には2つの違いがあります@XmlIDREF
/ @XmlID
:
- AttributeJaxbDaoは派生クラスです-アノテーションはスーパークラスにあります
- 属性はインターフェースです-タイプは、
@XmlElement
アノテーションでAttributeJaxbDao.classと具体的に指定されています
この状況でエラーが表示されるのはなぜですか?これに対する回避策はありますか?インターフェイスと一般化を使用しないように強制されることを避けたいと思います。