创建一个XSD来处理抽象类型
关于jaxb抽象类型以及关联XML文档的使用,XML文档不能包含对抽象类型的引用 - 也就是说,XML必须使用具体类型。
示例(取自此处):
无效:<transport xmlns =“http://cars.example.com/schema”/>
有效:<transport xmlns =“http://cars.example.com/schema”xmlns:xsi =“http://www.w3.org/2001/XMLSchema-instance”xsi:type =“Car”/>
(其中运输是抽象的)
问:我如何指示Jaxb解除封装以便适当地包含/填充“xsi:type”值?
顺便说一句,我所有的jaxb类都在同一个包中,并且我的JaxbContext是针对这个包进行配置的。
您可以执行以下操作:
汽车
@XmlType
注释可用于指定类型名称。
import javax.xml.bind.annotation.XmlType;
@XmlType(name="Car")
public class Car {
}
演示
每当XML元素的Java类型为Object
您的JAXB实现将使用xsi:type
属性限定元素。 下面我们将利用这个JAXBElement
一个实例。
import javax.xml.bind.*;
import javax.xml.namespace.QName;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Car.class);
Car car = new Car();
JAXBElement<Object> jaxbElement = new JAXBElement(new QName("transport"), Object.class, car);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(jaxbElement, System.out);
}
}
产量
以下是运行演示代码的输出。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<transport xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Car"/>
链接地址: http://www.djcxy.com/p/51713.html