2011-09-15 3 views
2

Une chose qui empêche d'utiliser une technologie de liaison comme JAXB, au lieu d'une technologie XML dom/sax classique est le fait que, lors de la lecture xml, il semble être fortement orienté pour instancier les classes ça gère.
JAXB et l'instanciation de classe

Plusieurs fois, je souhaite lire des valeurs de xml et les définir sur les propriétés d'instances déjà créées.
Existe-t-il un moyen simple de dire à JAXB qu'il doit appliquer des valeurs à la classe que j'ai au lieu d'en créer une nouvelle?

+1

Dans votre cas d'utilisation, quel est le lien entre le XML et les instances existantes (par exemple, une propriété ID)? –

+0

Le problème est que si les bibliothèques basées sur jaxb veulent créer des instances, elles ne seront pas appropriées là où les classes sont instanciées par un autre framework. Pensez à ressortir où le conteneur instancie les haricots. Ou bien swing, où je veux souvent sauvegarder certaines propriétés des composants gui, mais je veux aussi les créer moi-même (ou mon ide le veut). Mon idée était une approche "par classe", où je passe à jaxb la classe (ou une "usine" qui renvoie ma classe), un nœud xml et charge les attributs dans les propriétés de la classe. – AgostinoX

+0

J'essaie toujours de saisir le cas d'utilisation. Est-ce que vous avez des classes existantes que vous voulez mapper en XML, ou que vous avez des instances de classes existantes dans lesquelles vous voulez que JAXB se charge? –

Répondre

2

Utilisez les objets JAXB en tant que DTO. Ensuite, vous pouvez utiliser PropertyUtils.copyProperties(..)/BeanUtils.copyProperties(..) (à partir de commons-beanutils) pour transférer les propriétés à vos objets déjà partiellement remplis.

+0

D'accord, mais l'arbre DTO, d'un point de vue architectural, est comme construire un dom typé, n'est-ce pas? – AgostinoX

+0

Je n'ai pas compris le commentaire – Bozho

+0

Ok, je l'explique un peu plus. Lorsque vous utilisez une bibliothèque xml basée sur un type de dom (dom, jdom, dom4j, xom), vous construisez un arbre en mémoire qui représente le fichier xml. Ensuite, vous obtenez de l'arbre les valeurs que vous voulez. En utilisant DTO, vous construisez un arbre en mémoire qui, au lieu d'être fait d'objets "Node" (ou "Element" et "Attribute" ou quelque chose en fonction de la bibliothèque spécifique utilisée) est simplement fait de ClassA, ClassB, sont mes classes DTO. – AgostinoX