0
我試圖通過從Java開始並使用schemagen(長故事)來複制一點架構。該模式是這樣的:問題使用@XmlElementRef創建模式
<xsd:element name="Responses">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element ref="tns:Accepted"/>
<xsd:element ref="tns:Rejected"/>
<xsd:element ref="oth:Exception"/>
</xsd:choice>
</xsd:complexType>
</xsd:element>
<xsd:element name="Accepted" type="tns:ResponseType"/>
<xsd:element name="Rejected" type="tns:ResponseType"/>
<xsd:complexType name="ResponseType">
<xsd:sequence>
<xsd:element name="Id" type="xsd:anyURI"/>
<!-- more valid elements -->
</xsd:sequence>
</xsd:complexType>
我創建了下面的類來表示它:
@XmlRootElement(name="Responses")
public class Responses {
@XmlElementRefs(value = {
@XmlElementRef(name="Accepted", namespace="http://sample.net", type=ResponseType.class),
@XmlElementRef(name="Rejected", namespace="http://sample.net", type=ResponseType.class),
@XmlElementRef(name="Exception", namespace="http://other.net", type=ExceptionType.class)
})
public List<JAXBElement<Object>> response;
}
「接受」和「拒絕」僅在ObjectFactory的定義和無級備份的名稱:
@XmlElementDecl(namespace = "http://sample.net", name = "Accepted")
public JAXBElement<ResponseType> createAccepted(ResponseType value) {
return new JAXBElement<ResponseType>(_Accepted_QNAME, ResponseType.class, null, value);
}
當我通過schemagen運行這些,我得到的錯誤
error: XmlElementRef points to a non-existent class.
我知道問題與「接受」和「拒絕」,但我該如何解決它?我需要支持這些元素名稱的類嗎?例如,如果我製作這樣的課程:
@XmlRootElement(name="Accepted")
public class Accepted extends ResponseType { }
schemagen接受它。但是,爲什麼我需要這種實現?
對不起,我肩膀d表示ResponseType存在。我會稍微編輯一下這個問題。 – 2011-04-05 21:40:48