Sospensione Validatore Eccezioni
-
19-09-2019 - |
Domanda
Sto usando Hibernate Validator in un'applicazione con EJB e Spring MVC.Sto usando JBoss 5, Hibernate 3 e Spring MVC versione 3.
Mi piacerebbe provare a prendere eccezioni di convalida Primavera Eccezione Resolver livello e generare un messaggio di errore basato sul InvalidStateException
messaggio.Non voglio mettere logica di gestione delle eccezioni nel livello di accesso ai dati;Voglio che questo sia guidato da annotazioni e solo gestire gli errori di validazione in una posizione centralizzata.
Il modello di dominio è di essere correttamente e di un'eccezione di tipo InvalidStateException
viene generata come previsto quando cerco di creare un valido entità (ad es.violare un vincolo di lunghezza su un campo).Al punto di cercare di intercettare l'eccezione nel mio esempio di una Molla Eccezione resolver, ho trovato il mio eccezione originale è scomparso e un javax.ejb.EJBTransactionRolledbackException
ha preso il suo posto.L'eccezione originale non è causato dalla lista.
Il mio primo pensiero fu che org.hibernate.validator.InvalidStateException
non era annotato con ApplicationException
, così ho installato una Sospensione di listener di eventi, ha catturato l'eccezione originale e rethrew come una nuova eccezione annotato con ApplicationException
.Questo non ha alcun effetto.
Una ulteriore complessità è che il livello web è chiamata Ejb tramite un'interfaccia Remota.Ho annotato la mia classe di eccezione con WebFault
, ma senza alcun risultato.
Cosa devo fare per garantire l'eccezione bolle fino?
Soluzione
Provare questo?
protetto InvalidStateException extractValidationException(Throwable ex) {
Throwable e = ex;mentre (e != null) {
se (e instanceof InvalidStateException) {
ritorno (ValidationException) e;} else if (e instanceof EJBException) {
e = ((EJBException) ed e).getCausedByException();} else {
e = e.getCause();}
}
return null;}