Excepciones Hibernate Validator
-
19-09-2019 - |
Pregunta
Estoy usando Hibernate Validator en una aplicación con EJB y Spring MVC. Estoy usando JBoss 5, Hibernate y Spring MVC 3 versión 3.
Me gustaría probar y excepciones de validación de captura en primavera Excepción nivel de resolución y generar un mensaje de error basado en el mensaje InvalidStateException
. No quiero poner la lógica de manejo de excepciones en la capa de acceso a datos; Quiero que este sea conducido por las anotaciones y se encarga solamente de los errores de validación en un solo lugar centralizado.
El modelo de dominio está siendo verificada correctamente y una excepción de tipo InvalidStateException
se lanza como se esperaba cuando intento para crear una entidad no válido (por ejemplo violar una restricción de longitud en un campo). En el punto de tratar de capturar la excepción en mi instancia de un dispositivo de resolución de excepciones primavera, encuentro mi excepción original ha desaparecido y una javax.ejb.EJBTransactionRolledbackException
ha tomado su lugar. La excepción original no está en la causada por lista.
Mi primera suposición fue que org.hibernate.validator.InvalidStateException
no fue anotado con ApplicationException
, por lo que instaló un detector de eventos Hibernate, llamó la excepción original y rethrew como una nueva excepción anotada con ApplicationException
. Esto no tiene efecto.
Una complejidad adicional es que la capa web está llamando a través de una interfaz EJB remoto. Me anotada mi clase de excepción con WebFault
, pero fue en vano.
¿Qué debo hacer para asegurar la excepción burbujas de todo el camino hasta?
Solución
Prueba esto?
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;
}