validator pom para org example dependency dependencia java hibernate maven hibernate-validator

pom - java hibernate maven dependency



Problema al iniciar Hibernate Validator debido a la API de ValidaciĆ³n de Bean (7)

Eliminando este jar javax.validation:validation-api:1.1.0.Final solucioné mi problema.

Asegúrate de tener un solo tarro de validación. Si tenemos dos frascos, pueden entrar en conflicto dando como resultado un error.

Estoy tratando de usar Hibernate Validator en mi proyecto, pero no está funcionando. En la siguiente línea:

SessionFactory sessions = config.buildSessionFactory(builder.build());

Me sale la siguiente excepción:

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)

Encontré esta pregunta que parece bastante similar a mi problema. Describe su solución como

Tenía otro tarro de validación de frijoles en la ruta de clases. Pero no de maven, así que no me di cuenta. Eliminando eso resolvió el problema.

Creo que mi problema es el mismo. En http://hibernate.org/validator/documentation/getting-started/ dice:

Esto arrastra de forma transitoria la dependencia de la API de validación de Bean (javax.validation: validation-api: 1.1.0.Final)

Eso debe estar causando este problema, ya que volver a una versión anterior (4.3.1.Final) soluciona el problema. ¿Hay alguna forma de obligar a Hibernate a no activar la API de validación de Bean?

Edición: he tratado de excluir la api de validación javax:

<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>

Pero no parecía tener ningún efecto.


Intenta agregar esta dependencia a tu pom.xml

<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.0.0.GA</version> </dependency>

Si no considera usar hibernate-validator4.2.0.Final, tengo ese en mi configuración y está funcionando bien.


Para mí, la versión 1.1.0.Final javax.validation.validation-api había funcionado. Porque, la interfaz javax.validation.spi.ConfigurationState de 1.1.0.Final tiene el método getParameterNameProvider, que estaba ausente en 1.0.0.GA.

Agregué la siguiente dependencia en pom.xml

<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.1.0.Final</version> <scope>test</scope> </dependency>


Pensé que sería útil explicar lo que está pasando aquí.

Hibernate está llamando a ConfigurationState.getParameterNameProvider :

ValidatorFactoryImpl.java :

public ValidatorFactoryImpl(ConfigurationState configurationState) { ... configurationState.getParameterNameProvider() ... }

Puede encontrar la documentación de getParameterNameProvider :

getParameterNameProvider

ConfigurationState.getParameterNameProvider getParameterNameProvider()

Devuelve el proveedor del nombre del parámetro para esta configuración.

Devoluciones:

instancia de proveedor de nombre de parámetro o nulo si no está definido

Ya que:

1.1

¿Entonces, cuál es el problema? El problema es que el método no siempre existió. Fue añadido en algún momento en el futuro.

Y la regla al crear interfaces es que se establecen de manera concreta: nunca se debe cambiar una interfaz. En su lugar, el validador de JavaX cambió la interfaz de ConfigurationState y agregó algunos métodos nuevos a lo largo de los años.

El código de validación de java está pasando el Hiberate a una interfaz ConfiguationState desactualizada; Uno que no implementa las interfaces requeridas.

Debe asegurarse de que javax.validation.Validation.buildDefaultValidatorFactory se actualice para admitir la versión 1.1.


Tuve el problema de nuevo. Así es como he arreglado eso:

1-Excluye spring.validator de la dependencia ''web'':

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.hibernate.validator</groupId> <artifactId>hibernate-validator</artifactId> </exclusion> </exclusions> </dependency>

2-Después de insertar la dependencia con una versión anterior:

<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> <version>5.1.3.Final</version> </dependency>


Vaya al proyecto dependecies y elimine, hibernate.validator, y vuelva a instalarlo en la versión más reciente. Me ha solucionado el problema.


en mi caso, acabo de eliminar el validador de hibernación y funcionó. (También tuve un combo de validación de api y validador de hibernación y probé todo) o puede ir a su repositorio de maven -> org y luego eliminar la carpeta de hibernación y reconstruye tu proyecto de nuevo .. espero que te ayude ..