Le proprietà dei genitori verranno sottoposte a marshalling in base al loro ordine specificato prima delle proprietà figlio. È possibile includere le proprietà dalla classe padre nello propOrder
della classe figlio se si annota la classe genitore con @XmlTransient
.
UPDATE
C'è un modo per rendere transistant ma ancora usarla normalmente?
No, l'impostazione di @XmlTransient
su una classe lo rimuove dalle classi considerate da JAXB. La ragione per cui JAXB marha le proprietà della super classe prima che le proprietà della sottoclasse corrispondano alle regole dello schema XML. Quando la classe Search
non è contrassegnata con @XmlTransient
, lo schema XML corrispondente è il seguente. In base alle regole dello schema XML, affinché un elemento di tipo searchExtended
sia valido, gli elementi del tipo super devono essere presenti prima di qualsiasi elemento definito nel sottotipo.
<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>
Potete vedere lo schema XML che corrisponde al modello JAXB eseguendo il seguente codice:
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;
}
});
}
}
fonte
2012-09-18 10:52:32
Quali sono nell'ordine desiderato e quello in uscita? – Gabber