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é?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top