Właściwości rodziców zostaną uporządkowane na podstawie ich określonej kolejności przed właściwościami podrzędnymi. Możesz dołączyć właściwości z klasy nadrzędnej do klasy propOrder
klasy potomnej, jeśli opisujesz klasę nadrzędną za pomocą @XmlTransient
.
UPDATE
Czy istnieje sposób mogę zrobić to transistant ale nadal używać go normalnie?
Nie, ustawienie @XmlTransient
dla klasy usuwa ją z klas, które JAXB uważa za zmapowane. Powodem, że JAXB marhall właściwości super klasy przed właściwościami podklasy jest dopasowanie reguł schematu XML. Gdy twoja klasa Search
nie jest oznaczona @XmlTransient
, odpowiedni schemat XML jest następujący. Zgodnie z regułami schematu XML, aby element typu searchExtended
był poprawny, elementy z supertypu muszą występować przed dowolnymi elementami zdefiniowanymi w podtypach.
<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>
można zobaczyć schemat XML, który odpowiada modelu JAXB uruchamiając następujący kod:
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;
}
});
}
}
Jakie są odpowiedniej kolejności, a od strony wyjścia jeden? – Gabber