Я хотел бы сделать следующее:
public abstract class SomeItems<E>
{
protected List<E> items;
public void setItems(List<E> items)
{
this.items = items;
}
....do other stuff with items....
}
@XmlRootElement(name = "foos")
public class Foos extends SomeItems<Foo>
{
@XmlElementWrapper(name="items")
@XmlElement(name="foo")
public List<Foo> getItems()
{
return this.items;
}
}
@XmlRootElement(name = "bars")
public class Bars extends SomeItems<Bar>
{
@XmlElementWrapper(name="items")
@XmlElement(name="bar")
public List<Bar> getItems()
{
return this.items;
}
}
Но это приводит к следующему XML:
<foos>
</foos>
Что я пытаюсь получить, это:
<bars>
<items>
<bar>x</bar>
<bar>y</bar>
</items>
</bars>
<foos>
<items>
<foo>x</foo>
<foo>y</foo>
</items>
</foos>
Но единственный способ получить этот XML - это сделать следующее:
public abstract class SomeItems<E>
{
protected List<E> items;
public void setItems(List<E> items)
{
this.items = items;
}
@XmlElementWrapper(name="items")
@XmlElements({
@XmlElement(name="foo", type=Foo.class),
@XmlElement(name="bar", type= Bar.class)
})
public List<E> getItems() {
return this.items;
}
}
@XmlRootElement(name = "foos")
public class Foos extends SomeItems<Foo>
{
}
@XmlRootElement(name = "bars")
public class Bars extends SomeItems<Bar>
{
}
Но я не хочу, чтобы абстрактный класс обладал какими-либо знаниями о том, чтоклассы расширяют его.