2010-01-11 8 views
9

Quelle est la différence entre la liaison XML de Castor et la liaison JAXB, puisque les deux lient l'objet java à XML et inversement.Quelle est la différence entre la liaison XML de Castor et la liaison JAXB

Mise à jour:

En utilisant Castor Je peux le faire Supposons packageA.ClassA et packageB.ClassA ont les mêmes attributs et le nom de la classe juste qu'ils se trouvaient dans un package différent.

packageA.ClassA - > XML -> packageB.ClassA 

En utilisant JAXB si je fais cet objet Marshall packageA.ClassA au format XML et de XML unmarshall en objet packageB.ClassA j'ai eu erreur de coulée.

Répondre

15

Veuillez noter que JAXB est une API et que plusieurs implémentations sont disponibles.

Sun fournit une implémentation de référence et l'empaquette avec J2EE (elle est également disponible dans J2SE 1.6). Castor est né avant que JAXB ne sorte de Sun et offre quelques fonctionnalités supplémentaires. Mais si tout ce que vous voulez est une simple liaison XML, alors l'implémentation de Sun de référence devrait fonctionner très bien.

Il existe un excellent article dans JavaWorld à ce sujet. Un peu vieux mais la plupart des idées expliquées restent toujours valables. Et vous ne trouverez pas l'article mentionnant les annotations JAXB, qui ont rendu les choses plus faciles de nos jours.

Simple est un cadre de reliure facile à utiliser, et fonctionne avec une configuration minimale simple.

DOM est un concept complètement différent - il s'agit de l'analyse syntaxique et ne fait rien sur la liaison. À l'aide d'un analyseur DOM, vous pouvez extraire des données à partir de XML. Mais cela ne vous donne pas de fonction de mappage d'objets. Vous devez donc toujours extraire les données à l'aide de DOM, puis écrire du code pour transférer ces données vers un objet Java.

+0

Salut merci pour l'explication très claire sur le concept DOM – user236501

+0

@newbie: Si vous aimez cette réponse, s'il vous plaît envisager de l'accepter ou au moins lui donner un upvote. Je vous remercie! –

3

Vous obtenez l'exception de transtypage de classe car une instance JAXBContext associée chaque nom d'élément XML racine à une classe de liaison. Par conséquent, lorsque vous marshal packageA.ClassA au format XML, puis démontez à nouveau, le résultat sera un packageA.ClassA, et vous ne pouvez pas convertir cela.

Si vous souhaitez annuler la configuration d'un packageB.ClassA, vous devez créer un second JAXBContext. Le premier JAXBContext connaît environ packageA.ClassA, le second connaît environ packageB.ClassA. Utilisez le premier pour marshalling à XML, le second pour unmarshalling. Cela fonctionnera comme prévu.