Как создать xsd схему из xml java
Перейти к содержимому

Как создать xsd схему из xml java

Валидация XML с помощью XSD, JAXB и Spring Framework

Здравствуйте! В этой статье я хочу описать программу валидации XML с помощью Spring Framework. Наиболее очевидная область применения такой валидации — это программирование web-сервисов.

Валидация производится через преобразование XML-Java (unmarshalling) по соответствующей XSD-схеме. XML-файл считается прошедшим проверку, если преобразование XML в объект Java прошло успешно.

Проект компилируется в jar файл и запускается в командной строке. Для красоты прикручен Apache ANSI Printer, в котором можно задавать шрифт, цвет и выделение текста в cmd.

Исходный код доступен в GitHub по ссылке XmlProcessor.

1. Исходные файлы и схемы

В качестве входных данных определим 2 XML файла Address.xml и Client.xml.

Далее определим XSD-схемы XmlValidator.xsd, ComplexTypes.xsd и SimpleTypes.xsd с
описанием контейнера CombinedType и объектов типа Address и Client:

Обратите внимание на элемент <xsd:choice> в CombinedType схемы ComplexTypes.xsd. Он означает, что xml-файл должен содержать либо один элемент типа Address, либо один или несколько элементов типа Client.

2. Конфигурация Spring

В файле spring-config.xml находится описание используемых в проекте бинов Printer,
FileReader, Marshaller, XMLService. Помимо указанных бинов, определен фильтр расширений
FileNameExtensionFilter, чтобы рассматривать только xml-файлы.

3. Преобразование XML-Java

В точке входа приложения XmlProcessorDrv сначала считываем и проверяем аргументы
командной строки, затем через вызов методов класса Compositor создаем бины printer,
fileReader и xmlService. Далее считываем xml-файлы и выполняем валидацию файлов в
директории, указанной в CLI_OPTION_DIRECTORY.

Самое интересное происходит при вызове

Код метода validate представлен ниже.

Ключевое преобразование XML-Java или unmarshalling происходит в строке

Как уже упоминалось, если удалось из XML получить java-объект типа CombinedType, то
XML признается корректным.

Unmarshaller-у должен быть заранее известен конечный объект преобразования. Для
этого с помощью JAXB создадим файлы AddressType.java, ClientType.java, CombinedType.java
В IDE Eclipse: правый клик по XSD -> Generate -> JAXB Classes…

4. Демонстрация работы программы

В проект включен файл Readme с описанием доступных опций и аргументов командной
строки:

Как сгенерировать XSD из класса Java

В последних нескольких постах мы узнали о Java JAXB и о том, как создать класс java из XSD . Сегодня мы узнаем, как генерировать XSD из классов java.

Сгенерируйте XSD из класса Java

Мы будем использовать Плагин Maven JAXB-2 в проекте maven для генерации XSD из классов java.

  • Плагин JAXB2 Maven использует утилиту JAXB SchemaGenerator для генерации XSD из классов java.
  • Классы Java должны иметь аннотации JAXB, которые будут использоваться этим плагином.
  • Минимальная требуемая версия java-Java 5

Сначала создайте новый проект maven, вы можете указать любое имя, идентификатор группы и идентификатор, который вы хотите. Как только мы построим наш проект, он создаст классы XSD в каталоге target/generated-resources/schemagen .

После сборки структура нашего проекта будет выглядеть так, как показано на рисунке ниже.

Вот и финал pom.xml файл, который у нас есть:

Несколько вещей, на которые следует обратить внимание, – это jaxb зависимость, схема цель выполнения и схема преобразования конфигурация. Конфигурация transformSchema используется для указания сгенерированного имени файла XSD и префикса пространства имен, которые будут использоваться в XSD

Вот классы java, которые у нас есть, которые будут использоваться для создания XSD.

Вот классы java, которые у нас есть, которые будут использоваться для создания XSD.

Обратите внимание на аннотацию XMLType с пространством имен, используемым для класса, и атрибут Xml для идентификатора поля. Этот класс создаст схему employee.xsd , как только мы построим проект.

Как вы можете видеть, у него есть адрес поля, который является другим пользовательским классом, поэтому нам также нужно аннотировать этот класс для успешной генерации схемы.

Вот класс адресов с аннотациями jaxb.

Вот класс адресов с аннотациями jaxb.

Этот класс будет генерировать address.xsd, потому что его имя совпадает в transformSchema в pom.xml файл.

Наша настройка проекта готова, просто создайте проект с помощью команды mvn clean install , и XSD-файлы будут сгенерированы. Для моего проекта сгенерированные XSD-файлы выглядят следующим образом.

Наша настройка проекта готова, просто создайте проект с помощью команды || mvn clean install||, и XSD-файлы будут сгенерированы. Для моего проекта сгенерированные XSD-файлы выглядят следующим образом.

Наша настройка проекта готова, просто создайте проект с помощью команды || mvn clean install||, и XSD-файлы будут сгенерированы. Для моего проекта сгенерированные XSD-файлы выглядят следующим образом.

Это все для генерации XSD из класса java. Это очень простой и отличный способ для java-класса для генерации XSD. Я надеюсь, что вы найдете это полезным и легким для понимания.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *