Какая платформа Java xml может обрабатывать генерацию кода с ограничениями / расширениями в схемах? - PullRequest
5 голосов
/ 19 ноября 2010

Существует набор файлов XSD, в которых описаны следующие типы:

A - сложный тип с различными элементами.B ограничивает A, сохраняя только некоторые из его элементов, C расширяет B, добавляя некоторые элементы.

Таким образом, это означает, что класс Java, созданный инструментом, использующим тип C из схемы XML, должен включать только те члены A, которые хранятся в B, и новые, добавленные C

Чтобы сделать вещи еще сложнее, B фактически изменяет атрибут minOccurs некоторых элементов.

Существуют ли какие-либо рамки, которые могут справиться с этим?Я пробовал EMF и ограничения даже не отражаются на коде.

Ответы [ 3 ]

4 голосов
/ 21 ноября 2010

Использование Castor CodeGenerator .Мило.Смотри http://www.castor.org/reference/html-single/index.html#xml.code.generator.examples.non-trivial

2 голосов
/ 26 ноября 2010

При использовании сложных XSD у меня были лучшие результаты с XMLBeans .

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

Еще одна действительно полезная функция:

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

2 голосов
/ 22 ноября 2010

Вот другая альтернатива (вы можете выбрать один): Axis2 DataBinding Framework (ADB) поддерживает иерархию типов и пользовательские ограничения.

Плюсы : генерирует полную структуру схемы и реализует методы получения и установки из каждого элемента. В установщиках каждого типа y проверяет ограничения, определенные схемой, и когда значение, которое нужно установить, не соответствует ограничению, оно выдает исключение (в самом собственном методе set) и поддерживает StAX для сериализации / десериализации.

Минусы : сгенерированный код может быть слишком многословным, исключения проверки - слишком мало объяснительных, он должен быть «простым» (поэтому со сложными расширениями или ограничениями типов вы можете столкнуться с некоторыми проблемами) и включает в себя некоторые зависимости с библиотекой ADB (то есть сгенерированные bean-компоненты реализуют интерфейс org.apache.axis2.databinding.ADBBean).

...