pondělí 12. listopadu 2007

JAXB 2 a JAXBElement

JAXB (Java Architecture for XML Binding) je technologie, pomocí které se Java objekt převede do XML a naopak. Pokud máme už hotové XML Schema zamýšlených XML dokumentů, je vhodné si pomocí nástroje XJC vygenerovat odpovídající javovské třídy.
XJC ale někdy vygeneruje jako atributy třídy typu JAXBElement, do kterých je zabalen výsledný typ:
protected JAXBElement<String> pokus;
místo prostého
protected String pokus;
Odpověď je nutné hledat v XML schématu, které obsahuje definici
<xs:element name="pokus" minoccurs="0" nillable="true" type="xs:string" />
Pak totiž v příslušném XML mohou nastat tři situace:
  1. element pokus se v dokumentu (normálně) vyskytuje
  2. element pokus se v dokumentu nevyskytuje (minOccurs="0")
  3. element pokus se v dokumentu vyskytuje, ale má nastaveno xsi:nil="true" (nillable="true")
K tomu, aby JAXB rozlišil mezi druhými dvěma případy, které oba reprezentují prázdnou hodnotu, zabalí si atribut do pomocného objektu JAXBElement.
Řešení je snadné: reprezentovat prázdnou hodnotu jen jedním způsobem, ale dá se použít jen v případě, že schéma můžete upravovat...

Žádné komentáře:

Okomentovat