2016-10-18 4 views
1

Мой проект работал нормально, пока я не добавил «hibernate-validator» в POM для использования функции @Valid в запросе REST для объектов @RequestBody.BeanCreationException entityManagerFactory NoClassDefFoundError ValidatorFactory

У меня есть NoClassDefFoundError

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in ServletContext resource [/WEB-INF/spring/app-context.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: javax/validation/ValidatorFactory 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
Caused by: java.lang.NoClassDefFoundError: javax/validation/ValidatorFactory 
    at java.lang.Class.getDeclaredMethods0(Native Method) 
    at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) 
    at java.lang.Class.privateGetMethodRecursive(Class.java:3048) 
    at java.lang.Class.getMethod0(Class.java:3018) 
    ... 21 more 
Caused by: java.lang.ClassNotFoundException: javax.validation.ValidatorFactory 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) 
    ... 35 more 

Мой ПОМ является

enter image description here

Последняя строка та, которая создает проблемы, я попытался с несколькими версиями без успеха

+0

Не могли бы вы ссылаться http://stackoverflow.com/questions/26637800/classnotfoundexception-javax-validation-validatorfactory – Unknown

+0

У меня нет явной ссылки на validation-api, очистка tomcat и перезагрузка IDE не сработала ни – BlackBishop

+0

вам просто нужна проверка -api jar –

ответ

0

Перейдите в репозиторий .m2 и удалите папку в org/hibernate/path. Теперь очистите проект и снова создайте проект. Это может работать нормально.

1

добавить

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

даже оперативно принять, чтобы добавить validation-api вручную, произойдет другая ошибка , потому что Hibernate Validator 5x несовместим с validation-api 1.0.x –

+0

У меня такая же ошибка – BlackBishop

0

Ни один из вышеперечисленных ответов не решить мою проблему, поэтому я решил развить мой собственный валидатор

Новый аннотаций интерфейс

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.FIELD) //can use in fields only. 
public @interface Required { 

} 

И базовый класс для расширения всех объектов, которые необходимо проверить (при весеннем REST @RequestBody)

public void validate(){ 
    Field[] fields = this.getClass().getDeclaredFields(); 
    for (Field field : fields) { 
     if (field.isAnnotationPresent(Required.class)) { 
      Object value; 
      field.setAccessible(true); 
      try { 
       boolean fail = false; 
       value = field.get(this); 
       if (value==null){ 
        fail = true; 
       } 
       if (value instanceof String && ((String) value).isEmpty()){ 
        fail = true; 
       } 
       if (value instanceof List && ((List<?>) value).isEmpty()){ 
        fail = true; 
       } 
       if (fail){ 
        throw new PreconditionFailedException("attribute '" + field.getName() + "' cannot be empty"); 
       } 
      } 
      catch (IllegalArgumentException e) { 
       e.printStackTrace(); 
      } 
      catch (IllegalAccessException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
}