Boa noite amigos,
Sou iniciante em Java e estou acompanhando a apostila da Caelum FJ-21 Desenvolvimento Web. Estou no início dela e seguindo os exercícios. Ao executar um exercício proposto estou recebendo o erro de Nullpointer. Sei que isso é por estar fazendo referência a algum objeto que não foi iniciado mas mesmo fazendo várias mudanças não consegui identificar. Segui o exercício exatamente como na apostila, fiz algumas alterações por conta própria mas em nenhuma delas funcionou. Gostaria da ajuda de vocês, para entender e localizar o problema.
No exemplo é um pequeno formulário que envia os dados para uma Servlet e salva no Banco de Dados.
Segue abaixo as classes.
Classe Contato
public class Contato {
private Integer id;
private String nome;
private String email;
private String endereco;
private Calendar dataNascimento;
public Contato () {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
public Calendar getDataNascimento() {
return dataNascimento;
}
public void setDataNascimento(Calendar dataNascimento) {
this.dataNascimento = dataNascimento;
}
}
ContatoDAO
public class contatoDAO extends ConnectionFactory {
private Connection connection;
public contatoDAO(){
}
public int criar (Contato contato){
String sql = "insert into CONTATO (nome, email, endereco, dataNascimento) values (?, ?, ?, ?) returning id";
try {
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, contato.getNome());
stmt.setString(2, contato.getEmail());
stmt.setString(3, contato.getEndereco());
stmt.setDate(4,new Date(contato.getDataNascimento().getTimeInMillis()));
ResultSet rs = stmt.executeQuery();
if (rs.next()){
return rs.getInt("id");
}
throw new RuntimeException("O cadastro do contato nao foi criado.");
} catch (Exception ex) {
throw new RuntimeException("Erro ao criar cadastro de contato", ex);
} finally {
super.fecharConexao();
}
}
Servlet
@WebServlet("/AdicionaContatoServlet")
public class AdicionaContatoServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public AdicionaContatoServlet() {
super();
}
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
//Pegando os parâmetros do Request
String nome = request.getParameter("nome");
String email = request.getParameter("email");
String endereco = request.getParameter("endereco");
String dataEmTexto = request.getParameter("dataNascimento");
Calendar dataNascimento = null;
//Fazendo a conversão da data
try {
Date date = new SimpleDateFormat("dd/MM/yyyy").parse(dataEmTexto);
dataNascimento = Calendar.getInstance();
dataNascimento.setTime(date);
} catch (java.text.ParseException e) {
out.println("Erro de conversão da data");
return; //Para a execução do método
}
//Montando um objeto contato
Contato contato = new Contato();
contato.setNome(nome);
contato.setEmail(email);
contato.setEndereco(endereco);
contato.setDataNascimento(dataNascimento);
//chamando o método para salvar criado na DAO
contatoDAO dao = new contatoDAO();
dao.criar(contato);
//exibe os dados do contato adicionado
out.println("<html>");
out.println("<body>");
out.println("Contato: " + contato.getNome() + " foi adicionado");
out.println("</body>");
out.println("</html>");
}
}
E esse é o erro que eu recebo:
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error that prevented it from fulfilling this request.
exception
java.lang.NullPointerException
dao.contatoDAO.adiciona(contatoDAO.java:22)
controle.AdicionaContatoServlet.service(AdicionaContatoServlet.java:66)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.52 logs.