7
votes

Xstream ou simple

Je dois décider sur lequel utiliser. Mon cas est assez simple. J'ai besoin de convertir un simple pojo / haricot en XML, puis de retour. Rien de spécial.

Une chose que je recherche est qu'il devrait également inclure également les propriétés des parents. Le mieux serait si cela peut fonctionner sur Super Type, ce qui peut être juste une interface de marqueur.

Si quelqu'un peut comparer ces deux avec des inconvénients et des pros, et quelle chose manque dans laquelle une. Je sais que XStream prend également en charge JSON aussi, c'est un plus. Mais SIMPLE avait l'air plus simple d'un coup d'œil, si nous définissons Json de côté. Quel est l'avenir de Simple en termes de développement et de communauté? Xstream est assez populaire, je crois, même le mot, "xstream", a frappé de nombreux fils à ce sujet.

Merci.


0 commentaires

9 Réponses :


7
votes

Je vous recommanderais de jeter un coup d'œil à simple


1 commentaires

Édité ma question après votre réponse. Merci d'avoir introduit cette autre chose. Un de mes amis à JavarancMade me rend compte que les entre eux sont aussi âgés que deux ans, il n'a plus que le commissateur unique. Donc, c'est hors de question pour moi. Maintenant, vous voudrez peut-être mettre en évidence certaines zones de cadre simple, comme comment cela sera plus approprié pour moi. Merci beaucoup.



2
votes

Je suggérerais également SIMPLE , jetez un coup d'oeil à la Tutoriel , là et décidez-vous. La liste de diffusion est très réactive et vous obtiendrez toujours une réponse rapide à toutes les questions.


1 commentaires

Merci, ng à la deuxième suggestion.



1
votes

Jusqu'à présent, je n'ai jamais utilisé un cadre simple.

Basé sur mon expérience avec Xstream. Cela a bien fonctionné sur XML. Toutefois, pour JSON, le résultat n'est pas aussi précis que prévu lorsque je tente de sérialiser un haricot contenant une liste de hashtable.


1 commentaires

En ce moment, je n'ai pas besoin de faire Json Thingie. Au fait, j'ai essayé de simples et Xtream les deux. Les deux m'a donné le résultat souhaité. Mais je colle avec Xtream, à cause de sa popularité, je suppose. :) Merci quand même.



11
votes

Juste de la lecture de la documentation (je suis confronté au même problème que vous êtes, mais je n'ai pas encore essayé de quelque manière que ce soit; prenez cela avec un grain de sel):

xstream

  1. très, très facile à google. Des exemples, des postes de forum et des poteaux de blogs à ce sujet sont triviaux à trouver.
  2. travaille hors de la boîte. (Peut avoir besoin de plus de peaufiner, bien sûr, mais cela vous donnera quelque chose immédiatement.)
  3. Conversion d'une variable à un attribut nécessite de créer une classe de convertisseur séparée et de l'enregistrer avec Xtream. (Ce n'est pas difficile pour des valeurs simples, mais c'est un peu de travail supplémentaire.)
  4. ne gère pas le Versioning du tout, sauf si vous ajoutez dans XMT (une autre bibliothèque); Si le XML généré par votre classe change, cela ne désérialisera pas du tout. (Une fois que vous avez ajouté XMT, vous pouvez modifier vos classes, mais vous le souhaitez et que vous avez une poignée de Xstream, tant que vous créez une ligne croissante de fonctions de version incrémentielles.)
  5. Tous les ajustements nécessitent de rédiger un code, soit pour implémenter vos propres fonctions de sérialisation, soit appeler des fonctions Xtream pour modifier les techniques de sérialisation (DE) utilisées.
  6. Syntaxe triviale Remarque: Vous devez lancer la sortie du désérialiseur à votre classe.

    simple

    1. Page d'accueil est la seule source fiable d'informations; Il énumère environ une demi-douzaine d'articles externes, et il y a une liste de diffusion, mais vous ne pouvez pas le trouver dans l'Internet sauvage.
    2. nécessite d'annoter votre code avant que cela fonctionne.
    3. Il est facile de créer un fichier XML plus compact à l'aide d'attributs au lieu de nœuds XML pour chaque propriété.
    4. gère la version de la version en étant non stricte dans l'analyse chaque fois que la classe a raison, mais la version est différente. (c.-à-d. Si vous avez ajouté deux champs et supprimé un depuis la dernière version, cela ignorera le champ supprimé et ne jetez pas une exception, mais ne définit pas les champs ajoutés.) Comme Xtream, il ne semble pas avoir de façon de migrer les données d'une version à la suivante, mais contrairement à Xstream, aucune bibliothèque externe ne doit pas entrer et la gérer. Vraisemblablement, la manière de gérer cela est avec une fonction externe (et peut-être une variable "Version" de votre classe?), Donc vous faites

      Stuff myrestoredstuff = sériializer.Lead (Studio.class, fichier); myresdedstuff.sanityCheck ();

    5. Les ajustements sérialisés (DE) couramment utilisés sont fabriqués en ajoutant / édition d'annotations, mais il est possible de rédiger vos propres fonctions de sérialisation pour remplacer les méthodes standard si vous devez faire quelque chose de laineux.

    6. Syntaxe triviale Remarque: Vous devez transmettre la classe d'objet restaurée dans le désérialiseur (mais vous n'avez pas besoin de lancer le résultat).

3 commentaires

J'ai été distrait par quelque chose d'autre et j'ai laissé tomber le projet.


Que voulez-vous dire que Xtream ne gère pas les changements? Si je modifie les membres de la classe, disons-moi, je supprimai une propriété ou ajoute une propriété, Sûrement Xtream devrait être capable d'ignorer ceux-ci sinon dans le XML? Je viens d'essayer. On dirait que cela ne le gère pas parfaitement.


Je l'ai travaillé. Il y a une option ignoreunknonfelements (); pour la propriété de classe supprimée. Cependant, il n'est toujours pas capable de gérer des propriétés nouvellement ajoutées et ne la nule toujours malgré cela potentiellement définitive et définie dans la classe. Je peux vivre avec elle puisque aucun autre outil ne le fait non plus.



0
votes

examinait rapidement de simples en lisant Stackoverflow; En tant que modification de Paul Marshalls Post utile, j'ai pensé mentionner que Simple semble soutenir la version via des annotations -

http://simple.sourceforge.net/download /stream/doc/tatudial/taturial.php#version


0 commentaires

8
votes

Pourquoi ne pas utiliser Jaxb à la place?

  • Couverture de schéma 100%
  • Base d'utilisateur énorme
  • Multiples implémentations (au cas où vous toucheriez un bogue dans un)
  • inclus dans Java SE 6, compatible avec JDK 1.5
  • Couche de liaison pour JAX-WS (Services Web)
  • Couche de liaison pour JAX-RS (REST) ​​
  • compatible avec JSON (lorsqu'il est utilisé avec des bibliothèques telles que Jettison)

    ressources utiles:


3 commentaires

Consultez mon article de blog comparant Jaxb & Xstream: bdghan.blogspot.com/2010/10/...


Découvrez également mon article de blog comparant Jaxb & Simple: bdghan.blogspot.com/2010/10/...


JAXB est le meilleur mais les développeurs Android doivent garder à l'esprit que vous ne pouvez pas l'utiliser à cause de dépendances des colis manquants. Tout le monde devrait utiliser Jaxb.



0
votes

simple est beaucoup plus lent puis xstream (dans des objets de sérialisation à XML)

http://pronicles.blogspot.com/2011/03/ xstream-vs-simple.html


3 commentaires

Simple est environ 4 fois plus rapide que Xtream, le test dans le lien ci-dessus est comme quelque chose d'un enfant de 5 ans écrirait. Je ne pense pas que la personne qui a écrit cela comprend comment utiliser le cadre ou comment écrire un indice de référence fiable.


Si vous voulez faire quelque chose de bien - faites-le par vous-même =) Écrivez votre propre


Donc, vous savez que c'est l'auteur de Simple lui-même qui a commenté. Je soupçonne qu'il sache à quelle vitesse sa propre bibliothèque est comparée à Xstream.



1
votes

pensé que je partage cela ici. Pour obtenir Xstream d'ignorer les champs manquants (lorsque vous avez supprimé une propriété):

 XStream xstream = new XStream() {
  @Override
  protected MapperWrapper wrapMapper(MapperWrapper next) {
    return new MapperWrapper(next) {
      @Override
      public boolean shouldSerializeMember(Class definedIn,
              String fieldName) {
        if (definedIn == Object.class) {
          return false;
        }
        return super.shouldSerializeMember(definedIn, fieldName);
      }
    };
  }
};   


1 commentaires

Je ne sais pas si c'est nouveau, mais xtream.ignoreunknownelements () est une option au moins aujourd'hui.



1
votes

Un désavantage «simple» (jeu de mots »de Simple et JAXB est qu'ils ont besoin d'annoter vos objets avant de pouvoir être sérialisé à XML. Que se passe-t-il le jour où vous voulez rapidement sérialiser le code de quelqu'un d'autre avec des objets qui ne sont pas annotés? Si vous pouvez voir cela se produisant un jour, Xstream est un meilleur ajustement. (Parfois, il se résume vraiment à des exigences simples comme celle-ci pour conduire vos décisions).


0 commentaires