Как поддерживать инкрементные версии файлов 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, поэтому этот ответ не относится к этой среде.

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