2010-09-03 16 views
7

J'ai joué avec Apache CXF, en particulier les différentes liaisons de données qu'il supporte: JAXB (par défaut), MTOM, Aegis et XMLBeans. Puisque tout cela est supporté, je suppose que chacun a ses mérites. Je suis venu avec ceux-ci:Dans CXF, pourquoi utiliser une autre liaison que JAXB? (Pièces jointes MTOM, Aegis, XMLBeans, ...)

  • De toute évidence, MTOM est à privilégier lorsque de grandes pièces jointes sont impliqués. JAXB dépend des annotations, il est donc moins adapté lorsque la modification des classes est restreinte.
  • Aegis n'a pas d'outil wsdl2java, donc il est moins adapté au développement "en avant-premier", c'est-à-dire commencer par un WSDL et générer votre code Java à partir de cela.
  • apparaît que Aegis fournit un peu plus de contrôle sur le mappage entre les classes Java et XML grâce à sa syntaxe déclarative dans classe fichiers .aegis.xml. D'autre part, je ne pouvais pas imaginer de scénarios où JAXB n'a pas fait l'affaire.

Je trouve cette question juxtaposant JAXB et XMLBeans, mais il ne donne pas un aperçu complet:

JAXB vs Apache XMLBeans

Outre ces naïfs, considérations a priori, vous avez du sang-et- Est-ce que les expériences qui pourraient soutenir l'utilisation de toute autre liaison en dehors de JAXB? Je demande du point de vue de CXF, mais si d'autres options viennent à l'esprit (par exemple Castor) s'il vous plaît ne pas hésiter à élaborer.

Répondre

3

Si je partais de zéro pour créer un premier service Web WSDL, je recommanderais définitivement de rester avec JAXB 95% du temps (peut-être même plus). C'est certainement la meilleure connexion de données testée en CXF et fonctionne assez bien.

Lorsque les autres DataBindings viennent sont généralement pour l'un des deux cas:

1) Java premier cas d'utilisation où vous avez quelque chose déjà écrit en Java que vous souhaitez exposer en tant que service Web avec peu ou pas de modifications au code. Aegis a ses atouts ici car il est conçu pour gérer un plus grand nombre de choses que JAXB. Cependant, si vous pouvez modifier le code, ajouter des annotations JAXB n'est généralement pas si difficile. Si vous avez des «haricots» pour la plupart normaux, ce n'est pas grave.

2) les applications existantes qui utilisent un mappage particulier. Si vous avez des applications existantes qui attendent des beans XMLBeans (ou des beans SDO si vous utilisez 2.3-SNAPSHOT de CXF, ou des beans JiBX si vous suivez le projet GSoC), utiliser les autres liens de données pourrait vous aider à supprimer les mappings nécessaires de JAXB. .

Espérons que cela aide un peu.

3

Rappelez-vous que JAXB is a specification donc il y a plusieurs implémentations: Metro (implémentation de référence, MOXy (je suis le chef de file de la technologie), etc.

JAXB peut être utilisé à partir de classes Java ou schéma XML Si vous avez des classes. qui ne peuvent pas être modifiés, les implémentations JAXB individuelles offrent des extensions pour gérer cela.Voir les métadonnées externalisable de Moxy:

JAXB a été conçu pour fonctionner avec des pièces jointes MTOM voir la pièce jointe placier/unmarshaller.

Moxy a XPath base mappings qui offre un contrôle total de votre objet à XML voir la liaison: