我在带有 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
,但无济于事。
我应该怎么做才能确保异常冒泡?