Es gibt eine einfache Klasse Bean1
mit einer Unterliste vom Typ .JAXB override @XmlElement Typ der Liste
Ich versuche, die Klasse zu überschreiben, um den Typ der Liste zu ändern. Die neue Kindklasse (d. H. BeanChild2
) erweitert die vorhergehende (d. H. BeanChild1
).
public static class Bean2 extends Bean1
{
public Bean2()
{
super();
}
@Override
@XmlElement(name="child", type=BeanChild2.class)
public List<BeanChild1> getChildList()
{
return super.getChildList();
}
}
public static class BeanChild2 extends BeanChild1 { }
So, hier ist, wie ich es getestet:
public static void main(String[] args)
{
String xml = "<bean>" +
" <child></child>" +
" <child></child>" +
" <child></child>" +
"</bean>";
Reader reader = new StringReader(xml);
Bean2 b2 = JAXB.unmarshal(reader, Bean2.class);
assert b2.getChildList().get(0) instanceof BeanChild2; // fails
}
Der Test zeigt, dass, dass diese Liste noch Childs von BeanChild1
enthält.
Also, wie kann ich zwingen, das childList
Feld mit BeanChild2
Instanzen zu füllen?
Wenn es keine einfachen Lösungen gibt, dann fühlen sich frei, um mehr kreative Lösungen zu schreiben (zB mit XmlAdapter
s, Unmarshaller.Listener
, vielleicht eine zusätzliche Anmerkung auf dem Elternteil oder Kind Klasse ...)