父項屬性將根據它們在子屬性之前的指定順序進行編組。如果使用@XmlTransient
註釋父類,則可以在子類的propOrder
中包含父類中的屬性。
UPDATE
有沒有一種辦法可以讓它transistant但仍可正常使用呢?
否,在類上設置@XmlTransient
會將其從JAXB認爲映射的類中移除。 JAXB在子類的屬性匹配XML模式的規則之前綁定超類的屬性的原因。當您的Search
類沒有標記@XmlTransient
時,相應的XML模式如下所示。根據XML模式規則,爲了使searchExtended
類型的元素有效,來自超類型的元素必須出現在子類型中定義的任何元素之前。
<xs:complexType name="searchExtended">
<xs:complexContent>
<xs:extension base="search">
<xs:sequence>
<xs:element name="three" type="three" minOccurs="0"/>
</xs:sequence>
</xs:extension>
</xs:complexContent>
</xs:complexType>
<xs:complexType name="search">
<xs:sequence>
<xs:element name="one" type="one" minOccurs="0"/>
<xs:element name="two" type="two" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
你可以看到對應於通過運行下面的代碼你JAXB模型中的XML模式:
import java.io.IOException;
import javax.xml.bind.*;
import javax.xml.transform.Result;
import javax.xml.transform.stream.StreamResult;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(SearchExtended.class);
jc.generateSchema(new SchemaOutputResolver() {
@Override
public Result createOutput(String namespaceUri,
String suggestedFileName) throws IOException {
StreamResult result = new StreamResult(System.out);
result.setSystemId(suggestedFileName);
return result;
}
});
}
}
哪些是需要的順序和outcoming一個? – Gabber