Обрабатывать отношения внешнего ключа в отдельных xml файлах с помощью JAXB - PullRequest
0 голосов
/ 01 марта 2020

У меня есть куча свободных xml файлов, которые содержат сущности, которые логически взаимосвязаны, но не имеют четко определенных данных отношений, например:

  • сотрудников. xml (содержит список элементов сотрудника, которые содержат элементы id, name и managerId)
  • менеджеров. xml (содержит список элементов менеджера, которые содержат элементы id и name)

(На самом деле есть около 130 xml таких файлов, а затем кучу, которую я нахожу с помощью сканирования каталогов)

Я хотел бы создать классы Employee и Manager для меня, а затем разобрать данные по этим файлам и пусть Employee::getManager() возвращает экземпляр Manager, а в идеале Manager::getEmployees() возвращает Collection<Employee>.

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

Я пытался сделать это до с EclipseLink и отказался, мой предыдущий подход зависел от создания файла " universe. xml", который использовал XInclude для связи друг с другом все файлы xml и , определяющие метаданные отношения с тегами xml-join-node и xsl annotations / jaxb properties . После загрузки файла "юниверс. xml" отношения были правильно заполнены. Я предпочел бы предоставлять список файлов динамически.

В основном у меня есть две проблемы, которые я не смог решить:

  1. Загрузка отдельных файлов и автоматическое заполнение их отношений - как мне сказать unmarshaller для загрузки дополнительных данных и связывания их с тем, что было загружено ранее?
  2. Эффективное описание отношений с минимальной модификацией схемы - я бы предпочел автоматически генерировать файлы xsd на основе моего входного набора, текущий подход требует аннотирования вручную схема.

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

Есть также несколько особых случаев, когда тип данных, которые нужно объединить, зависит от другого поля, например. Manager :: type, который может быть перечислением {Regional, Global} и указывает, что дополнительные данные должны быть загружены из RegionalManager. xml или globalManagers. xml, на основе поля Manager :: typeDataIndex. Эти ситуации достаточно редки, я мог бы справиться с ними сам, если бы не было общего решения, которое могло бы справиться с этим элегантно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...