2010-02-26 3 views
1

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

Из-за этого я хотел бы изменить компиляцию 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, помимо простоты использования? Наивно, я искушаюсь использовать его, потому что это легко, но по дороге я вижу головные боли в обслуживании, если мы решим отказаться от XML-расклассификации JAXB.

ответ

0

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

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

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

+0

Спасибо за ответ. Я должен был быть более конкретным в вопросе о столкновении имен - это столкновение имен с объектом XML Schema и существующим объектом модели в приложении. Но да, это будет исправление пакета. –

Смежные вопросы