Я пытаюсь создать XML-файл на основе XML-схемы (XSD) с помощью Java (с Springboot), более правильно JAXB (я использовал xjc для автоматического создания классифицированного на основе XSD).
У меня есть этот XML-файл схемы:
<?xml version="1.0" encoding="utf-8" ?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="List">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="Item">
<xs:complexType>
<xs:attribute name="id_item" type="xs:string" use="required" />
<xs:attribute name="item_name" type="xs:string" use="required" />
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
Чтобы возобновить, у меня есть список предметов, на которых есть предметы.
Я использовал JAXB для генерации соответствующих классов, и вот что я получил:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = {
"item"
})
@XmlRootElement(name = "List")
public class List {
@XmlElement(name = "Item")
protected List<List.Item> item;
public List<List.Item> getItem() {
if (item == null) {
item = new ArrayList<List.Item>();
}
return this.item;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "")
public static class Institution {
@XmlAttribute(name = "id_institution", required = true)
protected String idItem;
@XmlAttribute(name = "institution_name", required = true)
protected String itemName;
public String getIdItem() {
return idItem;
}
public void setIdItem(String value) {
this.idItem = value;
}
public String getItemName() {
return itemName;
}
public void setItemName(String value) {
this.itemName = value;
}
}
}
Чтобы проверить это, я создал контроллер покоя, который получает информацию, которая должна быть напечатана с помощью такого запроса:
{
"item":[{
"itemName":"MANEL",
}]
}
Как видите, я создаю Список только с одним элементом, и этот элемент имеет только itemName.
Но, если вы видите xsd или мой класс, itemId необходим для элемента, но мой xml-файл все же создается.
Что я хочу сделать, так это то, что если в xsd есть определенные атрибуты или элементы, которые требуются, но отсутствуют при создании файла XML, отправьте сообщение об ошибке и сообщите, что создать файл XML невозможно. Я подумал, что это должно происходить автоматически, но я не думаю, что кто-то может мне помочь?
PS: для создания XML, я делаю это:
JAXBContext jaxbContext = JAXBContext.newInstance(List.class);
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(list2, System.out);