Inheritance JAXB编组-编组子模型时未获得预期的xml层次结构
我有一个名为Contact的基本抽象类和两个名为Phone和Address的子类,它们扩展了基类Contact 另一个名为客户的模型包含类型为联系人的属性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.
<?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输出