使用JAXB在特定模式下基于XML创建XML文件

时间:2019-05-09 23:13:45

标签: java xml xsd jaxb xjc

我试图通过使用java(使用springboot)基于xml架构(XSD)创建xml文件,更正确地说是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;
    }

}

}

为了对此进行测试,我创建了一个rest控制器,该控制器接收像这样的发布请求所打印的信息:

{
"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);

0 个答案:

没有答案