web-dev-qa-db-fra.com

Quelle est la relation entre Jersey, JAXB, JAX-RS, Moxy, Jackson, EclipseLink Moxy, json et xml?

Je viens du milieu Node.js et j'ai une assez bonne compréhension des services Web RESTful.

J'essaie maintenant de créer des services Web RESTful à l'aide de Java. Je comprends le noyau Java mais complètement nouveau pour Java développement Web basé.

J'arrive à la conclusion après quelques tutoriels que j'ai besoin d'utiliser le framework Jersey pour construire mon API RESTful. Je comprends que Jersey est une sorte d'implémentation de référence de JAX-RS.

Mais je n'arrive pas à comprendre la relation entre divers autres termes et composants tels que JAXB, Jackson, EclipseLink Moxy, jersey-media-moxy, Jettison, JSON-P JSON, XML, etc. qui traversent mes lectures. La seule chose que j'ai pu conclure, c'est que ce n'est pas aussi simple que JavaScript de convertir des objets Java en XML ou équivalent JSON).

Ma question est quelle est la relation entre ces termes mentionnés ci-dessus et comment ils s'imbriquent si je développe une API RESTful basée sur Java.

17
Harshal Patil

Il y a certainement beaucoup de terminologie dans le monde Java et cela peut créer une courbe d'apprentissage significative pour les nouveaux développeurs. Ce n'est pas qu'il est particulièrement difficile de passer des documents JSON ou XML avec Java, c'est juste que les différents morceaux dont vous avez besoin pour le faire ont germé au fil des ans. J'ai essayé d'énumérer ma compréhension des termes que vous avez utilisés ci-dessous ...

XML - vous savez ce qu'est XML, non? Le langage de balisage extensible. C'est ce que nous avions avant que JSON ne devienne la grande chose.

JSON - eh bien, JSON est la nouvelle grande chose. C'est un format de sérialisation d'objets lisible par l'homme, moins verbeux que XML. Très populaire de nos jours. C'est la nouvelle balle magique, bonne pour tout ce qui te va, va résoudre tous tes problèmes ...

[~ # ~] jaxb [~ ​​# ~] - "Java Architecture for XML Binding" dans l'écosystème Java) est le principal mécanisme pour transformer des données XML en objets avec laquelle vous pouvez ensuite interagir, et vice versa. Il est important de réaliser que c'est une API et non une implémentation, donc elle définit principalement un ensemble d'annotations et de classes/interfaces simples dans le javax.xml.bind paquet. Pour faire quoi que ce soit d'utile avec JAXB, vous avez besoin d'une implémentation. Il existe une implémentation de référence incluse dans le serveur d'applications Glassfish. La plupart des serveurs d'applications auront une sorte d'implémentation de JAXB.

Jackson - une bibliothèque pour la liaison de données. Il prend en charge XML et JSON en tant que formats de document et implémente l'API JAXB. Vous pouvez utiliser Jackson comme implémentation de JAXB, ou vous pouvez simplement utiliser directement l'API Jackson.

EclipseLink Moxy - une implémentation alternative de l'API JAXB. Comme Jackson, il possède également sa propre API. Vous pouvez choisir de l'utiliser ou non. Vous ne voulez probablement pas utiliser à la fois Jackson et Moxy.

Jersey-media-moxy - comme vous l'avez mentionné, Jersey est une implémentation de JAX-RS. Un aspect de JAX-RS consiste à faire circuler des documents - souvent XML ou JSON. Pour ce faire, Jersey doit savoir quelle bibliothèque sous-jacente utiliser pour la liaison de données ou le traitement de flux. Donc jersey-media-moxy existe comme une sorte de dépendance de plugin jersey que vous pouvez utiliser pour configurer Jersey pour utiliser Moxy pour vos besoins de sérialisation d'objet. Il existe un package équivalent pour l'utilisation de jackson appelé jersey-media-json-jackson.

Jettison - Encore une autre bibliothèque de sérialisation pour convertir les objets Java en Json et inversement).

JSON-P - une API pour traiter JSON soit comme un flux d'événements ou via la liaison de données à un objet. Cette API est toujours en développement. Vous pourriez vous demander comment tout le monde fait du traitement json sans lui - la réponse est qu'ils utilisent soit des API de bibliothèque propriétaires (telles que Jackson ou Moxy) soit qu'ils utilisent une bibliothèque qui réutilise l'API JAXB pour fonctionner avec JSON (Jackson autorise définitivement cela , Je ne suis pas sûr de Moxy). JSON-P permettra de travailler plus facilement directement avec les fonctionnalités JSON, sans tous les concepts XML que JAXB apporte.

39
sisyphus