Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Inheritance JAXB编组-编组子模型时未获得预期的xml层次结构_Inheritance_Jaxb_Marshalling - Fatal编程技术网

Inheritance JAXB编组-编组子模型时未获得预期的xml层次结构

Inheritance JAXB编组-编组子模型时未获得预期的xml层次结构,inheritance,jaxb,marshalling,Inheritance,Jaxb,Marshalling,我有一个名为Contact的基本抽象类和两个名为Phone和Address的子类,它们扩展了基类Contact 另一个名为客户的模型包含类型为联系人的属性 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <phone> <number>12345</number> </phone> Contact.java package test; import javax.

我有一个名为Contact的基本抽象类和两个名为PhoneAddress的子类,它们扩展了基类Contact

另一个名为客户的模型包含类型为联系人的属性

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<phone>
    <number>12345</number>
</phone>
Contact.java

package test;

import javax.xml.bind.annotation.XmlSeeAlso;

@XmlSeeAlso({Address.class, Phone.class})
public abstract class Contact {

}
package test;

import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Phone extends Contact {

private String number;

public String getNumber() {
    return number;
}

public void setNumber(String number) {
    this.number = number;
}
}
package test;

public class Address extends Contact{

private String name;
private String city;

public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getCity() {
    return city;
}
public void setCity(String city) {
    this.city = city;
}   
}
package test;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {

@XmlElement(name="contact")
private Contact contact1;

    public Contact getContact1() {
        return contact1;
    }

    public void setContact1(Contact contact) {
        this.contact1 = contact;
    }

@XmlElement(name="contact")
private Contact contact;

    public Contact getContact() {
        return contact;
    }

    public void setContact(Contact contact) {
        this.contact = contact;
    }

}
Phone.java

package test;

import javax.xml.bind.annotation.XmlSeeAlso;

@XmlSeeAlso({Address.class, Phone.class})
public abstract class Contact {

}
package test;

import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Phone extends Contact {

private String number;

public String getNumber() {
    return number;
}

public void setNumber(String number) {
    this.number = number;
}
}
package test;

public class Address extends Contact{

private String name;
private String city;

public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getCity() {
    return city;
}
public void setCity(String city) {
    this.city = city;
}   
}
package test;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {

@XmlElement(name="contact")
private Contact contact1;

    public Contact getContact1() {
        return contact1;
    }

    public void setContact1(Contact contact) {
        this.contact1 = contact;
    }

@XmlElement(name="contact")
private Contact contact;

    public Contact getContact() {
        return contact;
    }

    public void setContact(Contact contact) {
        this.contact = contact;
    }

}
Address.java

package test;

import javax.xml.bind.annotation.XmlSeeAlso;

@XmlSeeAlso({Address.class, Phone.class})
public abstract class Contact {

}
package test;

import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Phone extends Contact {

private String number;

public String getNumber() {
    return number;
}

public void setNumber(String number) {
    this.number = number;
}
}
package test;

public class Address extends Contact{

private String name;
private String city;

public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getCity() {
    return city;
}
public void setCity(String city) {
    this.city = city;
}   
}
package test;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {

@XmlElement(name="contact")
private Contact contact1;

    public Contact getContact1() {
        return contact1;
    }

    public void setContact1(Contact contact) {
        this.contact1 = contact;
    }

@XmlElement(name="contact")
private Contact contact;

    public Contact getContact() {
        return contact;
    }

    public void setContact(Contact contact) {
        this.contact = contact;
    }

}
Customer.java

package test;

import javax.xml.bind.annotation.XmlSeeAlso;

@XmlSeeAlso({Address.class, Phone.class})
public abstract class Contact {

}
package test;

import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Phone extends Contact {

private String number;

public String getNumber() {
    return number;
}

public void setNumber(String number) {
    this.number = number;
}
}
package test;

public class Address extends Contact{

private String name;
private String city;

public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getCity() {
    return city;
}
public void setCity(String city) {
    this.city = city;
}   
}
package test;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Customer {

@XmlElement(name="contact")
private Contact contact1;

    public Contact getContact1() {
        return contact1;
    }

    public void setContact1(Contact contact) {
        this.contact1 = contact;
    }

@XmlElement(name="contact")
private Contact contact;

    public Contact getContact() {
        return contact;
    }

    public void setContact(Contact contact) {
        this.contact = contact;
    }

}
场景是,当我尝试封送客户模型时,我得到了预期的xml层次结构,如下所示

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer>
    <contact xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="phone">
        <number>12345</number>
    </contact>
    <contact xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="address">
        <city>New York</city>
    </contact>
</customer>
请让我了解如何获得预期的xml输出