创建一个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

上一篇: Create an XSD to handle abstract types

下一篇: parse this xml file in java