Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / org.springframework.validation Validator does not support:( ИЛИ что дает Class<?> type / 4 сообщений из 4, страница 1 из 1
31.08.2016, 13:22
    #39301055
RuslanGab
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
org.springframework.validation Validator does not support:( ИЛИ что дает Class<?> type
Здравствуйте!
Очень нужна помощь с проклятущим валидатором...
Имеется проект на спринге с валидаторами для отдельных entity. Реализован валидатор сущности, который проверяет "вложенные" сущности при сохранении/обновлении. Сущноcти выглядят так (привожу выдержки, чтобы все не захламлять):

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
@Entity
@Table(name="Anfrage", schema="dbo", catalog="ReqManager")
public class Anfrage implements java.io.Serializable {
    ...
    private Beleg beleg;
    ...
    @ManyToOne(fetch=FetchType.LAZY, cascade=CascadeType.ALL)
    @JoinColumn(name="BelegID", nullable=false)
    public Beleg getBeleg() {
        return this.beleg;
    }
    
    public void setBeleg(Beleg beleg) {
        this.beleg = beleg;
    } 



Код: java
1.
2.
3.
4.
@Entity
@Table(name="Beleg", schema="dbo", catalog="ReqManager"(
public class Beleg implements java.io.Serializable {
    ...



Валидаторы так:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
@Component
public class BelegValidator implements Validator {
    @Override
    public boolean supports(Class<?> type) {
        return type == Beleg.class;
    }

    @Override
    public void validate(Object o, Errors errors) 
    ....



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
@Component
public class AnfrageValidator implements Validator {
    ...
    @Autowired private BelegValidator belegValidator;
    ...
    @Override
    public boolean supports(Class<?> type) {
        return type == Anfrage.class;
    }

    @Override
    public void validate(Object o, Errors errors) {
        ....
        if (anfrage.getBeleg() != null) {
            //Это все для теста - все проходит хорошо
            if (belegValidator == null) {
                throw new IllegalArgumentException("The supplied belegValidator is required and must not be null.");
            }
            if (!belegValidator.supports(Beleg.class)) {
                throw new IllegalArgumentException("The supplied belegValidator must support the validation of [Address] instances.");
            }
            
            try {
                errors.pushNestedPath("beleg");
                //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
                ValidationUtils.invokeValidator(belegValidator, anfrage.getBeleg(), errors);
                //!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
            } finally {
                errors.popNestedPath();
            }
        }
    ....



При добавлении новой записи все отрабатывает на ура. При редактировании постоянно вылетает ошибка:
Exception in thread "JavaFX Application Thread" java.lang.IllegalArgumentException: Validator [class com.hit.RequirementsManager.Entity.Validators.BelegValidator] does not support [class com.hit.RequirementsManager.Entity. Beleg_$$_jvst267_5 ]
at org.springframework.validation.ValidationUtils.invokeValidator(ValidationUtils.java:77)
at org.springframework.validation.ValidationUtils.invokeValidator(ValidationUtils.java:55)
at com.hit.RequirementsManager.Entity.Validators.AnfrageValidator.validate(AnfrageValidator.java:150)
....
Что говорит о том, что валидатор ожидает класс "Beleg" а не некий "Beleg_$$_jvst267_5"... Тут возможно надо отметить, что есть еще две "вложенные сущности", и там ситуация такая же - только символы после $$ меняются... И опять же при сохранении нового объекта все отрабатывают отлично, и только при редактировании сие чудо-юдо.

Вопрос: откуда рождается сей " _$$_jvst267_5 " и как побороть это действо?

Заранее огромное спасибо - измучился уже:(
...
Рейтинг: 0 / 0
31.08.2016, 13:39
    #39301079
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
org.springframework.validation Validator does not support:( ИЛИ что дает Class<?> type
RuslanGabВопрос: откуда рождается сей " _$$_jvst267_5 " и как побороть это действо?

Это прокси, который ORM сгенерировала, чтобы перехватывать обращения к сущности.
Исправить можно, например, так:
Код: java
1.
2.
3.
4.
    
public boolean supports(Class<?> type) {
    return Beleg.class.isAssignableFrom(type);
}
...
Рейтинг: 0 / 0
31.08.2016, 13:45
    #39301090
RuslanGab
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
org.springframework.validation Validator does not support:( ИЛИ что дает Class<?> type
Все заработало после того как вместо

Код: java
1.
2.
3.
4.
    @Override
    public boolean supports(Class<?> type) {
        return type == Beleg.class;
    }



я добавил
Код: java
1.
2.
3.
4.
    @Override
    public boolean supports(Class<?> type) {
        return type == Beleg.class || type.getSuperclass().getSimpleName().equalsIgnoreCase("Beleg");
    }



вообще насколько я понимаю сие было бы логично, если бы сей класс (Beleg) являлся анонимным, что у меня не так... Не знаю. Не понимаю. Ну спасибо хоть работает - случайно вбив в вывод на консоль результат кучи геттеров увидел среди них желанное обычное имя, а логику так и не осознал:((
...
Рейтинг: 0 / 0
31.08.2016, 13:48
    #39301106
RuslanGab
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
org.springframework.validation Validator does not support:( ИЛИ что дает Class<?> type
Blazkowicz,

СПАСИБО ТЕБЕ В СОТЫЙ РАЗ, ДОБРЫЙ ЧЕЛОВЕК!

Твое решение логично, верно, которотко и прекрасно работающее. И наконец стало все ясно! Я бы про то что имею дело с прокси нескоро допер, если бы вообще допер...
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / org.springframework.validation Validator does not support:( ИЛИ что дает Class<?> type / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]