import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
public class Main {
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);
}
@XmlRootElement
@XmlType(propOrder = { "to", "from", "header", "body", "assignee" })
public static 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;
}
}
@XmlJavaTypeAdapter(AssigneeAdapter.class)
public static 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;
}
}
public static 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;
}
}
}