我试图通过使用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);