У меня есть класс, который я хочу заполнить содержимым из файла XML, используя JAXB. Мой XML-файл выглядит примерно так:
<root>
<mylist>
<item id="1">First Item</item>
<item id="2">Second Item</item>
</mylist>
</root>
Мои аннотированные классы JAXB выглядят так:
@XmlRootElement
class MyParentClass {
// I always populate this with a TreeSet
private Set<MyFieldItem> items;
public void setItems(Set<MyFieldItem> items) {
this.items = items;
}
@XmlElementWrapper("mylist") @XmlElement("item")
public Set<MyFieldItem> getItems() {
return items;
}
}
class MyFieldItem implements Comparable<MyFieldItem> {
private Integer id;
private String value;
public void setId(Integer id) {
this.id = id;
}
@XmlAttribute
public Integer getId() {
return id;
}
public void setValue(String value) {
this.value = value;
}
@XmlValue
public String getValue() {
return value;
}
public int compareTo(MyfieldItem o) {
return this.id.compareTo(o.getId());
}
}
Я считаю, что это расположение правильно сериализует мои объекты в XML, но когда я пытаюсь преобразовать его обратно, TreeSet , который я использую, становится HashSet .
Теоретически моя коллекция могла бы быть привязана к TreeSet (что решает проблему), но я бы предпочел правильно настроить JAXB и отложить эту логику в другом месте. Как мне сказать JAXB вместо этого построить TreeSet?