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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top