Прошло около 5 часов с тех пор, как я решил использовать JSR 303 Bean Validation в своем проекте GWT, и я должен сказать, что даже не могу выразить (вежливо), насколько глубоко я недоволен плохой документацией на тема на сайте Google.
Я очень надеюсь, что вы, ребята, сможете мне помочь.
Я подписался на эту запись в блоге , чтобы добавить проверку бина на стороне клиента в свой проект. К сожалению, это сработало только один раз и выдало исключение во время выполнения, сказав, что мне нужно добавить источники проверки Hibernate в путь к классам. Я исправил это и решил немного перераспределить свои зависимости (самая большая ошибка в моей жизни), но я больше не мог заставить это работать.
Я не могу поиграть с примером Validation из GWT SDK, потому что он не компилируется, потому что он имеет две реализации класса ServerValidator
. Weird.
Итак, чтобы упростить мой вопрос, я создал фиктивное приложение GWT с помощью мастера проектов IntelliJ IDEA.
Я добавил следующие элементы в модуль xml:
<inherits name="org.hibernate.validator.HibernateValidator"/>
<replace-with class="com.mySampleApplication.client.ClientValidatorFactory">
<when-type-is class="javax.validation.ValidatorFactory"/>
</replace-with>
Создано ClientValidatorFactory
:
package com.mySampleApplication.client;
import com.google.gwt.core.client.GWT;
import com.google.gwt.validation.client.AbstractGwtValidatorFactory;
import com.google.gwt.validation.client.GwtValidation;
import com.google.gwt.validation.client.impl.AbstractGwtValidator;
import javax.validation.Validator;
import javax.validation.groups.Default;
public class ClientValidatorFactory extends AbstractGwtValidatorFactory
{
@GwtValidation(value = {Organization.class}, groups = {Default.class, ClientGroup.class})
public interface GwtValidator extends Validator
{
}
@Override
public AbstractGwtValidator createValidator()
{
return GWT.create(GwtValidator.class);
}
}
И в методе onModuleLoad()
я добавил эту единственную строку, которая приводит к взрыву компилятора
Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
И, наконец, я использовал следующие jar-файлы, которые скопировал из образца GWT SDK .
.
hibernate-validator-4.1.0.Final-sources.jar
hibernate-validator-4.1.0.Final.jar
log4j-1.2.16.jar
slf4j-api-1.6.1.jar
slf4j-log4j12-1.6.1.jar
validation-api-1.0.0.GA-sources.jar
validation-api-1.0.0.GA.jar
Но когда я компилирую свой проект, он выдает следующую бессмысленную ошибку:
В подробном журнале компилятора GWT я вижу это:
Loaded 2315 units from persistent store.
Found 2282 cached units. Used 2282 / 2282 units from cache.
Added 0 units to persistent cache.
Validating newly compiled units
Errors in 'jar:file:/C:/work/externals/gwt/gwt-user.jar!/org/hibernate/validator/engine/ConstraintViolationImpl_CustomFieldSerializer.java'
Line 33: No source code is available for type org.hibernate.validator.engine.ConstraintViolationImpl<T>; did you forget to inherit a required module?
Errors in 'jar:file:/C:/work/externals/gwt/gwt-user.jar!/org/hibernate/validator/engine/ValidationSupport.java'
Line 43: No source code is available for type org.hibernate.validator.engine.ConstraintViolationImpl<T>; did you forget to inherit a required module?
Errors in 'jar:file:/C:/work/externals/gwt/gwt-user.jar!/org/hibernate/validator/super/org/hibernate/validator/constraints/impl/EmailValidator.java'
Line 25: No source code is available for type org.hibernate.validator.constraints.Email; did you forget to inherit a required module?
Errors in 'jar:file:/C:/work/externals/gwt/gwt-user.jar!/org/hibernate/validator/super/org/hibernate/validator/constraints/impl/ScriptAssertValidator.java'
Line 26: No source code is available for type org.hibernate.validator.constraints.Email; did you forget to inherit a required module?
Errors in 'jar:file:/C:/work/externals/gwt/gwt-user.jar!/org/hibernate/validator/super/org/hibernate/validator/constraints/impl/URLValidator.java'
Line 26: No source code is available for type org.hibernate.validator.constraints.URL; did you forget to inherit a required module?
Errors in 'jar:file:/C:/work/externals/gwt/gwt-user.jar!/org/hibernate/validator/super/org/hibernate/validator/engine/PathImpl.java'
Line 72: No source code is available for type org.hibernate.validator.engine.NodeImpl; did you forget to inherit a required module?
Почему он не может найти классы? У меня hibernate-validator-4.1.0.Final-sources.jar
в моем классе.
Есть мысли?
Я загрузил свой проект здесь , если вы, ребята, хотите поиграть с ним.