Comment cartographier les différents Java-Bean structures sur l'autre
Dans notre projet, nous avons à la carte un structures imbriquées de haricots sur une autre. (Ce sont en fait des JAXB mappé Java-Représentations des documents XML, dire, représenter un ordre entrant document.) Ce doit être mappée sur la manière très différente d'un document de structure d'un autre système.
Quelles sont les options pour le faire? Je préfère quelque chose qui remplit les conditions suivantes:
- Le mappage doit m'avertir lors de la cartographie d'un champ n'est pas défini
- La cartographie doit avoir des valeurs par défaut, comme la cartographie des champs de l'égalité de noms sur l'un de l'autre et de fournir des mappages pour, disons, int String et vice versa.
- La correspondance doit être bidirectionnelle.
- On devrait être en mesure d'utiliser la complétion de code lors de la définition de la cartographie.
Un cadre prometteur pour ce qui est Dozer, mais il ne remplit pas 1 et 4. Même avec JBeanMapper. Juste de la programmation en Java 4, mais pas les autres exigences; à l'aide de XSLT remplit peut-être 2, mais rien d'autre. Vous avez de meilleures idées?
Vous devez vous connecter pour publier un commentaire.
ModelMapper est une bibliothèque qui répond à tous vos critères. Il propose une cartographie de l'API qui utilise le code de propriétés de la carte - si vous obtenez la complétion de code. Et il propose de validation pour s'assurer que toutes les propriétés de la destination sont mappés. En outre, il offre certaines des choses que vous ne saviez même pas que tu voulais comme intelligent cartographie 🙂
Découvrez la ModelMapper page d'accueil pour plus d'info:
http://modelmapper.org
Une autre alternative est MapStruct qui génère du code de mappage au moment de la construction, résultant dans type-safe mappings qui ne nécessitent pas toutes les dépendances à l'exécution (Disclaimer: je suis l'auteur de MapStruct).
Lorsque nous avons eu ce problème, nous avons fini par faire les mappages de champs en Java dans une classe utilitaire. C'est une vraie galère, surtout quand vous avez à la carte à différents services web et écrire des mappages pour chacun d'entre eux (dont certains sont d'une simple carte en 2D des attributs nommés plutôt qu'une hiérarchie d'objets, cris).
Cependant de cette façon, vous avez le pouvoir d'analyser les besoins de la cible de la cartographie pour obtenir la meilleure qualité de cartographie, par défaut, où les données n'est pas défini, et ainsi de suite. Vous pouvez jeter un personnalisé "UndefinedMappingException" dans votre mapper où vous en avez besoin. Et en n'étant pas un moelleux à la bibliothèque qui utilise la réflexion et/ou un complexe de mappage XML fichiers de configuration, c'est une sacrée vue plus rapide.
I. e., c'est le post qui milite pour "l'écrire en Java".
J'ai résolu un problème similaire avec communes-beanutils.
Mon objectif final était un gros fichier Java qui serait de construire la structure des données et le mappeur a créé ce fichier pour moi. De cette façon, je pouvais créer des données de test à partir des instantanés alors que le programme était en cours d'exécution.
Le mappeur a permis de définir les clés pour trier les objets, le champ à utiliser pour générer les noms d'objet dans le fichier Java et j'ai utilisé une carte avec "classe:champ" comme clé. La valeur est un objet implémentant un simple "Cartographie" de l'interface (une méthode: toJava(instance de l'Objet, champ de Chaîne de valeur de l'Objet)).
Mon principal problème a été de compiler 2MB+ fichiers Java 🙂
Transmorph, EZMorph, Bulldozer, OTOM certains d'entre eux vous pourriez regarder pour la Fève de Haricot de la cartographie.
J'ai utilisé des Bulldozers dans le passé, et de sentir que c'est devenu assez stable au fil des ans.
Ont un coup d'oeil à GeDA qui utilise les octets de code pour créer la cartographie des classes au cours de l'exécution, ce qui le rend extrêmement rapide http://genericdtoassembler.org/ . Il serait couvert point de 1-3. Concernant le point 4, j'imagine que c'est un IDE chose donc je ne pense pas que vous trouverez une bibliothèque qui faciliterait qu'il a IDE plugins.
Il y est une solution intéressante qui pourrait vous aider si vous êtes à la cartographie des structures de données qui ont de nombreux légèrement différentes variantes. Par exemple, si vous êtes à la modélisation de l'entreprise afin de structures pour les différents cas, des affaires et des variantes de produits, et les différentes variantes nécessitent différentes combinaisons des mêmes attributs, comme les adresses, les identifiants de comptes, les informations de configuration pour les produits etc.
Ainsi, vous avez de nombreux structurellement similaire haricots qui contiennent différents sous-ensembles d'un certain nombre d'attributs. Si vous ne voulez pas écrire du code pour chaque variante, vous pouvez introduire une Java de l'interface qui a tous les attributs qui se produisent dans ces haricots, et l'utilisation java.lang.de réfléchir.Proxy de construire proxy cas pour le haricot que vous voulez à la carte, et qui renvoie la valeur null pour les getters le réel d'haricot n'a pas /lance une exception si un inexistante setter est appelé sur le haricot. Une manière de parler, de vous injecter une interface dans les fèves, qui a plus de méthodes que le bean lui-même.