0

J'utilise Hibernate Validator dans une application avec EJB et Spring MVC. J'utilise JBoss 5, Hibernate 3 et Spring MVC version 3.Hibernate Validator Exceptions

Je souhaite essayer d'intercepter les exceptions de validation au niveau du programme Spring Exception Resolver et générer un message d'erreur basé sur le message InvalidStateException. Je ne veux pas mettre de logique de gestion des exceptions dans la couche d'accès aux données; Je veux que ceci soit conduit par des annotations et manipule juste les erreurs de validation dans un endroit centralisé.

Le modèle de domaine est correctement vérifié et une exception de type InvalidStateException est levée comme prévu lorsque j'essaie de créer une entité non valide (par exemple, enfreindre une contrainte de longueur sur un champ). Au point d'essayer d'attraper l'exception dans mon instance d'un résolveur d'exception de ressort, je trouve que mon exception originale a disparu et un javax.ejb.EJBTransactionRolledbackException a pris sa place. L'exception d'origine n'est pas dans la liste provoquée par.

Ma première hypothèse était que org.hibernate.validator.InvalidStateException n'a pas été annotés avec ApplicationException, donc j'installé un écouteur d'événement Hibernate, a attiré l'exception d'origine et rethrew comme une nouvelle exception annotée avec ApplicationException. Cela n'a aucun effet.

Une autre complexité est que le niveau Web appelle des EJB via une interface distante. J'ai annoté ma classe d'exception avec WebFault, mais en vain.

Que dois-je faire pour que les bulles d'exception montent complètement?

Répondre

2

Essayez ceci?

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

+0

Merci - Je ne l'avais pas vu la méthode EDBException "getCausedByException". Je vais regarder ça demain et accepter si ça marche! –

+0

Oui, c'est un peu étrange de déclarer une nouvelle méthode avec la même idée derrière elle .. – Bozho

Questions connexes