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

Я использую Jaxb2Marshaller а также XMLStreamWriter генерировать XML-файлы из Java POJO-s из XSD,

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

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

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

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

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

2 ответа

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

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

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

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

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

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

Другие вопросы по тегам