Problème lors du démarrage de Hibernate Validator en raison de l'API Bean Validation
Je suis en train d'utiliser Hibernate Validator dans mon projet, mais il ne fonctionne pas. Sur la ligne suivante:
SessionFactory sessions = config.buildSessionFactory(builder.build());
- Je obtenir de l'exception suivante:
org.hibernate.cfg.beanvalidation.IntegrationException: Error activating Bean Validation integration
at org.hibernate.cfg.beanvalidation.BeanValidationIntegrator.integrate(BeanValidationIntegrator.java:154)
at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:311)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1857)
at net.myProject.server.util.HibernateUtil.<clinit>(HibernateUtil.java:32)
... 36 more
Caused by: java.lang.NoSuchMethodError: javax.validation.spi.ConfigurationState.getParameterNameProvider()Ljavax/validation/ParameterNameProvider;
at org.hibernate.validator.internal.engine.ValidatorFactoryImpl.<init>(ValidatorFactoryImpl.java:119)
at org.hibernate.validator.HibernateValidator.buildValidatorFactory(HibernateValidator.java:45)
at org.hibernate.validator.internal.engine.ConfigurationImpl.buildValidatorFactory(ConfigurationImpl.java:217)
at javax.validation.Validation.buildDefaultValidatorFactory(Validation.java:111)
J'ai trouvé cette question qui semble assez similaire à mon problème. Il décrit sa solution
J'ai eu encore un autre bean validateur jar dans le chemin de classe. Mais pas de
maven, donc je ne le savais pas. Retrait qui a résolu le problème.
Je pense que mon problème est le même. Sur http://hibernate.org/validator/documentation/getting-started/ il dit:
Ce transitivement tire dans la dépendance à la Fève de Validation API
(javax.validation:la validation de l'api:1.1.0.Final)
Qui doit être à l'origine de ce problème, car l'idée de revenir à une version plus ancienne (4.3.1.Final) résout le problème. Est-il un moyen de forcer l'Hibernation pour ne pas tirer dans le Bean Validation API?
Edit: j'ai tenté d'exclure les javax-api de validation:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.0.3.Final</version>
<exclusions>
<exclusion>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</exclusion>
</exclusions>
</dependency>
Mais il ne semble pas avoir d'effet.
source d'informationauteur Click Upvote
Vous devez vous connecter pour publier un commentaire.
Essayez d'ajouter cette dépendance à votre pom.xml
Si ne pas envisager d'utiliser hibernate-validator4.2.0.Final j'ai qu'un dans ma config et il fonctionne très bien.
Pour moi, la version 1.1.0.Version finale javax.la validation.la validation de l'api avait travaillé. Parce que, le javax.la validation.le spi.ConfigurationState interface de la version 1.1.0.Finale a getParameterNameProvider méthode, qui était absent dans la version 1.0.0.GA.
J'ai ajouté ci-dessous la dépendance à la pom.xml
dans mon cas, je viens de supprimer la mise en veille prolongée-programme de validation et cela a fonctionné .(j'ai aussi eu un combo de deux api de validation et de mise en veille prolongée-programme de validation et de tout essayé) ou vous pouvez aller à votre repository maven-->org et puis supprimer les hibernate dossier et de la reconstruction de votre projet..
espérons que cela aide..
J'ai pensé qu'il serait utile d'expliquer ce qui se passe ici.
Hibernate appelle ConfigurationState.getParameterNameProvider:
ValidatorFactoryImpl.java:
Vous pouvez trouver la documentation de
getParameterNameProvider
:Quel est donc le problème? Le problème est que la méthode n'était pas toujours d'exister. Il a été ajouté à un certain moment dans l'avenir.
Et de l'état lors de la création d'interfaces, c'est qu'ils sont définis dans le béton: vous ne pouvez pas changer une interface jamais. Au lieu de la JavaX validateur changé le ConfigurationState interface et ajouté quelques nouvelles méthodes au fil des ans.
La java le code de validation est le passage du Hiberate obsolète ConfiguationState de l'interface; l'un qui n'implémente pas l'interface requise.
Vous devez vous assurer que javax.la validation.La Validation.buildDefaultValidatorFactory est mis à jour pour supporter la version 1.1.
La suppression de ce pot
javax.validation:validation-api:1.1.0.Final
résolu mon problème.Assurez-vous d'avoir une seule validation jar. Si nous avons deux pots puis ils peuvent entrer en conflit ce qui entraîne une erreur.