Опции для настройки привязок JAXB 2.1 - PullRequest
1 голос
/ 26 февраля 2010

Я работаю над созданием объектов Java из файла XSD с использованием JAXB 2.1. Файл XSD содержит несколько элементов, представляющих сущности бизнес-модели, с общими именами, такими как Account и т. Д. Система, использующая сгенерированные файлы для разархивирования XML, имеет несколько конфликтующих имен классов в своей доменной модели. Хотя мы можем использовать разные имена пакетов, чтобы обойти конфликты имен классов, я думаю, что будет более читабельным / поддерживаемым иметь объекты с разными именами.

Из-за этого я хотел бы изменить компиляцию XJC, чтобы она производила объекты вроде: DataTransferAccount.java и т. Д. Вместо Account.java. Супер, я буду использовать один из двух вариантов, которые JAXB предоставляет при привязке схемы (http://java.sun.com/webservices/docs/2.0/tutorial/doc/JAXBUsing4.html):

  1. Встроенные настройки - аннотируйте сам XSD, используя пространство имен jaxb для указания имен классов
  2. Файл внешних привязок - Предоставьте дополнительный файл в XJC, в котором есть правила о том, как сопоставить элементы схемы с классами Java

Есть ли хороший аргумент для использования варианта 1, кроме простоты использования? Наивно, я испытываю желание использовать его, потому что это легко, но в будущем я могу увидеть проблемы с обслуживанием, если мы решим отойти от JAXB XML unmarshalling.

1 Ответ

0 голосов
/ 28 февраля 2010

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

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

Что касается вашей первоначальной проблемы столкновения имен, XML-схеме также не разрешается повторно использовать одно и то же имя. Единственный способ получить конфликт имен в сгенерированной Java - это если вы компилируете схемы из нескольких пространств имен в один и тот же пакет Java. Если у вас есть несколько пространств имен, я настоятельно рекомендую вам поместить каждое пространство имен в отдельный пакет, это, как правило, делает вещи более понятными. Это также позволяет избежать столкновения имен.

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