Tenho uma classe service e quero atribuir mais de uma exceção, estou fazendo assim, mais não está dando certo.
publicvoidexcluir(Clientecliente)throwsNegocioException{try{clienteDAO.excluir(cliente);}catch(SqlExceptionHelpere){thrownewNegocioException("Cliente já possui cadastro!");}catch(Exceptione){thrownewNegocioException("Não foi possível excluir o carro!");}}
Sempre que você quiser ou precisar capturar mais de um tipo de exceção, certifique-se de que não está colocando uma super classe antes de uma sub classe:
Isto funciona:
try {
}catch(IOExceptionex){//IOException é uma sublcasse de Exception}catch(Exceptionex){}
Isso não funciona
try {
}catch(Exceptionex){//Exception é super classe de SQLException}catch(SQLExceptionex1){//SQLException nunca será atingida, pois o catch(Exception ex) irá capturar todas as exceções, sejam elas SQLException ou não.}
Jonathan_Medeiros
Desta maneira abaixo você consegue fazer um catch multiplo:
Opa Vamos lá, na realidade eu quero tratar a Exceção da Entidade Cliente que está no meu Service, o Meu DAO tinha uma exceção, acabei tirando. Só que ainda não consigo.
OBS: Ao passar o mouse em cima d SqlExceptionHelper aprendenta esse erro: No exception of type SqlExceptionHelper can be thrown; an exception type must be a subclass of Throwable
publicvoidsalvar(Clientecliente)throwsNegocioException{try{clienteDAO.salvar(cliente);}catch(SqlExceptionHelpere){thrownewNegocioException("Já possui um cliente cadastro neste CPF.");}catch(Exceptione){thrownewNegocioException("Não foi possível salvar o cliente.");}}
staroski
A mensagem é bastante clara:
Nenhuma exceção do tipo SqlExceptionHelper pode ser lançada; uma exceção precisa ser uma subclasse de Throwable.
Você está fazendo um catch de SqlExceptionHelper, mas não é possível fazer um throw de objetos desta classe, logo, não é possível fazer catch da mesma.
Dayson_Rodrigues
hum… então no caso como faria para informar ao usuário que já existe um cadastro? já que não pode tratar esse exceção? ou deixaria somente uma Exception para tudo?
shodaime
olá para informar que existe um cliente cadastrado, você poderia fazer uma verificação antes de acionar o seu DAO e passar uma mensagem avisando.
para as exceções eu faço da seguinte forma
// metodo no DAOpublicvoidmeuMetodoDAO()throwsSQLException,Exception{// implementação do método}// classe ServicepublicstaticvoidmeuMetodoService()throwsException{// validaçõestry{}catch(Exceptionex){thrownewException(ex.getMessage());}
Nunca tive problemas em relação a isso usando desta forma, caso alguem do forum saiba alguma forma para q eu possa melhorar fiquem a vontade para ajudar tbm
staroski
Acho que você não entendeu, SqlExceptionHelper não é uma classe de exceção, aliás, o nome dela, com sufixo Helper, sugere que seja uma classe utilitária.
Você pode criar suas classes de exceção, por exemplo uma classe UsuarioExistenteException, você só precisa estender Throwable, ou uma subclasse de Throwable, como por exemplo Exception, caso seja uma exceção checada em tempo de compilação ou RuntimeException caso seja uma exceção não checada.