Exceções Hibernate Validator
-
19-09-2019 - |
Pergunta
Estou usando o Hibernate Validator em um aplicativo com EJB e Spring MVC. Eu estou usando JBoss 5, Hibernate 3 e Spring MVC versão 3.
Eu gostaria de tentar e exceções de validação pegar pelo Exceção Primavera nível Resolver e gerar uma mensagem de erro com base na mensagem InvalidStateException
. Eu não quero colocar lógica tratamento de exceção na camada de acesso a dados; Eu quero isso para ser conduzido por anotações e apenas lidar com os erros de validação em um local centralizado.
O modelo de domínio está sendo corretamente verificados e uma exceção do tipo InvalidStateException
é lançada como esperado quando eu tento criar uma entidade inválida (por exemplo violar uma restrição comprimento em um campo). No ponto de tentar capturar a exceção na minha instância de um resolvedor Exceção Spring, I encontrar meu exceção original desapareceu e uma javax.ejb.EJBTransactionRolledbackException
tomou o seu lugar. A exceção original não está no causada pela lista.
Meu primeiro palpite foi que org.hibernate.validator.InvalidStateException
não foi anotada com ApplicationException
, então eu instalei um ouvinte de evento Hibernate, chamou a exceção original e rethrew-lo como uma nova exceção anotado com ApplicationException
. Isto não tem efeito.
Uma maior complexidade é que a camada da web está chamando EJBs através de uma interface remota. I anotada minha classe de exceção com WebFault
, mas sem sucesso.
O que devo fazer para garantir a exceção bolhas todo o caminho até?
Solução
Tente isto?
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;
}