Что может изменить порядок атрибутов элементов в сгенерированном файле XML с помощью Java? - PullRequest
0 голосов
/ 11 января 2019

Я использую Jaxb2Marshaller и XMLStreamWriter для генерации XML-файлов из Java POJO-s из XSD.

И я понял, что порядок атрибутов в элементах отличается , если я запускаю свое приложение в разных средах .

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

Но я не могу доказать это. буквенно-цифровой порядок, конечно, но это очень вероятно.

Что может вызвать изменение этого заказа?

Я знаю, что порядок атрибутов не должен иметь значения в XML, но разве не существует решения для установки порядка атрибутов элементов в Java? Конечно, с любой библиотекой.

Ответы [ 2 ]

0 голосов
/ 11 января 2019

JAXB использует отражение для сортировки. Список полей, возвращаемых через отражение, не сортируется ни в каком конкретном порядке (см. здесь ). Следовательно, при сортировке порядок атрибутов не обязательно отражает порядок в XSD или Java POJO. Скорее всего, разные версии Java в разных операционных системах могут по-разному реализовывать отражение, поэтому порядок может меняться.

Если вам требуется согласованность только в разных установках, сортируйте их в алфавитном порядке, используя @XMLAccessorOrder.

Это также может помочь.

0 голосов
/ 11 января 2019

Я бы проверил, участвуют ли в обработке HashMaps или HashSets (и подобные коллекции / классы ...).

Порядок элементов итератора этих коллекций не определен , может быть реализован по-разному между версиями JVM и элементами

Если используется выбор базы данных, порядок элементов может отличаться (в зависимости от поставщика, версии, машины, состояния), когда не используется явный «порядок по». Например. на postgresql, на моем ПК сначала идут последние элементы, а затем остальные

...