Использование javax.validation в GWT выдает ошибку времени выполнения ClassNotFoundException - PullRequest
4 голосов
/ 20 марта 2012

Я использую в GWT-приложении javax.validation. * Я добавил зависимости в мой pom:

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

Но во время выполнения я получаю ClassNotFoundException:

2012-03-20 09: 46: 12,253 WARN [pool-2-thread-1] o.s.c.t.c.AnnotationAttributesReadingVisitor [AnnotationAttributesReadingVisitor.java:91] Не удалось загрузить тип класса при чтении метаданных аннотации. Это нефатальная ошибка, но некоторые метаданные аннотации могут быть недоступны. java.lang.ClassNotFoundException: javax.validation.constraints.NotNull в org.apache.catalina.loader.WebappClassLoader.loadClass (WebappClassLoader.java:1701) ~ [catalina.jar: 7.0.26] в org.apache.catalina.loader.WebappClassLoader.loadClass (WebappClassLoader.java:1546) ~ [catalina.jar: 7.0.26] на

Есть идеи?

Ответы [ 2 ]

7 голосов
/ 21 марта 2012

На самом деле есть несколько вещей, которые необходимы для работы инфраструктуры валидации.

Вам необходим API проверки. Это кажется похоже на то, что у вас есть, но вы должны помнить, что GWT нужен источник включенных файлов.

Чтобы заставить это работать, вам нужно включить как jar API, так и исходные коды API.

<dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>1.0.0.GA</version>
        <type>jar</type>
        <classifier>sources</classifier>
</dependency>
<dependency>
        <groupId>javax.validation</groupId>
        <artifactId>validation-api</artifactId>
        <version>1.0.0.GA</version>
        <type>jar</type>
</dependency>

Без этого вы получите класс не найденных исключений для API проверки.

Вам также необходимо убедиться, что вы добавили проверочное включение в XML-модуль вашего GWT.

<inherits name="org.hibernate.validator.HibernateValidator" />
<replace-with
    class="com.google.gwt.sample.validation.client.SampleValidatorFactory">
    <when-type-is class="javax.validation.ValidatorFactory" />
</replace-with>

Кроме того, вам также необходимо включить какой-либо механизм проверки. Возможно, вам нужна hibernate-validation, если вы следуете руководству по валидации GWT.

Чтобы проверить аннотированный объект, вы должны использовать предоставленный API.

import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import javax.validation.ConstraintViolation;

/* ... snip ... */

//get validator factory using default bootstrap mechanism of the Validation library
ValidatorFactory factory = Validation.byDefaultProvider().configure().buildValidatorFactory();

//get a validator instance
Validator validator = factory.getValidator();

//create new object
Person person = new Person();
person.setFirstName("Andrew");

//validate person object
Set<ConstraintViolation<Person>> violations = validator.validate(person);

//should be one violation from lastName being null
assert violations.size() == 1;

Удачи.

1 голос
/ 20 марта 2012

вы должны добавить один jar с реализацией валидации, такой как hibernate-validation.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...