Suppose I have these classes:
public class Container {
private String name;
private int number;
private List<ParentClass> list;
}
public class ParentClass {
private String value;
}
If I read it from an XML file using JAXB, I would expect the XML to be something like this:
<container>
<name>Name</name>
<number>1</number>
<subclass>
<value>Val</value>
</subclass>
<subclass>
<value>Val2</value>
</subclass>
<subclass>
<value>Val3</value>
</subclass>
</container>
And I would decorate my classes as follows:
@XmlRootElement(name = "container")
@XmlAccessorType(XmlAccessType.FIELD)
public class Container {
@XmlElement(name = "name")
private String name;
@XmlElement(name = "number")
private int number;
@XmlElement(name = "subclass", type = Subclass.class)
private List<ParentClass> list;
}
@XmlRootElement(name = "container")
@XmlAccessorType(XmlAccessType.FIELD)
public class ParentClass {
@XmlElement(name = "value")
private String value;
}
Now suppose it ParentClasswas actually an abstract class or interface, and I had two subclasses that were derived from it; sort of:
public abstract ParentClass {
void doSomething();
}
public IntSubclass extends ParentClass {
private int value;
public void doSomething() { ... }
}
public StringSubclass extends ParentClass {
private String value;
public void doSomething() { ... }
}
How can I use JAXB and XML to parse an attribute listto be a list StringSubclassor IntSubclassaccordingly?
That is, if I were to read elements from StringSubclassor IntSubclassfrom XML and be able to recognize that they are one or the other. Something like that:
<container>
<name>Name</name>
<number>1</number>
<stringSubclass>
<value>Val</value>
</stringSubclass>
<stringSubclass>
<value>Val2</value>
</stringSubclass>
<intSubclass>
<value>3</value>
</intSubclass>
</container>
Is there any way? Maybe with a different frame?
thank