Exception Details: java.lang.NullPointerException (Me Ajudem)

Ola Pessoal boa noite estou começando em java e estou desenvolvendo um trabalho para a faculdade.
Resumindo um sistema para farmacias jsf, jsp
Estou utilizando a seguinte sequencias de classifição.
Recebo o NullPointerException quando insiro um funcionarario na linha que esta destacada em vermelho.

Descrição da exeção

Description: An unhandled exception occurred during the execution of the web application. Please review the following stack trace for more information regarding the error.

Exception Details: java.lang.NullPointerException
null

Possible Source of Error:
Class Name: managedbeans.FuncionarioBean
File Name: FuncionarioBean.java
Method Name: inserirFuncionario
Line Number: 135

Muito Obrigado…

[code]/*

  • To change this template, choose Tools | Templates
  • and open the template in the editor.
    */

package dao;
import conexao.Conexao;
import java.sql.;
import java.util.
;
import conexao.Conexao.*;
import dto.DTOFuncionario;

/**
*

  • @author Bruno
    */
    public class DAOFuncionario {
    private Connection con;

    public DAOFuncionario(){
    con = Conexao.getInstancia().criarConexao();
    }

    /*
    *Metodo que Efetua o Login do usuario no sistema
    */
    public DTOFuncionario efetuarLogin(DTOFuncionario f){

      String sql = " SELECT funcionario.idFuncionario,pessoa.nome,pessoa.email,funcionario.senha," +
              " funcionario.administrador,funcionario.Pessoa_Fisica_Pessoa_idPessoa " +
              " from pessoa,funcionario where " +
              " pessoa.idPessoa = funcionario.Pessoa_Fisica_Pessoa_idPessoa " +
              " and pessoa.email=? " +
              " and funcionario.senha=? ";
        try {
            PreparedStatement smtp = con.prepareStatement(sql);
    
            //  smtp.setBoolean(1,f.isAdministrador());
          smtp.setString(1, f.getEmail());
          smtp.setString(2,f.getSenha());
          ResultSet rs = smtp.executeQuery();
    
          while (rs.next()){
              
              f.setId(rs.getInt(1));
              f.setIdFuncionario(rs.getInt(1));
              f.setNome(rs.getString(2));
              f.setEmail(rs.getString(3));
              f.setAdministrador(rs.getBoolean(5));
    
    
          }
      } catch (SQLException sqle) {
           sqle.printStackTrace();
      }
       return f;
    

    }

    /*

    • Metodo que pesquisa os usuario nos banco de dados
    • pesquisa pelo nome ou todos
      */

    public List<DTOFuncionario> pesquisar(String nome){
    List<DTOFuncionario> funcionarios = new ArrayList<DTOFuncionario>();

      String sql = "SELECT pessoa.*,pessoa_fisica.*,funcionario.*from pessoa,pessoa_fisica,funcionario where" +
              "pessoa.idPessoa = pessoa_fisica.Pessoa_idPessoa" +
              "and funcionario.Pessoa_Fisica_Pessoa_idPessoa = pessoa_fisica.Pessoa_idPessoa" +
              "and UPPER(`pessoa`.`nome`) LIKE '%" + nome + "%'";
        try {
             PreparedStatement smtp = con.prepareStatement(sql);
             ResultSet rs = smtp.executeQuery();
             while (rs.next()){
    
                 // a linha abaixo tem observar o processo
                 DTOFuncionario f = new DTOFuncionario();
                 f.setId(rs.getInt(1));
                 f.setNome(rs.getString(2));
                 f.setTelefone(rs.getString(3));
                 f.setEmail(rs.getString(4));
                 f.setCpf(rs.getString(6));
                 f.setCpf(rs.getString(7));
                 f.setAdministrador(rs.getBoolean(13));
                 f.setEndereco(rs.getString(9));
    
                 funcionarios.add(f);
    
             }
    
      } catch (SQLException sqle) {
          sqle.printStackTrace();
      }
      return funcionarios;
    

    }

    /*

    • Metodo para inserir funcionario no banco
      */

    public void inserir(DTOFuncionario funcionario){
    String sql = " INSERT INTO pessoa(nome,telefone,email) " +
    " VALUE (?,?,?); "+
    " INSERT INTO pessoa_fisica(Pessoa_idPessoa,cpf,rg) " +
    " VALUE ((SELECT MAX(pessoa.idPessoa) from pessoa),?,?); " +
    " INSERT INTO funcionario(endereco,senha,administrador,Pessoa_Fisica_Pessoa_idPessoa) " +
    " VALUE (?,?,?,(SELECT MAX(pessoa.idPessoa) from pessoa)); ";

       try {
            PreparedStatement ps = con.prepareStatement(sql);
            ps.setString(1,funcionario.getNome());
            ps.setString(2, funcionario.getTelefone());
            ps.setString(3,funcionario.getEmail());
    
            ps.setInt(4, funcionario.getIdPessoaFisica());
            ps.setString(4, funcionario.getCpf());
            ps.setString(5, funcionario.getRg());
    
            ps.setString(6,funcionario.getEndereco());
            ps.setString(7,funcionario.getSenha());
            ps.setBoolean(8,funcionario.isAdministrador());
            ps.executeUpdate();
            limpar_campos(funcionario);
    
    
      } catch (SQLException sqle) {
           sqle.printStackTrace();
      }
    

    }

    public void alterar(DTOFuncionario funcionario){
    String sql = “UPDATE pessoa SET nome = ?,telefone = ?,email = ?” +
    “WHERE idPessoa = ?;” +
    “UPDATE pessoa_fisica SET cpf = ?,rg = ?” +
    “WHERE Pessoa_idPessoa = ?;” +
    “UPDATE funcionario SET endereco = ?,senha = ?,” +
    "administrador = ?" +
    “WHERE Pessoa_Fisica_Pessoa_idPessoa = ?;”;
    try {
    PreparedStatement ps = con.prepareCall(sql);

          ps.setString(1,funcionario.getNome());
          ps.setString(2,funcionario.getTelefone());
          ps.setString(3,funcionario.getEmail());
          ps.setInt(4,funcionario.getId());
    
          ps.setString(5,funcionario.getCpf());
          ps.setString(6,funcionario.getRg());
          ps.setInt(7,funcionario.getId());
    
          ps.setString(8, funcionario.getEndereco());
          ps.setString(9,funcionario.getSenha());
          ps.setBoolean(10,funcionario.isAdministrador());
          ps.setInt(11,funcionario.getId());
          ps.executeUpdate();
          limpar_campos(funcionario);
    
    
      } catch (SQLException sqle) {
          sqle.printStackTrace();
      }
    

    }

    public void excluir(DTOFuncionario f){
    String sql="DELETE FROM pessoa " +
    “WHERE idPessoa = ? ;” +
    "DELETE FROM pessoa_fisica " +
    “WHERE pessoa_fisica.Pessoa_idPessoa = ?;” +
    "DELETE FROM funcionario " +
    “WHERE funcionario.Pessoa_Fisica_Pessoa_idPessoa =?;”;
    try {

          PreparedStatement ps = con.prepareCall(sql);
          ps.setInt(1,f.getId());
          ps.setInt(2,f.getId());
          ps.setInt(3,f.getId());
          ps.executeUpdate();
          limpar_campos(f);
    
      } catch (SQLException e) {
          e.printStackTrace();
    
      }
    

    }

    public void limpar_campos(DTOFuncionario func){
    func.setNome(null);
    func.setTelefone(null);
    func.setEmail(null);
    func.setCpf(null);
    func.setRg(null);
    func.setEndereco(null);
    func.setSenha(null);
    func.setAdministrador(false);

    }
    }
    [/code]

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dto;

/**
 *
 * @author Administrador
 */
public class DTOFuncionario extends DTOPessoaFisica {
    private Integer idFuncionario;
    private String endereco;
    private String senha;
    private boolean administrador;
    private Integer idPessoaFisica ;

    public DTOFuncionario(){}

    public DTOFuncionario(String nome,String telefone,String email,String rg,String cpf,
            String endereco, String senha,boolean administrador,Integer idPessoaFisica){
        //Integer idPessoa,
         // super.id = idPessoa;
        //Integer idFuncionario,
        //this.idFuncionario = idFuncionario;
          super.nome = nome;
          super.telefone = telefone;
          super.email = email;
          super.rg = rg;
          super.cpf = cpf;
          this.endereco = endereco;
          this.senha = senha;
          this.administrador = administrador;
          this.idPessoaFisica = idPessoaFisica;

    }
    /**
     * @return the idFuncionario
     */
    public Integer getIdFuncionario() {
        return idFuncionario;
    }

    /**
     * @param idFuncionario the idFuncionario to set
     */
    public void setIdFuncionario(Integer idFuncionario) {
        this.idFuncionario = idFuncionario;
    }

    /**
     * @return the endereco
     */
    public String getEndereco() {
        return endereco;
    }

    /**
     * @param endereco the endereco to set
     */
    public void setEndereco(String endereco) {
        this.endereco = endereco;
    }

    /**
     * @return the senha
     */
    public String getSenha() {
        return senha;
    }

    /**
     * @param senha the senha to set
     */
    public void setSenha(String senha) {
        this.senha = senha;
    }

    /**
     * @return the administrador
     */
    public boolean isAdministrador() {
        return administrador;
    }

    /**
     * @param administrador the administrador to set
     */
    public void setAdministrador(boolean administrador) {
        this.administrador = administrador;
    }

    /**
     * @return the idPessoaFisica
     */
    public Integer getIdPessoaFisica() {
        return idPessoaFisica;
    }

    /**
     * @param idPessoaFisica the idPessoaFisica to set
     */
    public void setIdPessoaFisica(Integer idPessoaFisica) {
        this.idPessoaFisica = idPessoaFisica;
    }

}
 

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dto;

import java.io.Serializable;


/**
 *
 * @author Bruno
 */
public class DTOPessoa implements Serializable {
    protected int id;
    protected String nome;
    protected String telefone;
    protected String email;

    public DTOPessoa(){}

    public DTOPessoa(Integer id, String nome, String telefone,String email){
         this.id = id;
         this.nome = nome;
         this.telefone= telefone;
         this.email = email;
    }

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the telefone
     */
    public String getTelefone() {
        return telefone;
    }

    /**
     * @param telefone the telefone to set
     */
    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }

    /**
     * @return the email
     */
    public String getEmail() {
        return email;
    }

    /**
     * @param email the email to set
     */
    public void setEmail(String email) {
        this.email = email;
    }

    /**
     * @return the id
     */
    public int getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(int id) {
        this.id = id;
    }

}


/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dto;

/**
 *
 * @author Bruno
 */
public class DTOPessoaFisica extends DTOPessoa {
    protected String cpf;
    protected String rg;

    public DTOPessoaFisica(){}

    public DTOPessoaFisica(Integer id, String nome, String telefone, String email, String cpf, String rg) {
       // super(id,nome,telefone,email);
        super.id=id;
        super.nome = nome;
        super.telefone = telefone;
        super.email = email;
        this.cpf = cpf;
        this.rg = rg;
    }

    public String getCpf() {
        return cpf;
    }

    /**
     * @param cpf the cpf to set
     */
    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    /**
     * @return the rg
     */
    public String getRg() {
        return rg;
    }

    /**
     * @param rg the rg to set
     */
    public void setRg(String rg) {
        this.rg = rg;
    }
}

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package managedbeans;

import dao.DAOFuncionario;
import dto.DTOFuncionario;
import java.util.List;

/**
 *
 * @author Bruno
 */
public class FuncionarioBean{

    private DTOFuncionario funcionario;
    private DAOFuncionario funcionarios;
    private Boolean erro;
    private boolean edicao;
    private String nome;
    private List&lt;DTOFuncionario&gt; listaFuncionarios;

    public FuncionarioBean() {
        setFuncionario(new DTOFuncionario());
    }

    /**
     * @return the funcionario
     */
    public DTOFuncionario getFuncionario() {
        return funcionario;
    }

    /**
     * @param funcionario the funcionario to set
     */
    public void setFuncionario(DTOFuncionario funcionario) {
        this.funcionario = funcionario;
    }

    /**
     * @return the erro
     */
    public Boolean getErro() {
        return erro;
    }

    /**
     * @param erro the erro to set
     */
    public void setErro(Boolean erro) {
        this.erro = erro;
    }

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @param nome the nome to set
     */
    public void setNome(String nome) {
        this.nome = nome;
    }

    /**
     * @return the listaFuncionarios
     */
    public List&lt;DTOFuncionario&gt; getListaFuncionarios() {
        return listaFuncionarios;
    }

    /**
     * @param listaFuncionarios the listaFuncionarios to set
     */
    public void setListaFuncionarios(List&lt;DTOFuncionario&gt; listaFuncionarios) {
        this.listaFuncionarios = listaFuncionarios;
    }

    /**
     * @return the edicao
     */
    public boolean isEdicao() {
        return edicao;
    }

    /**
     * @param edicao the edicao to set
     */
    public void setEdicao(boolean edicao) {
        this.edicao = edicao;
    }
    /*
     * Método de apoio para configurar a navegação de edição de usuário
     */

    private String prepararEdicao(boolean edicao) {
        setEdicao(edicao);
        return &quot;edicaoFuncionario&quot;;
    }


    /*
     * Método de anavegação e preparo de inserção de usuário
     */
    public String insercaoFuncionario() {
        funcionario = new DTOFuncionario();
        return prepararEdicao(false);
    }


    /*
     * Método de navegação e preparo de edição de usuário
     */
    public String edicaoFuncionario() {
        return prepararEdicao(true);

    }

    public String pesquisaFuncionario() {
        return &quot;&quot;;

    }

    public String pesquisarFuncionarios() {
        listaFuncionarios = funcionarios.pesquisar(nome);
        return &quot;&quot;;
    }

    public String inserirFuncionario() {
[color=red] funcionarios.inserir(funcionario);[/color]
        edicao = false;
        return &quot;&quot;;
    }

    public String editarFuncionarios() {
        funcionarios.alterar(funcionario);

        /*
         * Ap&#65533;s editar o usu&#65533;rio no Banco de Dados, tamb&#65533;m altera
         * na lista pesquisada anteriormente para evitar de
         * refazer a pesquisa.
         */
        for (int i = 0; i &lt; listaFuncionarios.size(); i++) {
            DTOFuncionario f = listaFuncionarios.get(i);
            if (f.getId() == funcionario.getId()) {
                listaFuncionarios.set(i, funcionario);
                break;
            }
        }

        return &quot;&quot;;
    }

    public String excluirFuncionario() {
        /*
         * Ap&#65533;s excluir o usu&#65533;rio no Banco de Dados, tamb&#65533;m exclui
         * na lista pesquisada anteriormente para evitar de
         * refazer a pesquisa.
         */
        funcionarios.excluir(funcionario);

        for (int i = 0; i &lt; listaFuncionarios.size(); i++) {
            DTOFuncionario f = listaFuncionarios.get(i);
            if (f.getId() == funcionario.getId()) {
                listaFuncionarios.remove(i);
                break;
            }
        }

        return &quot;&quot;;
    }

    public String inicial() {
        return &quot;inicial&quot;;
    }
}