Вы можете сделать следующее:
Примечание
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
@XmlRootElement
@XmlType(propOrder={"to", "from", "header", "body", "assignee"})
public class Note {
private String to;
private String from;
private String header;
private String body;
private Assignee assignee;
@XmlElement(nillable=true)
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
@XmlElement(nillable=true)
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
@XmlElement(nillable=true)
public String getHeader() {
return header;
}
public void setHeader(String header) {
this.header = header;
}
@XmlElement(nillable=true)
public String getBody() {
return body;
}
public void setBody(String body) {
this.body = body;
}
public Assignee getAssignee() {
return assignee;
}
public void setAssignee(Assignee assignee) {
this.assignee = assignee;
}
}
Цессионарий
Нам понадобитсяозначает «нет», когда недопустимый экземпляр Assignee следует интерпретировать как нулевой.Я добавил метод isNull (), который возвращает true, если все поля являются нулевыми.
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlJavaTypeAdapter(AssigneeAdapter.class)
public class Assignee {
private String name;
private String surname;
@XmlElement(nillable=true)
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlElement(nillable=true)
public String getSurname() {
return surname;
}
public void setSurname(String surname) {
this.surname = surname;
}
public boolean isNull() {
return null == name && null == surname;
}
}
AssigneeAdapter
AssigneeAdapter использует оба объекта Assignee для значениятип и связанный тип.Этот класс использует метод isNull (), который мы добавили в Assignee:
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class AssigneeAdapter extends XmlAdapter<Assignee, Assignee> {
@Override
public Assignee unmarshal(Assignee v) throws Exception {
if(v.isNull()) {
return null;
}
return v;
}
@Override
public Assignee marshal(Assignee v) throws Exception {
if(null == v) {
return new Assignee();
}
return v;
}
}
Demo
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Note.class);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(new Note(), System.out);
}
}
Для получения дополнительной информации о XmlAdapter см .: