3
respostas

Erro: ao instanciar o objeto

Ola,

ja conferi o codigo fonte com o do alura e nao consigo solucionar esse erro:

HTTP Status 500 - java.lang.InstantiationException

type Exception report

message java.lang.InstantiationException

description The server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: java.lang.InstantiationException
    br.com.alura.gerenciador.web.FazTudo.service(FazTudo.java:36)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    br.com.alura.gerenciador.web.FiltroDeAuditoria.doFilter(FiltroDeAuditoria.java:48)
root cause

java.lang.InstantiationException
    sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:48)
    java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    java.lang.Class.newInstance(Class.java:442)
    br.com.alura.gerenciador.web.FazTudo.service(FazTudo.java:28)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    br.com.alura.gerenciador.web.FiltroDeAuditoria.doFilter(FiltroDeAuditoria.java:48)

Poderiam me ajudar?

3 respostas

Oi Waz, tudo bem ?

O problema está na sua classe FazTudo, se você quiser postar o código aqui ia ser interessante para podermos te ajudar, mas caso você queira tentar arrumar sozinho antes, o problema está na linha 28 dessa classe.

Abraços


@WebServlet(urlPatterns = "/executa")
public class Controller extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException  {

        String tarefa = req.getParameter("tarefa");
        System.out.println(tarefa);

        if(tarefa == null) throw new IllegalArgumentException("Nome da classe e nulla ou errada");

        tarefa = "br.com.alura.gerenciador.web." + tarefa;
        try {
            Class  tipo = Class.forName(tarefa);
            //Class<?>  tipo = Class.forName(tarefa);
            Tarefa instancia = (Tarefa) tipo.newInstance(); 
            String pagina = instancia.executa(req, resp);

            RequestDispatcher dispatcher = req.getRequestDispatcher(pagina);
            dispatcher.forward(req, resp);

        } catch (Exception e) {
            e.printStackTrace();
            throw new ServletException(e);
        }
    }
}

Na sua interface Tarefa o método executa você alterou para String?

public interface Tarefa {

    String executa(HttpServletRequest request, HttpServletResponse response);

}

Além dessa alteração eu colocaria a linha: tarefa = "br.com.alura.gerenciador.web." + tarefa; dentro do try e não fora como está inserido.

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