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> |
Danke. Sehr hilfsreich
Danke für die Zusammenstellung. Hat einige meiner Kopfschmerzen gelindert 🙂