Вопрос

Я использую Hibernate Validator в приложении с EJB и Spring MVC.Я использую JBoss 5, Hibernate 3 и Spring MVC версии 3.

Я хотел бы попытаться перехватить исключения проверки на уровне Spring Exception Resolver и сгенерировать сообщение об ошибке на основе InvalidStateException Сообщение.Я не хочу помещать логику обработки исключений на уровень доступа к данным;Я хочу, чтобы это управлялось аннотациями и просто обрабатывало ошибки проверки в одном централизованном месте.

Модель предметной области проверяется корректно, и возникает исключение типа InvalidStateException выдается, как и ожидалось, когда я пытаюсь создать недопустимый объект (напримернарушает ограничение длины поля).В момент попытки перехватить исключение в моем экземпляре Spring Exception resolver, я обнаруживаю, что мое исходное исключение исчезло, и javax.ejb.EJBTransactionRolledbackException занял свое место.Исходное исключение отсутствует в списке "вызвано".

Моим первым предположением было то, что org.hibernate.validator.InvalidStateException не было снабжено комментарием ApplicationException, поэтому я установил прослушиватель событий Hibernate, перехватил исходное исключение и перезаписал его как новое исключение, помеченное ApplicationException.Это не имеет никакого эффекта.

Еще одна сложность заключается в том, что веб-уровень вызывает EJBS через удаленный интерфейс.Я прокомментировал свой класс исключений следующим образом WebFault, но безрезультатно.

Что я должен сделать, чтобы убедиться, что исключение всплывает до конца?

Это было полезно?

Решение

Попробовать это?

защищенное исключение InvalidStateException extractValidationException(бросаемый ex) { Бросаемый e = ex;while (e != null) { if (e исключение экземпляра InvalidStateException) { возврат (исключение проверки) e;} else if (e instanceof EJBException) { e = ((EJBException) e).getCausedByException();} else { e = e.getCause();} } возвращает значение null;}

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top