2009-08-13 5 views
6

JAXB fonctionne bien jusqu'à ce que je doive faire quelque chose comme les beans sérialisés pour lesquels je ne peux pas modifier la source. Si le bean n'a pas de constructeur par défaut ou s'il fait référence à des objets que je veux marquer transitoires, je suis coincé en train d'écrire un bean séparé que je peux annoter puis copier manuellement l'information de l'autre bean. Par exemple, je voulais sérialiser des objets d'exception, mais j'ai trouvé que le seul moyen d'y parvenir était d'utiliser un hack qui nécessitait l'utilisation de classes com.sun. *.JAXB est bon jusqu'à ce que j'ai besoin de faire quelque chose de complexe. Quelles sont les alternatives?

Alors, quelles sont les alternatives? Quelle est la prochaine API de sérialisation xml la plus populaire? Il serait agréable de pouvoir faire des choses comme:

  • Choisissez au moment de la sérialisation si vous souhaitez inclure certains champs dans le résultat. (marquage des choses transitoires lors de l'exécution du sérialiseur).

  • Gérez les boucles dans le graphe d'objets en utilisant des références ou autre chose que de simplement mourir.

  • Peut-être annoter un objet de telle sorte que dans la version 1 il sérialise les choses d'une certaine façon et dans la version 2 il les sérialise dans un autre. Puis, lors de la sérialisation, je choisis simplement la version de l'objet à sérialiser. Avoir un moyen de générer des XSD à partir d'annotations sur un objet.

Fondamentalement, je veux juste plus de flexibilité que ce que j'ai actuellement avec JAXB.

Répondre

2

La réponse standard pour vouloir une structure de sérialisation configurable est xstream.

0

XStream est une bibliothèque de sérialisation XML populaire qui prétend être capable de sérialiser à peu près n'importe quel constructeur, indépendamment des constructeurs ou d'autres problèmes (même désérialiser les champs finaux). Essaie.

Ne nécessite aucune modification des objets. Sérialise les champs internes, y compris privés et finaux. Prend en charge les classes non publiques et internes. Les classes ne sont pas obligées d'avoir un constructeur par défaut.

1

Regardez également JIBX. C'est un bon xml < -> mappeur d'objet. Mon expérience est que si vos objets ont une relation quelque peu géniale, il est souvent plus facile de créer un objet wrapper qui cache cette complexité et ensuite mapper cet objet avec JIBX.

2

JAXB est une spécification, vous pouvez donc choisir parmi différentes implémentations. EclipseLink JAXB (MOXy) a des extensions pour ce que vous demandez:

externalisée des métadonnées

utile pour traiter des classes pour lesquelles vous ne pouvez pas annoter la source ou d'appliquer plusieurs correspondances à un modèle d'objet.

XPath D'après la cartographie

Pour une véritable rencontre en-the-middle mapping OXM:

JPA Compatibilité

Y compris le soutien des relations bi-directionnelles.

Questions connexes