Classes IMPL

Tenho o seguinte código e não consigo descobrir onde se encontra o problema, já desenvolvi todas as outras classes, mas esta falta concluir.
Alguem por gentileza poderia me ajudar?
Mensagem de erro: The method closeConnection(Connection, Statement, ResultSet) in the type Conexao is not applicable for the arguments (Connection,
PreparedStatement, null)

//Implementação
package voluntarios;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import voluntarios.excecoes.WebPersistenciaException;

public class CadastroImpl implements CadastroDAO {

public CadastroDAO registarCadastros(CadastroDTO rDTO)
       throws WebPersistenciaException {
	          Connection conn = Conexao.getInstancia().getConnection();
	          PreparedStatement pstmt = null;
	          String sql = "insert into VOLUNTARIOS values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,"
	        	         +"?,?,?,?,?,?,?,?,?,?)";
	          try {
	        	  pstmt = conn.prepareStatement(sql);
	        	  pstmt.setString(1, rDTO.getID());
	        	  pstmt.setString(2, rDTO.getNome());
	        	  pstmt.execute();
	          } catch (SQLException e){
	        	  throw new WebPersistenciaException(e.getMessage());
	          } finally {
                              Mensagem de erro: The method closeConnection(Connection, Statement, ResultSet) in the type Conexao is not applicable for the arguments    
                                                                                                     (Connection,  PreparedStatement, null) Para linha seguinte.

	        	  Conexao.getInstancia().closeConnection(conn, pstmt, null);
	          }
	          return rDTO;
}

public CadastroDTO alterarCadastros(CadastroDTO rDTO){
	throws WebPersistenciaException{
		   Connection conn = Conexao.getInstancia().getConnection();
		   PreparedStatement pstmt = null;
		   String sql = "update VOLUNTARIOS set Nome=?, Identidade=?,"
		              + "CPF=?, DataCadastro=?, NomeMae=?, DataNascto=?"
		              + "Endereco=?, Bairro=?, Cidade=?, FoneContato1=?"
		              + "FoneContato2=?, PessoaContato1=?, PessoaContato2=?"
		              + "Email1=?, Email2=?, EscolaridadeAtual=?, Curso=?"
		              + "InstituicaoEnsino=?, TurnoEA=?, LocalTrab=?"
		              + "ProfissaoAtual=?, TurnoP=?, OpcaoTrabVoluntario=?"
		              + "OpcaoTrabVoluntDiscip=?"
		              + "where ID=?"+;
		   try {
			   pstmt = conn.prepareStatement(sql);
			   pstmt.setString(1, rDTO.getNome());
			   pstmt.setString(2, rDTO.getID());
			   pstmt.execute();
		   } catch (SQLException e){
			   throw new WebPersistneciaException(e.getMessage());
		   } finally {
			   Conexao.getInstancia().closeConection(conn, pstmt, null);
		   }
		   return rDTO;
}

public CadastroDTO excluirCadastros(CadastroDTO rDTO){
	throws WebPersistenciaException {
		Connection conn = Conexao.getInstancia().getConnection();
		PreparedStatement pstmt = null;
		String sql = "delete from VOLUNTARIOS where ID=?";
		try {
			pstmt = conn.prepareStatement();
			pstmt.setString(1, rDTO.getID());
			pstmt.execute();
		} catch (SQLException e){
			throw new WebPersistenciaException(e.getMessage());
		} finally {
			Conexao.getInstancia().closeConnection(conn, pstmt, null);
		}
		return rDTO;
}
	
public String recuperaCadastro(CadastroDTO rDTO){
	throws WebPersistenciaException{
		Connection conn = Conexao.getInstancia().getConnection();
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		String sql = "select id from VOLUNTARIOS where id=?";
		try {
			pstmt = conn.preparedStatement(sql);
			pstmt.setString(1, rDTO.getID());
			rs = pstmt.executeQuery();
			if (rs.next()) {
				return rs.getString("ID");
			}
		} catch (SQLException e){
			throw new WebPersistenciaException(e.getMessage());
		} finally {
			Conexao.getInstancia().closeConnection(conn, pstmt, null);
		}
		return "";
	}
}

public ArrayList imprimiCadastros() throws WebPersistenciaException{
	Connection conn = null;
	Statement stmt = null;
	ResultSet rs = null;
	ArrayList lista = new ArrayList();
	String sql = "select * from VOLUNTARIOS order by nome";
	try {
		conn = Conexao.getInstancia().getConnection();
		stmt = conn.createStatement();
		rs = stmt.executeQuery();
		while (rs.next()){
			lista.add(new CadastroDTO(rs.getString(1), rs.getString(2)));
		}
	} catch (SQLException e){
		throw new WebPersistenciaException(e.getMessage());
	} finally {
		Conexao.getInstancia().closeConnection(conn, stmt, rs);
	}
	return lista;
}

}

Coloque seu código nas tags code:
http://www.guj.com.br/posts/list/50115.java

Certifique-se que na classe onde você criou o método closeConnection, os tipos sejam mesmo java.sql.Connection, java.sql.ResultSet e java.sql.Statement. Muitas vezes erros assim ocorrem pq acidentalmente importamos uma classe de nome igual, específica do driver, como com.mysql.jdbc.ResultSet.

Outra coisa:

  1. Sempre retorne listas pela interface List e não pelo seu tipo concreto (ArrayList);
  2. Sempre indique o tipo da lista. É melhor List<ContatoDTO> e ArrayList<ContatoDTO> do que simplesmente List e ArrayList;
  3. Coloque uma exception como causa da outra, não simplesmente sua mensagem:
throw new WebPersistenciaException("Problema ao persistir dados", e);

Isso irá imprimir a StackTrace completa da exception original na parte “Caused By” na hora de fazer logs, e é muito importante na hora de rastrear bugs.
4. Ou você usa “imprimir” ou “imprime” ou “imprima”, mas não “imprimi”, pois o último é o passado do verbo imprimir na primeira pessoa (como em eu imprimi 200 cópias ontem). A palavra “registar” também não existe, o correto é “registrar”. Também é uma boa não colocar no plural métodos que alteram um único cadastroDTO. Deixe o plural pra métodos que alteram listas inteiras:

registrarContato(CadastroDTO cadastro);
registrarContatos(Collection<CadastroDTO> cadastros);
  1. Coloque títulos descritivos nos seus tópicos. Seu problema é o erro de que o método não existe, quando aparentemente os parâmetros estão certos. O título “classes IMPL” não ajuda nada a quem vai escolhe um tópico para abrir. Um bom título ajuda muito a reduzir o tempo de resposta do tópico.

Muito obrigado pelas suas informações, concordo com as observações, aproveito para desejar a voce e família um Feliz Natal e Próspero 2011.