Générer hashCode() et equals() lors de la création de classes Java à l'aide de Mojo Jaxb2 plugin maven
Le code je suis sur l'aide de jaxb2-maven-plugin
de org.codehaus.mojo
pour générer des classes Java à partir d'un schéma XSD. Je suis à la recherche d'un moyen pour mettre en œuvre equals()
et hashCode()
méthodes de ces classes, mais il semble qu'il n'est pas un moyen. Je sais qu'il existe d'autres JAXB2 Maven plugins qui font que (http://confluence.highsource.org/display/J2B/Home par exemple), mais je me demandais si quelqu'un de vous rencontré ce problème avant, et s'il y a un moyen de le corriger. Je suis de générer les classes à l'aide de la xjc
objectif.
OriginalL'auteur manub | 2012-01-30
Vous devez vous connecter pour publier un commentaire.
JAXB2 Bases que tu mentionnes n'est pas une propriété de
maven-jaxb2-plugin
, c'est un ensemble autonome de JAXB 2.x plug-ins que vous pouvez utiliser avec XJC - oujaxb2-maven-plugin
ou quoi que ce soit.Ce que je voulais demander - pourquoi ne pas simplement utiliser
maven-jaxb2-plugin
? Il a donc beaucoup plus de fonctionnalités par rapport à la Codehaus plugin - y compris la configuration de JAXB2 plugins.Êtes-vous sûr que cela fonctionne? J'ai "Échec de l'exécution de l'objectif org.codehaus.mojo:jaxb2-maven-plugin:1.5:xjc (xjc) sur le projet XXX: paramètres non reconnus -Xequals" OU "impossible de trouver l'artefact" selon les versions que j'utilise. Comme pour les autres plugin tous les liens vers sont cassés.
Non, je ne suis pas sûr de ce XML spécifique, seulement que jaxb2-notions de base ne dépendent d'aucun spécifiques plugin Maven. Je ne l'utilise maven-jaxb2-plugin. Le plugin est hébergé dans le centre repo Maven donc c'est sûrement disponible: mvnrepository.com/artifact/org.jvnet.jaxb2.maven2/... je suis le redémarrage de la documentation du serveur.
Je vous remercie, très, très, très bien!!!
Assurez-vous d'envelopper chaque argument dans son propre élément:
<arguments><argument>-Xequals</argument><argument>-XhashCode</argument></arguments>
OriginalL'auteur lexicore
Je serais fortement en désaccord avec l'aide de JAXB classes générées en tant que business objects dans votre code. Les classes qui sont générées par JAXB sont les haricots qui sont destinés essentiellement à déplacer l'élément d'informations à partir du fichier xml, à la fève de champs. Personnellement, j'ai toujours mon SAVON service convertir ces généré classes de haricots pour mon entreprise réelle des objets, comme XML->Java et vice versa conversion n'est pas en noir et blanc tout le temps. Notez que ceci est mon opinion personnelle, et amour, pour certains, à peser sur ce qu'ils font dans cette situation.
Pour répondre à votre question, utilisez le plug, ou tout simplement votre utilisation de votre IDE de faire quelques equals et hashCode méthodes.
Espère que ça aide.
EDIT:
J'ai oublié de mettre mon raisonnement pour cela, toutes mes excuses. Nous disons dans la prochaine version de votre projet, vous voulez ajouter un peu plus le comportement de votre JAXB classes générées, mais aussi envie de faire quelques changements à votre schéma. Maintenant, vous êtes à la régénération de la JAXB classes générées, en mettant les comportements anciens, et de faire votre demande beaucoup plus sensibles aux bugs à mon avis. Le JAXB classes générées sont supposés refléter vos types de schémas XML (et donc vos messages SOAP) pas votre logique métier. L'espoir qui fait sens.
manub: Vous pouvez utiliser Apache Commons Lang EqualsBuilder.reflectionEquals de comparer votre JAXB classes générées sans ajout de hashCode et equals par le biais d'un plugin Maven.
Avec toutes les pénalités de réflexion.
OriginalL'auteur thatidiotguy
Vous pourriez aussi envisager d'utiliser un fluent interface builder (facilite la manipulation de l'généré JAXB classes) et une référence à un fichier de catalogue dans le cas où vous êtes le référencement d'un xmldsig-core-schéma (accélère le processus de génération, comme à distance des Schémas à partir du W3C sont interrogés - leurs serveurs habituellement retard de la réponse).
Ici est de savoir comment le fichier de catalogue ressemble:
Et voici le lien vers le xmldisg-core-schéma.xsd: http://www.w3.org/TR/xmldsig-core/xmldsig-core-schema.xsd
Veuillez noter que le lien n'est pas brisé le W3C serveur est simplement de retarder la réponse en quelques secondes. Pouvez m'très lourd, si cela se produit au cours de votre processus de génération automatique, qui comprend JAXB génération.
OriginalL'auteur Philipp
C'est la meilleure façon de le faire. Veuillez mettre à jour la version selon vos besoins.
OriginalL'auteur Atish Narlawar
Ma réponse est pour ceux qui ne peuvent pas se permettre une tierce partie à la dépendance de leur code généré.
La org.jvnet.jaxb2_commons:jaxb2-notions de base plugin ajoute un bon nombre de
org.jvnet
inclut dans le code généré et de votre projet dépendra deorg.jvnet.jaxb2_commons:jaxb2-basics-runtime
.La org.andromda.d'un tiers.jaxb2_commons:commons-lang-plugin plugin génère du code qui dépend de
commons-lang:commons-lang
. Cette dépendance pourrait être plus facile à porter en fonction de la situation.J'ai enfin trouvé ce code source, il pourrait être inclus dans com.soleil.xml.lier:jaxb-xjc à un certain point (la version 2.2.4 ?), mais jusqu'alors, je ne vois pas d'autre solution que d'écrire votre propre plugin.
PS: je ne peux pas accéder confluence.highsource.org, j'obtiens une erreur 404. Je suppose qu'il aurait pu être utile.
PPS: Dans ma situation, l'application que je suis bâtiment est destiné à un environnement qui dispose d'un ensemble très limité de permis de bibliothèques Java (incongru des restrictions de sécurité). J'ai été un peu déçu par le fait que
jaxb2_commons
inclut un tas deorg.jvnet
des dépendances dans le source généré, juste pour l'ajout d'un ennuyeuxequals
méthode. Je peux comprendre la stratégie de jvnet, leurs outils sont très puissants, j'ai peut-être juste essayer et à l'aide d'un marteau pour casser une noix. Néanmoins, je suis désolé de constater qu'il était si difficile de trouver un outil adapté à ma situation.-Xcommons-lang
.OriginalL'auteur boumbh
Il y a aussi un courant-builder plugin pour JAXB qui ne génère pas nécessairement des dépendances de code tiers. De Plus, c'est un vrai "Constructeur" modèle de conception, tandis que le "courant-api de plugin qui ajoute juste générateur de méthodes pour les classes générées.
Il est: https://github.com/mklemm/jaxb2-rich-contract-plugin
Il a également des options pour rendre les classes générées immuable et il peut générer des méthodes de copie de l'état des objets existants dans une nouvelle instance de générateur, supportant aussi "partielle" de l'objet à copier.
OriginalL'auteur Mirko Klemm