Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Não consigo fazer o tratamento de Exception

Não consigo tratar a Exception oracle.jdbc.OracleDatabaseException, o spring retorna o erro da forma padrão e não como foi definida no método handle2.

package br.com.makode.beneficiariows.controller;

import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import oracle.jdbc.OracleDatabaseException;

@RestControllerAdvice
public class TratamentoDeErros {



    @ResponseStatus(code = HttpStatus.BAD_REQUEST)
    @ExceptionHandler(oracle.jdbc.OracleDatabaseException.class)
    public String handle2(OracleDatabaseException exption) {
        int codigoErro = exption.getOracleErrorNumber();
        return "Erro ao rodar a Packge, erro: " + codigoErro;
    }

    @ResponseStatus(code = HttpStatus.OK)
    @ExceptionHandler(NegativeArraySizeException.class)
    public String handle(NegativeArraySizeException exption) {


        return"Packge rodada com sucesso";
    }

}

Exption que é retornada a baixo : 2021-05-03 11:00:07.645 ERROR 15616 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.orm.jpa.JpaSystemException: could not extract ResultSet; nested exception is org.hibernate.exception.GenericJDBCException: could not extract ResultSet] with root cause

oracle.jdbc.OracleDatabaseException: ORA-20001: Autorização não encontrada ORA-06512: em "BENHOM.UC_URA", line 19

at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:498) ~[ojdbc8.jar:12.2.0.1.0]
at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:446) ~[ojdbc8.jar:12.2.0.1.0]
3 respostas

Oi Aguinaldo,

Altere o handler para tratar a exception do tipo JpaSystemException, pois é ela que está acontecendo nesse caso.

solução!

Funcionou com JpaSystemException obrigado! Gostaria de saber também se é possível eu ter acesso ao erro "Ora" que é mostrado na tela de exption pro exemplo "SQL Error: 20001" eu queria que o meu método @ResponseStatus(code = HttpStatus.BAD_REQUEST) retornasse esse erro para o cliente. Poderia me ajudar com isso? Segue um exemplo da tela de exption gerada.

2021-05-04 10:33:01.595 WARN 11016 --- [nio-8080-exec-4] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 20001, SQLState: 72000 2021-05-04 10:33:01.596 ERROR 11016 --- [nio-8080-exec-4] o.h.engine.jdbc.spi.SqlExceptionHelper : ORA-20001: Autorização não encontrada ORA-06512: em "BENHOM.UC_URA", line 19

2021-05-04 10:33:01.609 ERROR 11016 --- [nio-8080-exec-4] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.orm.jpa.JpaSystemException: could not extract ResultSet; nested exception is org.hibernate.exception.GenericJDBCException: could not extract ResultSet] with root cause

oracle.jdbc.OracleDatabaseException: ORA-20001: Autorização não encontrada ORA-06512: em "BENHOM.UC_URA", line 19

at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:498) ~[ojdbc8.jar:12.2.0.1.0]
at oracle.jdbc.driver.T4CTTIoer11.processError(T4CTTIoer11.java:446) ~[ojdbc8.jar:12.2.0.1.0]
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:1054) ~[ojdbc8.jar:12.2.0.1.0]
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:623) ~[ojdbc8.jar:12.2.0.1.0]
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:252) ~[ojdbc8.jar:12.2.0.1.0]
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:612) ~[ojdbc8.jar:12.2.0.1.0]
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:226) ~[ojdbc8.jar:12.2.0.1.0]
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:59) ~[ojdbc8.jar:12.2.0.1.0]
at oracle.jdbc.driver.T4CPreparedStatement.executeForRows(T4CPreparedStatement.java:910) ~[ojdbc8.jar:12.2.0.1.0]
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1119) ~[ojdbc8.jar:12.2.0.1.0]
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3780) ~[ojdbc8.jar:12.2.0.1.0]
at oracle.jdbc.driver.T4CPreparedStatement.executeInternal(T4CPreparedStatement.java:1343) ~[ojdbc8.jar:12.2.0.1.0]
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3822) ~[ojdbc8.jar:12.2.0.1.0]
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1165) ~[ojdbc8.jar:12.2.0.1.0]

Acho que dá para pegar pela mensagem:

String erro = exception.getCause().getMessage();

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software