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?

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top