Как поддерживать инкрементные версии файлов xsd (спецификация ddex) в приложении Java?
Сценарий
У нас есть java-приложение, в котором размещена логика для анализа различных версий спецификаций ddex. Для каждой новой версии ddex мы в настоящее время поддерживаем соответствующий сопоставитель для сопоставления xml с нашими классами приложений. Вот как выглядит процесс:
DDEX XML -> JAXB -> JAXB Auto Gen. Классы JAVA -> Код сопоставителя -> Классы приложений
Эта конструкция не обслуживается в течение длительного времени. Это приводит к большому дублированию кода и повторяющимся усилиям по тестированию для каждой версии ddex, которая, как и в предыдущей версии, содержит много полей.
Я хотел бы знать, как можно лучше спроектировать такую систему. При необходимости мы открыты для перехода и на другие парсеры xml.
Примечание: я видел этот ответ, но хотел также узнать какие-либо идеи, относящиеся к ddex. Кроме того, ответ более 10 лет назад, поэтому хотел проверить, есть ли что-нибудь еще доступное сейчас.
1 ответ
На мой взгляд, JAXB (и технологии отображения данных в целом) - неправильный выбор, когда вам приходится иметь дело с частым изменением схемы. Я видел, как проекты на этом сильно разваливались.
Вместо сопоставления конкретных структур схемы с конкретными классами Java вы должны использовать общую модель дерева, такую как DOM, JDOM2 или XOM (DOM - самый старый, самый популярный и худший из трех - я бы выбрал JDOM2).
С помощью общей модели дерева вы можете спроектировать свое приложение таким образом, чтобы оно было устойчиво к большинству изменений входящего XML.
В качестве альтернативы можно использовать язык программирования, ориентированный на XML, такой как XSLT или XQuery.
Я не знаком с ddex, поэтому этот ответ не относится к этой среде.