webentwicklung-frage-antwort-db.com.de

Probleme beim Starten des Hibernate-Validators aufgrund der Bean-Validierungs-API

Ich versuche, Hibernate Validator in meinem Projekt zu verwenden, aber es funktioniert nicht. In der folgenden Zeile:

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

Ich bekomme die folgende Ausnahme:

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)

Ich habe diese Frage gefunden, die meinem Problem sehr ähnlich erscheint. Er beschreibt seine Lösung als 

Ich hatte noch ein anderes Bean-Validator-Glas im Klassenpfad. Aber nicht aus Maven, also wusste ich es nicht. Durch das Entfernen wurde das Problem gelöst.

Ich denke, mein Problem ist dasselbe. Auf http://hibernate.org/validator/documentation/getting-started/ heißt es: 

Dadurch wird die Abhängigkeit von der Bean-Validierungs-API .__ eingezogen. (javax.validation: validation-api: 1.1.0.Final)

Dies muss zu diesem Problem führen, da das Problem durch das Wiederherstellen einer älteren Version (4.3.1.Final) behoben wird. Gibt es eine Möglichkeit, den Ruhezustand zu erzwingen, die Bean-Validierungs-API nicht zu ziehen?

Edit: Ich habe versucht, die javax-Validierungs-API auszuschließen:

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

Aber es schien keine Wirkung zu haben.

16
Click Upvote

Versuchen Sie, diese Abhängigkeit zu Ihrer pom.xml hinzuzufügen

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

Wenn nicht erwägen, Hibernate-validator4.2.0.Final zu verwenden, habe ich dieses in meiner Konfig und es funktioniert gut.

15
Koitoer

Für mich hatte die 1.1.0.Final-Version javax.validation.validation-api funktioniert. Die javax.validation.spi.ConfigurationState-Schnittstelle von 1.1.0.Final verfügt über die getParameterNameProvider-Methode, die in 1.0.0.GA nicht vorhanden war.

Ich habe die folgende Abhängigkeit in pom.xml hinzugefügt 

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

in meinem Fall habe ich gerade den Hibernate-Validator gelöscht und er hat funktioniert. (Ich hatte auch eine Kombination aus Validierungs-API und Hibernate-Validator und habe alles versucht) oder Sie können zu Ihrem Repository -> Org gehen und dann den Hibernate-Ordner löschen und baue dein Projekt erneut auf ... __hoffentlich hilft es ..

2

Ich dachte, es wäre nützlich zu erklären, was hier vor sich geht. 

Hibernate ruft ConfigurationState.getParameterNameProvider auf:

ValidatorFactoryImpl.Java:

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

Die Dokumentation zu getParameterNameProvider finden Sie hier:

getParameterNameProvider

ParameterNameProvidergetParameterNameProvider()

Gibt den Parameternamenanbieter für diese Konfiguration zurück.

Kehrt zurück:

anbietername oder Name des Parameternamens, falls nicht definiert

Schon seit:

1.1

Also, was ist das Problem? Das Problem ist, dass es die Methode nicht immer gab. Es wurde irgendwann in der Zukunft hinzugefügt.

Beim Erstellen von Schnittstellen gilt die Regel, dass sie konkret festgelegt sind: Sie dürfen ein Interface nicht ändern immer. Stattdessen änderte der JavaX-Validator die ConfigurationState - Schnittstelle und fügte im Laufe der Jahre einige neue Methoden hinzu. 

Der Java-Validierungscode übergibt der Hiberate eine veraltete ConfiguationState - Schnittstelle. eine, die die erforderlichen Schnittstellen nicht implementiert.

Sie müssen sicherstellen, dass javax.validation.Validation.buildDefaultValidatorFactory auf die Unterstützung von Version 1.1 aktualisiert wird.

1
Ian Boyd

Ich hatte das Problem wieder. So habe ich das behoben:

1-Schließen Sie spring.validator aus der 'Web'-Abhängigkeit aus:

<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-After fügt die Dependecy mit einer früheren Version ein:

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

Gehen Sie zum Dependencies-Projekt und löschen Sie hibernate.validator. Es hat das Problem für mich gelöst.

0
Paulo

Das Entfernen dieses Gefäßes javax.validation:validation-api:1.1.0.Final hat mein Problem gelöst.

Stellen Sie sicher, dass Sie nur ein Validierungsglas haben. Wenn wir zwei Gläser haben, kann es zu Konflikten kommen, die zu Fehlern führen. 

0
Shweta Tiwari