Проверка Xml С Помощью Xsd, Jaxb И Spring Framework



Обзор Привет! В этой статье я хочу описать программу проверки XML с использованием Spring Framework. Самая очевидная область применения такой проверки — программирование веб-сервисов.

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

Проект компилируется в jar-файл и запускается из командной строки.

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

XmlПроцессор .

Итак, давайте начнем.



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

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

xml:

  
  
  
  
   

<Эxml version="1.0" encoding="UTF-8"?> < ns:Request xmlns:ns="http://www.tempuri.org/types "> <Version>V001.000.00</Version> <Address> <Apartment>50</Apartment> <House>7</House> <Street>Sadovaya</Street> <City>SPB</City> <Country>Russia</Country> <Index>123456</Index> </Address> </ ns:Request >

Клиент.xml:

<Эxml version="1.0" encoding="UTF-8"?> < ns:Request xmlns:ns="http://www.tempuri.org/types "> <Version>V001.000.00</Version> <Client> <Id>12</Id> <Name>A</Name> </Client> <Client> <Id>34</Id> <Name>B</Name> </Client> </ ns:Request >

Далее мы определим схемы XSD XmlValidator.xsd, ComplexTypes.xsd и SimpleTypes.xsd с помощью описание контейнера «CombinedType» и объектов типов «Адрес» и «Клиент»: XmlValidator.xsd:

<Эxml version="1.0" encoding="ISO-8859-1"?> < xsd:schema xmlns:ns="http://www.tempuri.org/types " xmlns:xsd="http://www.w3.org/2001/XMLSchema " xmlns:ict="complextypes " targetNamespace=" http://www.tempuri.org/types " elementFormDefault="qualified"> < xsd:import namespace="complextypes" schemaLocation="complextypes.xsd"/> < xsd:annotation > < xsd:documentation >XSD structure</ xsd:documentation > </ xsd:annotation > < xsd:element name="Combined" type=" ict:CombinedType "> < xsd:annotation > < xsd:documentation >XML definition</ xsd:documentation > </ xsd:annotation > </ xsd:element > </ xsd:schema >

ComplexTypes.xsd

<Эxml version="1.0" encoding="ISO-8859-1"?> < xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema " xmlns="complextypes" xmlns:ist="simpletypes " targetNamespace="complextypes"> < xsd:import namespace="simpletypes" schemaLocation="simpletypes.xsd"/> < xsd:complexType name="CombinedType"> < xsd:sequence > < xsd:element name="Version" type=" ist:VersionType "> < xsd:annotation > < xsd:documentation >The version</ xsd:documentation > </ xsd:annotation > </ xsd:element > < xsd:choice > < xsd:element name="Address" type="AddressType" maxOccurs="1"> < xsd:annotation > < xsd:documentation >Address type</ xsd:documentation > </ xsd:annotation > </ xsd:element > < xsd:element name="Client" type="ClientType" maxOccurs="unbounded"> < xsd:annotation > < xsd:documentation >Client type</ xsd:documentation > </ xsd:annotation > </ xsd:element > </ xsd:choice > </ xsd:sequence > </ xsd:complexType > < xsd:complexType name="AddressType"> < xsd:sequence > < xsd:element name="Apartment" type=" ist:ApartmentType "> < xsd:annotation > < xsd:documentation >Apartment number</ xsd:documentation > </ xsd:annotation > </ xsd:element > < xsd:element name="House" type=" ist:HouseNumberType "> < xsd:annotation > < xsd:documentation >House number</ xsd:documentation > </ xsd:annotation > </ xsd:element > < xsd:element name="Street" type=" ist:StreetType "> < xsd:annotation > < xsd:documentation >Street name</ xsd:documentation > </ xsd:annotation > </ xsd:element > < xsd:element name="City" type=" ist:CityType "> < xsd:annotation > < xsd:documentation >City name</ xsd:documentation > </ xsd:annotation > </ xsd:element > < xsd:element name="Country" type=" ist:CountryType "> < xsd:annotation > < xsd:documentation >Country name</ xsd:documentation > </ xsd:annotation > </ xsd:element > < xsd:element name="Index" type=" ist:IndexType " minOccurs="0"> < xsd:annotation > < xsd:documentation >Postal index</ xsd:documentation > </ xsd:annotation > </ xsd:element > </ xsd:sequence > </ xsd:complexType > < xsd:complexType name="ClientType"> < xsd:sequence > < xsd:element name="Id" type=" ist:IdType "> < xsd:annotation > < xsd:documentation >The id</ xsd:documentation > </ xsd:annotation > </ xsd:element > < xsd:element name="Name" type=" ist:NameType "> < xsd:annotation > < xsd:documentation >The name</ xsd:documentation > </ xsd:annotation > </ xsd:element > </ xsd:sequence > </ xsd:complexType > </ xsd:schema >

SimpleTypes.xsd

<Эxml version="1.0" encoding="ISO-8859-1"?> < xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema "

Теги: #java #xml #xsd #spring framework #jaxb
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.