Как управлять версиями и развертыванием XML-схем и сгенерированных из них классов? - PullRequest
0 голосов
/ 03 июня 2019

Мы поддерживаем несколько проектов, которые общаются через XML.Интерфейсы определены в XML-схемах (.xsd файлы).Мы используем JAXB для генерации классов из тех схем, которые затем используются в проектах.Мы также используем файлы .xsd для проверки ввода или вывода.

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

Как можномы эффективно управляем этими схемами?Проекты должны иметь возможность выбирать, с какой версией (схемами) они хотят работать.Было бы неплохо, если бы в каждой сборке проекта не было необходимости интегрировать и поддерживать шаг генерации классов.Есть ли хорошие практики для этого?

В настоящее время я думаю о двух вариантах:

  1. Упакуйте сгенерированные классы как артефакт и разверните их в репозитории Maven изгде проекты могут их задействовать. Проектам не нужно иметь дело с генерацией классов, но доступ к самому файлу .xsd становится более сложным.

  2. Извлекайте схемы в проекты какGit субмодули.Это дает простой доступ к файлу схемы, но сборка каждого проекта связана с генерацией классов.

1 Ответ

0 голосов
/ 03 июня 2019

По сути, JAXB (и привязка данных XML в целом) - плохая идея, если схема не очень стабильна.Возможно, вы используете неправильную технологию.Работа с несколькими версиями схемы означает, что вы работаете с несколькими версиями скомпилированного Java-кода, и это всегда будет кошмаром для обслуживания.

Это может не быть полезным предложением, но мой совет: нене начинать отсюдаЕсли необходимо сосуществовать несколько версий схемы, вам нужна технология, в которой приложение не нужно перекомпилировать каждый раз, когда происходит изменение схемы;посмотрите либо на общий низкоуровневый API, такой как JDOM2 или XOM, либо на декларативный XML-ориентированный язык, такой как XSLT, XQuery или LINQ.

...