#validation #gwt
#проверка #gwt
Вопрос:
Я следовал образцу проверки gwt 2.4 и внедрил все это в свое собственное приложение. Клиентская сторона работает отлично.
private void verifyRegistrationData(final RegistrationTO registration) throws ConstraintViolationException {
final Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
final Set<ConstraintViolation<RegistrationTO>> violations = validator.validate(registration);
if (violations.size() > 0) {
final Set<ConstraintViolation<?>> temp = new HashSet<ConstraintViolation<?>>(violations);
throw new ConstraintViolationException(temp);
...
но если я сделаю то же самое на стороне сервера:
public void update(final RegistrationTO registration) throws IllegalArgumentException, ConstraintViolationException, TestException {
final Set<ConstraintViolation<RegistrationTO>> violations = validator.validate(registration);
if (!violations.isEmpty()) {
final Set<ConstraintViolation<?>> temp = new HashSet<ConstraintViolation<?>>(violations);
throw new ConstraintViolationException(temp);
}
...
все это приводит к сбою со следующим исключением:
javax.servlet.Журнал ServletContext: исключение при отправке входящего RPC-вызова
com.google.gwt.user.client.rpc.SerializationException: введите ‘org.hibernate.validator.engine.PathImpl’ не был включен в набор типов, которые могут быть сериализованы этой SerializationPolicy, или его объект класса не может быть загружен. В целях безопасности этот тип не будет сериализован.
Вот как выглядит PathImpl hibernate-validator-4.1.0.Final-sources.jar
public class PathImpl implements Path, Serializable {
private static final long serialVersionUID = 7564511574909882392L;
...
выглядит нормально (по крайней мере, для меня)
Я использую GWT 2.4, validation-api-1.0.0.GA , спящий режим-валидатор-4.1.0.Окончательный, gwt-сервлет-deps …
Заранее спасибо!
Комментарии:
1. Добро пожаловать в неопределенный мир GWT-RPC. Переключитесь на RequestFactory, когда еще есть время, это совет.
Ответ №1:
Существует ли явно определенный конструктор по умолчанию? т.е. public PathImpl() { }
? Это требуется механизмом сериализации GWT; если этого нет в исходном коде, сериализация ответа RPC завершится неудачей.
Комментарии:
1. Sh … — нет. Конструктор по умолчанию является закрытым. Проблема в том, что PathImpl исходит из hibernate-validation-4.1.0.Final.jar
2. Затем вам нужно создать свой собственный класс, который расширяет режим гибернации
PathImpl
. Это ваша проблема.
Ответ №2:
Пользовательский сериализатор существует для PathImpl
, просто, если на этот класс явно не указано в вашем service API, он не будет добавлен в политику сериализации.
Текущая работа заключается в добавлении фиктивного PathImpl
поля где-нибудь в вашем сервисном API. ValidationSupport
Класс существует для группировки этого и других подобных классов вместе, чтобы сделать это немного проще.
Ответ №3:
Я меняю все это на RequestFactory, как рекомендовал Томас Бройер. Это было далеко не так просто, как GWT-RPC. Это стало причиной для меня собрать всю информацию и создать пример программы.
Для тех, кто заинтересован — здесь вы можете найти образец с документацией и исходным кодом. (Также реализован однострочный клиентский регистратор) (Документация на немецком языке, но ведение журнала-выход aso. на английском языке …)