Валидация 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. Я надеюсь, что вы найдете это полезным и легким для понимания.