Tôi đang cố gắng sắp xếp một danh sách các đối tượng đang triển khai một giao diện chung. Có 3 lớp và 1 giao diện liên quan đến:Lập danh sách các đối tượng thực hiện một giao diện chung, với JaxB
Cộng đồng lớp (có một phương pháp: Danh sách <Person> getPeople();)
Person giao diện (có một phương pháp: Chuỗi getName();)
Girl lớp (thực hiện Person)
Boy lớp (thực hiện Người)
Xem mã bên dưới.
Tôi muốn một XML mà trông giống như sau:
<community>
<people>
<girl>
<name>Jane</name>
</girl>
<boy>
<name>John</name>
</boy>
<girl>
<name>Jane</name>
</girl>
<boy>
<name>John</name>
</boy>
</people>
</community>
hoặc có thể là:
<community>
<people>
<person>
<girl>
<name>Jane</name>
</girl>
</person>
<person>
<boy>
<name>John</name>
</boy>
</person>
</people>
</community>
Cho đến nay những gì tôi nhận được là:
<community>
<people>
<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="girl">
<name>Jane</name>
</person>
<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="boy">
<name>John</name>
</person>
<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="girl">
<name>Jane</name>
</person>
<person xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="boy">
<name>John</name>
</person>
</people>
</community>
Tôi nhận ra tôi có thể thay đổi phần tử thành phần tử khác, nhưng tôi muốn tên phần tử là tên được spesified trong lớp Girl hoặc Boy.
Việc này có thể thực hiện được không? Cảm ơn.
@XmlRootElement(name = "community")
public class Community {
private List<Person> people;
@XmlElementWrapper
@XmlElement(name="person")
public List<Person> getPeople() {
return people;
}
public Community() {
people = new ArrayList<Person>();
people.add(new Girl());
people.add(new Boy());
people.add(new Girl());
people.add(new Boy());
}
}
@XmlRootElement(name = "girl")
public class Girl implements Person {
@XmlElement
public String getName() {
return "Jane";
}
}
@XmlRootElement(name = "boy")
public class Boy implements Person {
@XmlElement
public String getName() {
return "John";
}
}
@XmlJavaTypeAdapter(AnyTypeAdapter.class)
public interface Person {
public String getName();
}
public class AnyTypeAdapter extends XmlAdapter<Object, Object> {
@Override
public Object marshal(Object v) throws Exception {
return v;
}
@Override
public Object unmarshal(Object v) throws Exception {
return v;
}
}