Ho un sacco di classi JAXB annotato che hanno un campo in comune, così ho spostato quel campo a una classe super, come questoÈ possibile/Devo elencare le proprietà ereditate per un bean mappato JAXB nell'annotazione "propOrder"?
public class Base {
protected SomeType commonField;
}
@XmlRootElement(name = "foo") @XmlType(propOrder = { "commonField", "fooField" })
public class Foo extends Base {
private SomeOtherType fooField;
}
@XmlRootElement(name = "bar") @XmlType(propOrder = { "commonField", "barField" })
public class Bar extends Base {
private SomeOtherType barField;
}
Ora ogni volta che marshall uno dei Foo
o Bar
ottengo un IllegalAnnotationException
lamentarsi circa commonField
elencato in propOrder
ma non presente nella classe. Rimuovendolo dall'annotazione propOrder
, tutto funziona correttamente, ma penso che dovrei elencare tutti i campi mappati. Cosa mi manca?
essere consapevoli che questo coppie l'annotazione della sottoclasse di dettagli di implementazione private della superclasse. Rifacendo casualmente un nome di campo nella superclasse, senza modificare 'propOrder' a mano, si interrompe la serializzazione della sottoclasse. Quindi aggiungerà un campo serializzato alla superclasse. Inoltre, si noti che i nomi in 'propOrder' non sono i nomi forniti dalle annotazioni @XmlElement, ma sono invece gli identificatori di campi o proprietà Java. [Ciò detto, questa risposta mi è stata di grande aiuto oggi.] –