Я использую Hibernate Validator в приложении с EJB и Spring MVC. Я использую JBoss 5, Hibernate 3 и Spring MVC версии 3.
Я хотел бы попытаться отловить исключения проверки на уровне Spring Exception Resolver и сгенерировать сообщение об ошибке на основе сообщения InvalidStateException
. Я не хочу помещать логику обработки исключений в слой доступа к данным; Я хочу, чтобы это управлялось аннотациями и просто обрабатывало ошибки валидации в одном централизованном месте.
Модель домена проверяется правильно, и исключение типа InvalidStateException
генерируется, как и ожидалось, когда я пытаюсь создать недопустимую сущность (например, нарушить ограничение длины для поля). Когда я попытался поймать исключение в моем экземпляре средства разрешения исключений Spring, я обнаружил, что мое первоначальное исключение исчезло, и его место заняла javax.ejb.EJBTransactionRolledbackException
. Исходное исключение отсутствует в списке, вызванном списком.
Моим первым предположением было то, что org.hibernate.validator.InvalidStateException
не было аннотировано ApplicationException
, поэтому я установил прослушиватель событий Hibernate, перехватил исходное исключение и перебросил его как новое исключение, аннотированное ApplicationException
. Это не имеет никакого эффекта.
Еще одна сложность заключается в том, что веб-уровень вызывает EJB через удаленный интерфейс. Я пометил свой класс исключений WebFault
, но безрезультатно.
Что я должен сделать, чтобы исключение всплыло полностью?