---
title: 'JAXB2-Annotationen an Beispielen'
url: 'https://tutego.de/blog/javainsel/2007/12/jaxb2-annotationen-an-beispielen'
markdown: 'https://tutego.de/blog/javainsel/2007/12/jaxb2-annotationen-an-beispielen.md'
date: '2007-12-06'
description: '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…'
taxonomy:
  category:
    - Allgemein
---

# JAXB2-Annotationen an Beispielen

![Illustration einer tropischen Insel mit Palmen und einem hohen Berg](https://tutego.de/blog/javainsel/user/themes/tutego/images/insel-cover.jpg)# Java Blog für Programmierer

[Java Blog für Programmierer](https://tutego.de/blog/javainsel/)

## JAXB2-Annotationen an Beispielen

06.12.2007 · [Christian Ullenboom](https://tutego.de/blog/javainsel/author/admin/)

Schreiben der Felder statt Nutzen der Setter/Getter: Annotiere die Klasse mit

```java
@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.

```java
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.

```java
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.

```java
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`

```java
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

```java
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.

```java
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`

```java
 {

 return formatter.parse( date );

 }
```

**public** `String` `marshal( Date date )`

```java
 {

 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.

```text
 
```

```java
Person p = new Person();

GregorianCalendar c = new GregorianCalendar( 1973, Calendar.MARCH, 12 );

p.birthday = DatatypeFactory.newInstance().newXMLGregorianCalendar( c );;
```

```text
 
```

```text
 
```

```java
class Person

{

 XMLGregorianCalendar birthday;

}

<person>

 <birthday>1973-03-12T00:00:00.000+01:00</birthday>

</person>
```

```text
 
```

Die Abbildung enthält alle notwendigen Werte. Sollen Segmente, wie die Zeitzone herausgenommen werden, so markiert man sie aus:

```text
 
```

```java
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);
```

```java
p.birthday = gc;
```

```text
 
```

```java
class Person

{

 XMLGregorianCalendar birthday;

}

<person>

 <birthday>1973-03-12</birthday>

</person>
```

Elemente einbetten mit `@XmlElements`

```java
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 )
```

} )

```java
 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>
```

Kategorien: [Allgemein](https://tutego.de/blog/javainsel/category/allgemein/)

## 2 Kommentare

**Christian** · [02.08.2011 16:37](#comment-3641)

Danke für die Zusammenstellung. Hat einige meiner Kopfschmerzen gelindert :-)

**Anonymous** · [09.12.2009 08:56](#comment-29)

Danke. Sehr hilfsreich

Die bisherigen Kommentare wurden aus WordPress übernommen. Neue Kommentare sind derzeit geschlossen.

[← Alle Beiträge](https://tutego.de/blog/javainsel/)

---

## Navigation

- Previous: [JNotify: Was tut sich im Dateisystem?](https://tutego.de/blog/javainsel/2007/12/jnotify-was-tut-sich-im-dateisystem.md)
- Next: [Die übelste Java-Implementierung für einen Schaltjahrtest...](https://tutego.de/blog/javainsel/2007/12/die-ubelste-java-implementierung-fur-einen-schaltjahrtest.md)
