Je me pose beaucoup cette question depuis que j'ai eu a utiliser cette technologie pour "marshaller" et "unmarshaller" des objets sous differentes version xml.
JaxB a des avantages :
- lire et ecrire dans une vaste gamme de type d'entrée/sortie (Fichier, Flux, Noeud Dom ...etc...)
- Facilité d'utilisation.
Mais elle aussi de nombreux defauts :
- Utilisation d'annotations, ce qui oblige a alterer les classes d'origines (autrement dit impossible de l'utiliser sur une bibliotheque tierce)
- Reformatage des classes pour avoir soit des methodes get/set annotés ou des variables annotées
Et voici une liste de problemes auxquels je me suis confronté et n'ai pas pu trouver de reponses (meme en allant sur la mailing list officielle)
en version 1.0
@XmlElement(name="AnchorPoint", namespace="http://org.opengis/sld"
Resultat : <sld:AnchorPoint></sld:AnchorPoint>
en version 1.1
@XmlElement(name="AnchorPoint", namespace="http://org.opengis/se"
Resultat : <se:AnchorPoint></se:AnchorPoint>
<Width>456</Width>
Un @XmlValue
OU
<Width><Literal>456</Literal></Width>
Des @XmlElement
Pas de mapping differencier.
Inefficace avec les interfaces.
Voila donc mon resenti vis a vis de cette technologie.
JaxB n'est utilisable que pour des mapping 1 pour 1 (ou presque), avec des variables de type primitif ou peu evoluer et pour une version unique d'une norme xml. Autrement dit il est inutilisable dans le cadre de projet voué a évoluer (changement des versions et normes xml impossible) et il est invasif dans le code source (annotations, refonte des classes avec des constructeurs sans arguments et autres ...)
En temps normal je ne dirais rien d'une api avec beaucoup de défaut, mais le fait qu'elle soit incluse dans la JRE me choque enormement. Elle aurait du exister en tant que librairie tierce mais pas etre imposer.
Qu'en pensez vous ?