La razón JAXB tiene esto es para que coincida con la herencia de esquema XML. Sin embargo, se podría hacer algo como lo siguiente:
- Marque la @XmlTransient padres
- Ajuste el propOrder en la clase hija
Padres
import javax.xml.bind.annotation.XmlTransient;
@XmlTransient
public abstract class Parent {
private String parentProp;
public String getParentProp() {
return parentProp;
}
public void setParentProp(String parentProp) {
this.parentProp = parentProp;
}
}
Niño
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlRootElement
@XmlType(propOrder={"childProp", "parentProp"})
public class Child extends Parent {
private String childProp;
public String getChildProp() {
return childProp;
}
public void setChildProp(String childProp) {
this.childProp = childProp;
}
}
demostración
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Child.class);
Child child = new Child();
child.setParentProp("parent-value");
child.setChildProp("child-value");
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(child, System.out);
}
}
salida
<child>
<childProp>child-value</childProp>
<parentProp>parent-value</parentProp>
</child>
respuesta fresco, 1. funciona esto con la validación de esquema (cuando se desmarca)? 2. ¿Funcionará con @XmlTransient pero sin proporion – ekeren
@ekeren - 1. Depende de cómo se ve el esquema XML, si hay herencia entre los tipos complejos, entonces se espera que las propiedades de los tipos padre ocurran antes de que el niño escriba las propiedades. 2. Sí, pero sin propOrder el orden depende de JAXB impl. –
@BlaiseDoughan ¿hay alguna otra manera de tener primero propiedades secundarias sin tener que codificar las propiedades principales? Tener anotaciones como estas anotaciones para niños, viola un poco el paradigma de OOP ... Estoy usando EclipseLink MOXy – basZero