JAXB2-Annotationen an Beispielen

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>

Ähnliche Beiträge

2 Gedanken zu “JAXB2-Annotationen an Beispielen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.