Использование JAXB для создания файла XML на основе определенной схемы - PullRequest
0 голосов
/ 10 мая 2019

Я пытаюсь создать 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);
...