Hibernate Validator Exceptions

时间:2009-11-12 18:35:01

标签: java hibernate exception-handling ejb hibernate-validator

我在使用EJB和Spring MVC的应用程序中使用Hibernate Validator。我正在使用JBoss 5,Hibernate 3和Spring MVC第3版。

我想在Spring Exception Resolver级别尝试捕获验证异常,并根据InvalidStateException消息生成错误消息。我不想在数据访问层中放置异常处理逻辑;我希望它由注释驱动,只需在一个集中的位置处理验证错误。

正在验证域模型,并且当我尝试创建无效实体时(例如违反字段上的长度约束),会按预期抛出类型InvalidStateException的异常。在尝试在我的Spring Exception解析器实例中捕获异常时,我发现原来的异常已经消失,javax.ejb.EJBTransactionRolledbackException取代了它。原始异常不在列表中。

我的第一个猜测是org.hibernate.validator.InvalidStateException未使用ApplicationException进行注释,因此我安装了一个Hibernate事件侦听器,捕获了原始异常并将其重新提交为使用ApplicationException注释的新异常。这没有效果。

另一个复杂性是Web层通过Remote接口调用EJB。我用WebFault注释了我的异常类,但没有用。

我应该怎么做以确保异常气泡一直上升?

1 个答案:

答案 0 :(得分:2)

试试这个?

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; }