1

我在带有 EJB 和 Spring MVC 的应用程序中使用 Hibernate Validator。我正在使用 JBoss 5、Hibernate 3 和 Spring MVC 版本 3。

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

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

我的第一个猜测是它org.hibernate.validator.InvalidStateException没有用 注释ApplicationException,所以我安装了一个 Hibernate 事件监听器,捕获了原始异常并将其重新抛出为一个用 注释的新异常ApplicationException。这没有效果。

另一个复杂性是 Web 层通过远程接口调用 EJB。我用 注释了我的异常类WebFault,但无济于事。

我应该怎么做才能确保异常冒泡?

4

1 回答 1

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

于 2009-11-12T19:25:24.497 回答