Schreiben der Felder statt Nutzen der Setter/Getter: Annotiere die Klasse mit
@XmlAccessorType( XmlAccessType.FIELD )
@XmlAttribute
class Person
{
String name;
@XmlAttribute
int id;
}
|
<person id=“123″>
<name>Christian</name>
</person>
|
@XmlValue
Gibt es nur ein Element kann @XmlValue dies in den Rumpf setzten.
class Person
{
int id;
}
|
<person>
<id>123</id>
</person>
|
class Person
{
@XmlValue int id;
}
|
<person>123</person>
|
@Transient
Nimmt Element aus der XML-Abbildung aus.
class Person
{
@XmlTransient int id;
String firstname;
String lastname;
}
|
<person>
<firstname>Christian</firstname>
<lastname>Ullenboom</lastname>
</person>
|
@XmlList
Schreibt Elemente einer Sammlung nicht in einzelnen Elementen, sondern mit Leerzeichen getrennt.
class Person
{
List<String> emails;
}
|
<person>
<emails>muh@kuh.de</emails>
<emails>zick@zack.com</emails>
</person>
|
class Person
{
@XmlList
List<String> emails;
}
|
<person>
<emails>muh@kuh.de zick@zack.com</emails>
</person>
|
Elemente einpacken mit @XmlElementWrapper
class Person
{
List<String> emails;
}
|
<person>
<emails>muh@kuh.de</emails>
<emails>zick@zack.com</emails>
</person>
|
class Person
{
@XmlElementWrapper(name = „emails“)
@XmlElement(name = „email“)
List<String> emails;
}
|
<person>
<emails>
<email>muh@kuh.de</email>
<email>zick@zack.com</email>
</emails>
</person>
|
Reihenfolge ändern
class Person
{
String lastname, firstname;
}
|
<person>
<lastname>Ullenboom</lastname>
<firstname>Christian</firstname>
</person>
|
@XmlType( propOrder = { „firstname“, „lastname“ } )
class Person
{
String lastname, firstname;
}
|
<person>
<firstname>Christian</firstname>
<lastname>Ullenboom</lastname>
</person>
|
@XmlJavaTypeAdapter
Anpassen der XML-Abbildung, etwa für Datumswerte.
class Person
{
Date birthday;
}
|
<person>
<birthday>1973-03-12T00:00:00+01:00</birthday>
</person>
|
class Person
{
@XmlJavaTypeAdapter( DateAdapter.class )
Date birthday;
}
class DateAdapter extends XmlAdapter<String, Date>
{
private final static DateFormat formatter = new SimpleDateFormat( „dd/MM/yyyy“ );
public Date unmarshal( String date ) throws ParseException
{
return formatter.parse( date );
}
public String marshal( Date date )
{
return formatter.format( date );
}
}
|
<person>
<birthday>12/03/1973</birthday>
</person>
|
Der spezielle Datentyp XMLGregorianCalendar
Neben der Möglichkeit, Datumswerte mit einen XmlJavaTypeAdapter zu übersetzen, bietet JAXB den Datentype XMLGregorianCalendar.
Person p = new Person();
GregorianCalendar c = new GregorianCalendar( 1973, Calendar.MARCH, 12 );
p.birthday = DatatypeFactory.newInstance().newXMLGregorianCalendar( c );;
class Person
{
XMLGregorianCalendar birthday;
}
|
<person>
<birthday>1973-03-12T00:00:00.000+01:00</birthday>
</person>
|
Die Abbildung enthält alle notwendigen Werte. Sollen Segmente, wie die Zeitzone herausgenommen werden, so markiert man sie aus:
Person p = new Person();
GregorianCalendar c = new GregorianCalendar( 1973, Calendar.MARCH, 12 );
XMLGregorianCalendar gc = DatatypeFactory.newInstance().newXMLGregorianCalendar( c );
gc.setTimezone(DatatypeConstants.FIELD_UNDEFINED);
gc.setTime(DatatypeConstants.FIELD_UNDEFINED, DatatypeConstants.FIELD_UNDEFINED, DatatypeConstants.FIELD_UNDEFINED);
p.birthday = gc;
class Person
{
XMLGregorianCalendar birthday;
}
|
<person>
<birthday>1973-03-12</birthday>
</person>
|
Elemente einbetten mit @XmlElements
Person p = new Person();
EmailContact c1 = new EmailContact();
c1.address = „hoho@weihnachtsmann.de“;
PhoneContact c2 = new PhoneContact();
c2.number = „0011-123456789“;
p.contacts = Arrays.asList( c1, c2 );
@XmlRootElement
@XmlAccessorType( XmlAccessType.FIELD )
class Person
{
@XmlElements(
{
@XmlElement( name = „email“, type = EmailContact.class ),
@XmlElement( name = „phone“, type = PhoneContact.class )
} )
List<Object> contacts = new ArrayList<Object>();
}
@XmlAccessorType( XmlAccessType.FIELD )
class EmailContact
{
@XmlValue
String address;
}
@XmlAccessorType( XmlAccessType.FIELD )
class PhoneContact
{
@XmlValue
String number;
}
|
<person>
<email>hoho@weihnachtsmann.de</email>
<phone>0011-123456789</phone>
</person>
|