Что может изменить порядок атрибутов элементов в сгенерированном файле XML с помощью Java?
Я использую Jaxb2Marshaller
а также XMLStreamWriter
генерировать XML-файлы из Java POJO-s из XSD
,
И я понял, что порядок атрибутов в элементах различен, если я запускаю свое приложение в разных средах.
Я также понял, что на моей машине он использует тот же порядок, что и в XSD, а на другой машине выглядит так, как будто он использует нисходящий алфавитно-цифровой порядок.
Но я не могу доказать это. буквенно-цифровой порядок конечно, но это очень вероятно.
Что может вызвать изменение этого заказа?
Я знаю, что порядок атрибутов не должен иметь значения в XML, но разве не существует решения для установки порядка для атрибутов элементов в Java? С любой библиотекой, конечно.
2 ответа
Я бы проверил, участвуют ли в обработке HashMaps или HashSets (и подобные коллекции / классы...).
Порядок элементов итератора этих коллекций не определен, может быть реализован по-разному между версиями JVM и реализацией
Если используется выбор базы данных, порядок элементов может отличаться (по поставщику, версии, машине, состоянию), когда не используется явный "порядок по". Например, на postgresql, на моем компьютере в первую очередь идут последние элементы, а затем остальные
JAXB использует отражение для сортировки. Список полей, возвращаемых через отражение, не сортируется в каком-либо определенном порядке (см. Здесь). Следовательно, при сортировке порядок атрибутов не обязательно отражает порядок в XSD или Java POJO. Скорее всего, разные версии Java в разных операционных системах могут реализовывать отражение по-разному, поэтому порядок может меняться.
Если вам нужно быть единообразными в разных установках, сортируйте их по алфавиту @XMLAccessorOrder
,
Это также может помочь.