Hibernate验证例外
-
19-09-2019 - |
题
我与EJB和Spring MVC应用程序中使用Hibernate验证。我使用JBoss 5,休眠3和Spring MVC版本3。
我想在春季异常解析器水平try和catch验证异常和基于所述InvalidStateException
消息的错误消息。我不想把异常处理逻辑的数据访问层;我想这由注解来驱动,只是处理在一个集中的地方验证错误。
域模型被正确验证并且如预期,当我尝试创建无效实体(例如违反上一个字段的长度约束)类型InvalidStateException
的抛出异常。在试图捕获异常在我的一个春天异常解析器的实例,但我发现我原来的异常已经消失和javax.ejb.EJBTransactionRolledbackException
已取而代之。原始异常不在引起列表。
我的第一个猜测是,org.hibernate.validator.InvalidStateException
没有与ApplicationException
注解,所以我安装一个Hibernate事件侦听器,抓住了原来的异常和rethrew它作为ApplicationException
注释的新异常。这具有任何效果。
一个进一步的复杂性在于,Web层经由远程接口调用EJB。我注释我与WebFault
异常类,但无济于事。
我应该怎么做,以确保异常堆满一路攀升?
解决方案
试试这个?
protected InvalidStateException extractValidationException(Throwable ex) {
Throwable e = ex;
while (e != null) {
if (e instanceof InvalidStateException) {
return (ValidationException) e;
} else if (e instanceof EJBException) {
e = ((EJBException) e).getCausedByException();
} else {
e = e.getCause();
}
}
return null;
}