Принудительное упорядочение наборов JAXB

#sorting #collections #jaxb #marshalling

#сортировка #Коллекции #jaxb

Вопрос:

Я сортирую объекты, у которых есть поля типа Set. Реализация не отсортирована, поэтому порядок результирующих XML-элементов произвольный, более того, я получаю разный порядок каждый раз, когда выполняю маршалинг.

Есть ли способ сообщить маршалл, как сортировать содержимое поля во время маршалинга?

Ответ №1:

Вы могли бы воспользоваться SortedSet . Если вы инициализируете экземпляр a Set в своем экземпляре, JAXB будет использовать эту реализацию вместо создания новой:

 package forum7686859;

import java.util.Set;
import java.util.TreeSet;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Root {

    //private Set<String> children = new HashSet<String>();
    private Set<String> children = new TreeSet<String>();

    public Set<String> getChildren() {
        return children;
    }

    public void setChildren(Set<String> children) {
        this.children = children;
    }

}
  

Комментарии:

1. Нет, это не то, чего я действительно хочу. Я НЕ хочу, чтобы моя коллекция всегда сортировалась, по своей природе это несортированные наборы. Все, что мне нужно, это обеспечить одинаковый порядок элементов в выводе XML для одной и той же коллекции.