2008-09-15 11 views

Répondre

8

La méthode la plus simple consiste à sérialiser le graphe d'objets. Java 1.4 a intégré la prise en charge de la sérialisation au format XML.

Une solution que je l'ai utilisé avec succès est XStream (http://x-stream.github.io/)- c'est une petite bibliothèque qui vous permettra facilement de sérialiser et désérialiser à et de XML

L'inconvénient est que vous ne pouvez très limitée définir le XML résultant;. Qui pourrait ne pas être neccessary dans votre cas

+0

Même maintenant, en 2013, XStream fonctionne toujours parfaitement. – Andrew

1

XStream est très simple http://x-stream.github.io/

XStream est une bibliothèque simple à sérialiser objets à XML et inversement.

4

XStream par les gens de Thoughtworks a une API simple et traite même des choses comme les références en double et circulaires. Il semble être activement développé et est bien documenté.

http://x-stream.github.io/

-1

Si vous êtes vraiment intéressé par seulement sérialisation vos objets dans un fichier, puis les désérialisation plus tard, alors vous pourriez vérifier YAML au lieu de XML. YAML est beaucoup plus facile à utiliser que XML et les fichiers de sortie sont très lisibles par l'homme (ce qui peut ou peut ne pas être une exigence). Consultez yaml.org pour plus d'informations. J'ai utilisé JYAML avec succès sur un projet récent.

1

Si vous avez besoin de contrôler la structure du XML, le XStream est un bon choix. Vous pouvez utiliser des annotations pour définir précisément la structure/mappage du XML et de vos objets.

3

Utilisez java.beans.XMLEncoder. Son API est très simple (en fait un peu trop simple, ce serait sympa de la connecter à un SAX ContentHandler), mais il fonctionne sur de nombreux graphes prêts à l'emploi, et il est facile de créer votre propre délégué de persistance cours de balle que vous pourriez rencontrer.

  • La syntaxe utilisée par XMLDecoder permet vous invoquez toute méthode, exemple ou statiques, y compris les constructeurs, il est donc extrêmement flexible.
  • D'autres encodeurs nomment éléments et attributs après la classe et les noms de champ, donc il n'y a pas de schéma fixe pour le résultat. Le XML de XMLEncoder suit une DTD simple et peut facilement être validé ou transformé , même si vous n'avez jamais vu les types qu'il utilise.
  • Vous pouvez affecter des objets à un identificateur et les référencer dans tout le graphique.
  • Vous pouvez vous référer aux constantes définies dans les classes ou les interfaces.

Et, il est construit en Java SE, donc vous n'avez pas besoin d'expédier une bibliothèque supplémentaire.

1

JAX-B fait partie des API standard et est très facile à utiliser.

1

Je serais deuxième (ou troisième) XStream. Il lit et écrit du XML sans nécessiter de configuration de liaison particulière ou en plaçant beaucoup de syntaxe étrangère dans le XML.

2

Si vous avez besoin de contrôler le XML qui est généré, je vous recommande de jeter un oeil à Betwixt (http://commons.apache.org/betwixt/) - il ajoute de nombreuses fonctionnalités au digesteur Apache (Digester est bon pour construire des graphes d'objets à partir de XML, mais pas bon pour les générer). Si vous ne vous souciez pas vraiment du XML qui est généré (juste qu'il peut être désérialisé dans le futur), alors les classes XMLEncoder/Decoder construites en Java ou bien - aussi longtemps que les objets que vous sérialiserez suivront la spécification JavaBean. Le plus gros problème que j'ai rencontré avec la solution XMLEncoder/Decoder est que si vous avez un bean qui retourne une liste immuable pour l'une de ses propriétés - l'encodeur ne gère pas très bien cette situation.

2

Bien que XStream et JAXB puissent sérialiser certains graphes d'objets, ils ne peuvent pas gérer des graphes très complexes. La solution la plus puissante pour les grands graphiques complexes est http://simple.sourceforge.net/, il peut gérer n'importe quel graphique. En outre, il est rapide et simple à utiliser sans aucune dépendance.