Java tutorial
import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; 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.XmlRootElement; import javax.xml.bind.annotation.XmlType; import javax.xml.bind.annotation.XmlValue; public class Person1Test { public static void main(String[] args) throws JAXBException { Person person = new Person(); person.setFirstName("L"); person.setLastName("H"); JAXBContext context = JAXBContext.newInstance(Person.class); Marshaller marshaller = context.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.marshal(person, System.out); } } @XmlRootElement() @XmlType(name = "") // @XmlAccessorType(XmlAccessType.FIELD) class Person { // @XmlAttribute() private String firstName; private PersonName friend; private String lastName; public String getFirstName() { return firstName; } @XmlElement(nillable = true) // @XmlElement(required=true) public PersonName getFriend() { return friend; } // @XmlValue() // @XmlTransient public String getLastName() { return lastName; } public void setFirstName(String s) { firstName = s; } public void setFriend(PersonName friend) { this.friend = friend; } // r @XmlTransient public void setLastName(String s) { lastName = s; } } @XmlRootElement @XmlAccessorType(XmlAccessType.NONE) class PersonName { @XmlValue private String value; public String getValue() { return value; } public void setValue(String value) { this.value = value; } public static void main(String[] args) throws JAXBException { PersonName pn = new PersonName(); pn.value = "foo"; JAXBContext context = JAXBContext.newInstance(PersonName.class); context.createMarshaller().marshal(pn, System.out); } }