jaxb的实际应用

一、XmlElements的应用:(可用于子类和父类之间)

package my.test.xml.aaaxml;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElements;
import javax.xml.bind.annotation.XmlRootElement;

public class Test {

    public static void main(String[] args) throws Exception {
        
        Address1 address1 = new Address1();
        address1.setCity1("beijing");
        Address2 address2 = new Address2();
        address2.setCity2("beijing");
        Dog dog = new Dog();
        dog.setName("godName");
        dog.setAddress(address2);
        JAXBContext context = JAXBContext.newInstance(Dog.class);
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        marshaller.marshal(dog, System.out);
    }

}

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
class Dog {
    
    private String name;
    
    @XmlElements({ @XmlElement(name = "address1", type = Address1.class),
            @XmlElement(name = "address2", type = Address2.class), })
    private Object address;
    
    public Object getAddress() {
        return address;
    }

    public void setAddress(Object address) {
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

@XmlAccessorType(XmlAccessType.FIELD)
class Address1 {
    
    private String city1;

    public String getCity1() {
        return city1;
    }

    public void setCity1(String city1) {
        this.city1 = city1;
    }

}

@XmlAccessorType(XmlAccessType.FIELD)
class Address2 {
    
    private String city2;

    public String getCity2() {
        return city2;
    }

    public void setCity2(String city2) {
        this.city2 = city2;
    }

}

运行结果:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<dog>
    <name>godName</name>
    <address2>
        <city2>beijing</city2>
    </address2>
</dog>

 二、XmlElementRef、XmlSeeAlso、XmlRootElement的配合使用:

package my.test.xml.aaaxml;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElementRef;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlSeeAlso;

public class Test {

    public static void main(String[] args) throws Exception {

        Address1 address1 = new Address1();
        address1.setCity1("beijing");
        Address2 address2 = new Address2();
        address2.setCity2("beijing");
        Dog dog = new Dog();
        dog.setName("godName");
        dog.setAddress(address1);
        JAXBContext context = JAXBContext.newInstance(Dog.class);
        Marshaller marshaller = context.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        marshaller.marshal(dog, System.out);
    }

}

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
class Dog {

    private String name;

    @XmlElementRef
    private AbstractAddr address;

    public AbstractAddr getAddress() {
        return address;
    }

    public void setAddress(AbstractAddr address) {
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

@XmlSeeAlso({ Address1.class, Address2.class })
class AbstractAddr {

}

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
class Address1 extends AbstractAddr {

    private String city1;

    public String getCity1() {
        return city1;
    }

    public void setCity1(String city1) {
        this.city1 = city1;
    }

}

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
class Address2 extends AbstractAddr {

    private String city2;

    public String getCity2() {
        return city2;
    }

    public void setCity2(String city2) {
        this.city2 = city2;
    }

}          

 运行结果:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<dog>
    <name>godName</name>
    <address1>
        <city1>beijing</city1>
    </address1>
</dog>

猜你喜欢

转载自www.cnblogs.com/erdanyang/p/10397438.html