JAVA - Ajuda com erro de compilação

Caros amigos, alguém por favor pode me ajudar a identificar e corrigir esse erro, que está me deixando louco.

ERROR: br.com.systemweb.model.dao.impl.CustomerDaoImpl.getObjectByTypeDocAndNumdoc Error:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'where c.c_type_doc=‘1’ and c.c_num_doc=‘12345678’ ’ at line 1

ERROR: Cannot invoke “Object.toString()” because the return value of “java.util.Map.get(Object)” is null

OBSERVAÇÃO: não entendo porque o sistema me traz essa linha assim ==[ c.c_num_doc=‘12345678’ ’ ]===

o CustomerDao, está assim:

package br.com.systemweb.model.dao;

import br.com.systemweb.model.Customer;
import java.util.Map;

/**
 *
 * @author rctom
 */
public interface CustomerDao {
    public Customer getObjectByTypeDocAndNumdoc(String typeDoc, String numDoc);    
    public int saveObject(Map<String,Object>requestBody);
}

o CustomerDaoImpl, está assim:

import br.com.systemweb.config.ConexaoDB;
import br.com.systemweb.constants.ConstantMenssages;
import br.com.systemweb.model.Customer;
import br.com.systemweb.model.Departament;
import br.com.systemweb.model.District;
import br.com.systemweb.model.Province;
import br.com.systemweb.model.Ubigeo;
import br.com.systemweb.model.dao.CustomerDao;
import br.com.systemweb.utils.Utils;
import java.util.Map;
import java.sql.*;
import java.util.HashSet;
import java.util.Set;
import java.util.logging.Logger;
import java.util.logging.Level;

/**
 *
 * @author rctom
 */
public class CustomerDaoImpl implements CustomerDao{

    private static final Logger LOGGER = Logger.getLogger(CustomerDaoImpl.class.getName());
    
    @Override
    public Customer getObjectByTypeDocAndNumdoc(String typeDoc, String numDoc) {
        Customer customer = null;
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        StringBuilder query = new StringBuilder();

        query.append("select ");
        query.append(" c.n_id_customer");
        query.append(" ,c.c_code");
        query.append(" ,c.c_type_doc");
        query.append(" ,c.c_num_doc");
        query.append(" ,c.c_business_name");
        query.append(" ,p.n_id_person");
        query.append(" ,p.c_name");
        query.append(" ,p.c_first_name");
        query.append(" ,p.c_last_name");        
        query.append(" ,p.c_civil_status");
        query.append(" ,p.d_date_birth");
        query.append(" ,p.c_gender");
        query.append(" ,c.c_address");
        query.append(" ,c.c_phone_main");
        query.append(" ,c.c_email_main");
        query.append(",u.n_id_ubigeo ");        
        query.append(",u.c_departament_inei ");
        query.append(",u.c_departamento ");
        query.append(",u.c_provincia_inei ");
        query.append(",u.c_provincia ");
        query.append(",u.c_ubigeo_inei ");
        query.append(",u.c_distrito ");               
        query.append(" from m_customer c inner join m_person p ");
        query.append(" On c.n_id_person=p.n_id_person left join m_ubigeo u ");
        query.append(" where c.c_type_doc=? and c.c_num_doc=?");  
        
        try {
            conn = ConexaoDB.getConnection();
            ps = conn.prepareStatement(query.toString());
            ps.setString(1,typeDoc);
            ps.setString(2,numDoc.trim());            
            rs = ps.executeQuery();
                        
            while (rs.next()) {
                customer = new Customer();
                customer.setCustomerId(rs.getInt("n_id_customer"));
                customer.setCustomerCode(rs.getString("c_code"));                
                customer.setTypeDoc(rs.getString("c_type_code"));
                customer.setNumDoc(rs.getString("c_num_doc"));
                customer.setBussinesName(rs.getString("c_business_name"));                                               
                customer.setPersonId(rs.getInt("n_id_person"));
                customer.setName(rs.getString("c_name"));
                customer.setFirstName(rs.getString("c_first_name"));
                customer.setLastName(rs.getString("c_last_name"));
                customer.setCivilState(rs.getString("c_civil_status"));
                customer.setGender(rs.getString("c_gender"));
                customer.setBirthDate(Utils.convertStringToLocalDate(rs.getString("d_date_birth")));
                customer.setAddress(rs.getString("c_address"));
                customer.setNumberPhone(rs.getString("c_phone_main"));
                customer.setEmail(rs.getString("c_email_main"));                     
                customer.setUbigeo(new Ubigeo(rs.getInt("n_id_ubigeo"),
                        new Departament(rs.getString("c_departamento_inei"), rs.getString("c_departamento")),
                        new Province(rs.getString("c_provincia_inei"), rs.getString("c_provincia")),
                        new District(rs.getString("c_ubigeo_inei"), rs.getString("c_distrito"))));                
            }            
            
        } catch (SQLException e) {
            LOGGER.log(Level.INFO, "Error:{0}", e.getLocalizedMessage());
        } catch (Exception e) {
            LOGGER.log(Level.INFO, "Error:{0}", e.getLocalizedMessage());            
            throw new RuntimeException(e.getLocalizedMessage());
        } finally {
            try {
                if(rs != null){
                   rs.close();
                }
                if(ps != null){
                   ps.close();
                }   
                if(conn != null){
                    ConexaoDB.releaseConnection(conn);
                }
            } catch (SQLException e) {
                LOGGER.log(Level.INFO, "Error:{0}", e.getLocalizedMessage());
            }
        }        
        
        if(customer == null){
            throw new NullPointerException(ConstantMenssages.MESSAGE_VAL_510);
        }
        
        return customer;       
    }

    @Override
    public int saveObject(Map<String, Object> requestBody) {
        int r = 0;
        int personId = 0;
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;       

        if(requestBody.get("typeDoc").toString().equals("6")){
            mappingRequestToValidadeEmptyOrNullBusiness(requestBody);
        } else {
            mappingRequestToValidadeEmptyOrNullPerson(requestBody);
        }
        
        //Validar Número do Documento Informado
        Utils.validTypeAndNumberDoc(requestBody.get("typeDoc").toString(), requestBody.get("numDoc").toString());
                      
        StringBuilder queryInsertPerson = new StringBuilder();
        queryInsertPerson.append("INSERT INTO m_person(");
        queryInsertPerson.append("c_name");
        queryInsertPerson.append(",c_first_name");
        queryInsertPerson.append(",c_last_name");
        queryInsertPerson.append(",c_civil_status");
        queryInsertPerson.append(",c_gender");
        queryInsertPerson.append(",d_date_birth");
        queryInsertPerson.append(",c_state");
        queryInsertPerson.append(")values(?,?,?,?,?,?,?)");

        
        StringBuilder queryInsertCustomer = new StringBuilder();
        queryInsertCustomer.append("INSERT INTO m_customer(");
        queryInsertCustomer.append("c_code");
        queryInsertCustomer.append(",c_type_doc");
        queryInsertCustomer.append(",c_num_doc");
        queryInsertCustomer.append(",c_business_name");
        queryInsertCustomer.append(",c_address");
        queryInsertCustomer.append(",c_phone_main");
        queryInsertCustomer.append(",c_email_main");            
        queryInsertCustomer.append(",c_create_user");    
        queryInsertCustomer.append(",n_id_person");    
        queryInsertCustomer.append(",n_id_ubigeo");    
        queryInsertCustomer.append(",c_state");
        queryInsertCustomer.append(")values(?,?,?,?,?,?,?,?,?,?,?)");
        
        try {
            //Pessoa
            conn = ConexaoDB.getConnection();
            ps = conn.prepareStatement(queryInsertPerson.toString(), PreparedStatement.RETURN_GENERATED_KEYS);
            ps.setString(1, requestBody.get("name").toString().trim().toUpperCase());
            ps.setString(2, requestBody.get("firstName").toString().trim().toUpperCase());
            ps.setString(3, requestBody.get("lastName").toString().trim().toUpperCase());
            ps.setString(4, requestBody.get("selectCivilState").toString().trim());
            ps.setString(5, requestBody.get("selectGender").toString().trim());
            ps.setString(6, requestBody.get("birthDate").toString().trim());
            ps.setString(7, "A");
            
            r = ps.executeUpdate();            
            rs = ps.getGeneratedKeys();
            
            while (rs.next()) {                
                personId = rs.getInt(1);
            }
            
            //Cliente        
            ps = conn.prepareStatement(queryInsertCustomer.toString(), PreparedStatement.RETURN_GENERATED_KEYS);
            ps.setString(1, "C".concat(Utils.generateCodeWithDate()));
            ps.setString(2, requestBody.get("typeDoc").toString().trim());
            ps.setString(3, requestBody.get("numDoc").toString().trim());
            ps.setString(4, requestBody.get("businessName").toString().trim().toUpperCase());
            ps.setString(5, requestBody.get("address").toString().trim());
            ps.setString(6, requestBody.get("numberPhone").toString().trim());
            ps.setString(7, requestBody.get("email").toString().trim());            
            ps.setString(8, requestBody.get("sessionUser").toString().trim());
            ps.setInt(9, personId);
            ps.setInt(10, 1); /*Agregar de forma Dinamica*/
            ps.setString(11, "A");
            
            r = ps.executeUpdate();
            
        } catch (SQLException e) {
            LOGGER.log(Level.INFO, "Error:{0}", e.getLocalizedMessage());
        } catch (Exception e) {
            LOGGER.log(Level.INFO, "Error:{0}", e.getLocalizedMessage());            
            throw new RuntimeException(e.getLocalizedMessage());
        } finally {
            try {
                if(rs != null){
                   rs.close();
                }
                if(ps != null){
                   ps.close();
                }   
                if(conn != null){
                    ConexaoDB.releaseConnection(conn);
                }
            } catch (SQLException e) {
                LOGGER.log(Level.INFO, "Error:{0}", e.getLocalizedMessage());
            }
        }  
        return r;
    }
    
    
    private void mappingRequestToValidadeEmptyOrNullPerson(Map<String,Object>requestBody){
        for (Map.Entry<String,Object>entry:requestBody.entrySet()) {
            if(mandatoryColumnsPerson().contains(entry.getKey())){
                Utils.isNullOrEmty(entry.getKey(), entry.getValue().toString());
            }
        }
        if(requestBody.get("birthDate").toString().isBlank()){
            requestBody.put("birthDate","1900-01-01");
        }
    }    

    
    private void mappingRequestToValidadeEmptyOrNullBusiness(Map<String,Object>requestBody){
        for (Map.Entry<String,Object>entry:requestBody.entrySet()) {
            if(mandatoryColumnsBusiness().contains(entry.getKey())){
                Utils.isNullOrEmty(entry.getKey(), entry.getValue().toString());
            }
        }
        if(requestBody.get("birthDate").toString().isBlank()){
            requestBody.put("birthDate","1900-01-01");
        }
    }        
    
    
    private Set<String> mandatoryColumnsBusiness(){
        Set<String> columns = new HashSet<>();
        columns.add("businessName");
        columns.add("typeDoc");
        columns.add("numDoc");
        columns.add("email");
        return columns;
    }


    private Set<String> mandatoryColumnsPerson(){
        Set<String> columns = new HashSet<>();
        columns.add("name");
        columns.add("firstName");
        columns.add("lastName");
        columns.add("typeDoc");
        columns.add("numDoc");
        columns.add("email");
        return columns;
    }    
    
}


Por favor, alguém pode me ajudar entender esse erro.

Grato,

Cesar

Acredito que esteja faltando o join das colunas nesse left join:

left join m_ubigeo u

Caro amigo, Lucas.

Eu ja fiz, refiz, li e reli cada linha do código e não consigo identificar o erro.

Com sua permissão posso te enviar os fontes para me ajudar ?

Desenvolvo sistema em PHP+Codeigniter, agora estou estudando Java e alguns erros que aparecem consigo identificar, mas esse esta me deixando louco.

Grato,

Cesar

Primeiro, vamos reescrevear a query usando um bloco de texto, facilitando a leitura.

String query = 
    """
    select 
        c.n_id_customer,
        c.c_code, 
        c.c_type_doc, 
        c.c_num_doc, 
        c.c_business_name, 
        p.n_id_person, 
        p.c_name, 
        p.c_first_name, 
        p.c_last_name,      
        p.c_civil_status, 
        p.d_date_birth, 
        p.c_gender, 
        c.c_address, 
        c.c_phone_main, 
        c.c_email_main, 
        u.n_id_ubigeo,       
        u.c_departament_inei, 
        u.c_departamento, 
        u.c_provincia_inei, 
        u.c_provincia, 
        u.c_ubigeo_inei, 
        u.c_distrito           
    from 
        m_customer c
    inner join 
        m_person p
    on 
        c.n_id_person = p.n_id_person left join m_ubigeo u
    where 
        c.c_type_doc = ? and c.c_num_doc = ?
    """;

No erro é dito que há um problema na sintaxe, perto de 'where c.c_type_doc=‘1’ and c.c_num_doc=‘12345678’ (veja que aqui os valores já estão substituídos, visto que é o SQL que de fato foi para o SGBD.

Perceba que vc tem um left join solto ali no on: c.n_id_person = p.n_id_person left join m_ubigeo u

Remova esse join e teste. É basicamente o que o @Lucas_Camara disse. Eu particularmente não gosto de usar joins a não ser que sejam realmente necessários. Sempre achei a sintaxe confusa :smiley:

Caros amigos, saudações.

Baseado nas orientações acima, refiz o Código, mas infelizmente continua aparecendo o mesmo erro.

Não entendo esse erro, já fiz de tudo que pude fazer, ou melhor, que está ao meu alcance.

Nunca imaginei que programar em JAVA, daria tanto problema que não tem explicação (para mim).

o código que refiz ficou assim:

CustomerDaoImpl

import br.com.systemweb.config.ConexaoDB;
import br.com.systemweb.constants.ConstantMenssages;
import br.com.systemweb.model.Customer;
import br.com.systemweb.model.Departament;
import br.com.systemweb.model.District;
import br.com.systemweb.model.Province;
import br.com.systemweb.model.Ubigeo;
import br.com.systemweb.model.dao.CustomerDao;
import br.com.systemweb.utils.Utils;
import java.util.Map;
import java.sql.*;
import java.util.HashSet;
import java.util.Set;
import java.util.logging.Logger;
import java.util.logging.Level;

/**
 *
 * @author rctom
 */
public class CustomerDaoImpl implements CustomerDao{

    private static final Logger LOGGER = Logger.getLogger(CustomerDaoImpl.class.getName());
    
    @Override
    public Customer getObjectByTypeDocAndNumdoc(String typeDoc, String numDoc) {
        Customer customer = null;
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;
        StringBuilder query = new StringBuilder();
        
        query.append("select ");
        query.append("c.n_id_customer ");
        query.append(",c.c_code ");
        query.append(",c.c_type_doc ");
        query.append(",c.c_num_doc ");
        query.append(",c.c_business_name ");
        query.append(",p.n_id_person ");
        query.append(",p.c_name ");
        query.append(",p.c_first_name ");
        query.append(",p.c_last_name ");        
        query.append(",p.c_civil_status ");
        query.append(",p.d_date_birth ");
        query.append(",p.c_gender ");
        query.append(",c.c_address ");
        query.append(",c.c_phone_main ");
        query.append(",c.c_email_main ");
        query.append(",u.n_id_ubigeo ");        
        query.append(",u.c_departamento_inei ");
        query.append(",u.c_departamento ");
        query.append(",u.c_provincia_inei ");
        query.append(",u.c_provincia ");
        query.append(",u.c_ubigeo_inei ");
        query.append(",u.c_distrito ");               
        query.append("from m_customer c inner join m_person p ");
        query.append("On c.n_id_person=p.n_id_person inner join m_ubigeo u ");     
        query.append("On c.n_id_ubigeo = u.n_id_ubigeo ");
        query.append("WHERE c.c_type_doc=? and c.c_num_doc=?");        
        
        try {
            conn = ConexaoDB.getConnection();
            ps = conn.prepareStatement(query.toString());
            ps.setString(1,typeDoc);
            ps.setString(2,numDoc);            
            rs = ps.executeQuery();           
                        
            while (rs.next()) {
                customer = new Customer();
                customer.setCustomerId(rs.getInt("n_id_customer"));
                customer.setCustomerCode(rs.getString("c_code"));                
                customer.setTypeDoc(rs.getString("c_type_code"));
                customer.setNumDoc(rs.getString("c_num_doc"));
                customer.setBussinesName(rs.getString("c_business_name"));                                               
                customer.setPersonId(rs.getInt("n_id_person"));
                customer.setName(rs.getString("c_name"));
                customer.setFirstName(rs.getString("c_first_name"));
                customer.setLastName(rs.getString("c_last_name"));
                customer.setCivilState(rs.getString("c_civil_status"));
                customer.setGender(rs.getString("c_gender"));
                customer.setBirthDate(Utils.convertStringToLocalDate(rs.getString("d_date_birth")));
                customer.setAddress(rs.getString("c_address"));
                customer.setNumberPhone(rs.getString("c_phone_main"));
                customer.setEmail(rs.getString("c_email_main"));                     
                customer.setUbigeo(new Ubigeo(rs.getInt("n_id_ubigeo"),
                        new Departament(rs.getString("c_departamento_inei"), rs.getString("c_departamento")),
                        new Province(rs.getString("c_provincia_inei"), rs.getString("c_provincia")),
                        new District(rs.getString("c_ubigeo_inei"), rs.getString("c_distrito"))));                
            }            
            
        } catch (SQLException e) {
            LOGGER.log(Level.INFO, "Error:{0}", e.getLocalizedMessage());
        } catch (Exception e) {
            LOGGER.log(Level.INFO, "Error:{0}", e.getLocalizedMessage());            
            throw new RuntimeException(e.getLocalizedMessage());
        } finally {
            try {
                if(rs != null){
                   rs.close();
                }
                if(ps != null){
                   ps.close();
                }   
                if(conn != null){
                    ConexaoDB.releaseConnection(conn);
                }
            } catch (SQLException e) {
                LOGGER.log(Level.INFO, "Error:{0}", e.getLocalizedMessage());
            }
        }        
        
        if(customer == null){
            throw new NullPointerException(ConstantMenssages.MESSAGE_VAL_510);
        }
        
        return customer;       
    }

    @Override
    public int saveObject(Map<String, Object> requestBody) {
        int r = 0;
        int personId = 0;
        Connection conn = null;
        PreparedStatement ps = null;
        ResultSet rs = null;       

        if(requestBody.get("typeDoc").toString().equals("6")){
            mappingRequestToValidadeEmptyOrNullBusiness(requestBody);
        } else {
            mappingRequestToValidadeEmptyOrNullPerson(requestBody);
        }
        
        //Validar Número do Documento Informado
        Utils.validTypeAndNumberDoc(requestBody.get("typeDoc").toString(), requestBody.get("numDoc").toString());
                      
        StringBuilder queryInsertPerson = new StringBuilder();
        queryInsertPerson.append("INSERT INTO m_person(");
        queryInsertPerson.append("c_name");
        queryInsertPerson.append(",c_first_name");
        queryInsertPerson.append(",c_last_name");
        queryInsertPerson.append(",c_civil_status");
        queryInsertPerson.append(",c_gender");
        queryInsertPerson.append(",d_date_birth");
        queryInsertPerson.append(",c_state");
        queryInsertPerson.append(")values(?,?,?,?,?,?,?)");

        
        StringBuilder queryInsertCustomer = new StringBuilder();
        queryInsertCustomer.append("INSERT INTO m_customer(");
        queryInsertCustomer.append("c_code");
        queryInsertCustomer.append(",c_type_doc");
        queryInsertCustomer.append(",c_num_doc");
        queryInsertCustomer.append(",c_business_name");
        queryInsertCustomer.append(",c_address");
        queryInsertCustomer.append(",c_phone_main");
        queryInsertCustomer.append(",c_email_main");            
        queryInsertCustomer.append(",c_create_user");    
        queryInsertCustomer.append(",n_id_person");    
        queryInsertCustomer.append(",n_id_ubigeo");    
        queryInsertCustomer.append(",c_state");
        queryInsertCustomer.append(")values(?,?,?,?,?,?,?,?,?,?,?)");
        
        try {
            //Pessoa
            conn = ConexaoDB.getConnection();
            ps = conn.prepareStatement(queryInsertPerson.toString(), PreparedStatement.RETURN_GENERATED_KEYS);
            ps.setString(1, requestBody.get("name").toString().trim().toUpperCase());
            ps.setString(2, requestBody.get("firstName").toString().trim().toUpperCase());
            ps.setString(3, requestBody.get("lastName").toString().trim().toUpperCase());
            ps.setString(4, requestBody.get("selectCivilState").toString().trim());
            ps.setString(5, requestBody.get("selectGender").toString().trim());
            ps.setString(6, requestBody.get("birthDate").toString().trim());
            ps.setString(7, "A");
            
            r = ps.executeUpdate();            
            rs = ps.getGeneratedKeys();
            
            while (rs.next()) {                
                personId = rs.getInt(1);
            }
            
            //Cliente        
            ps = conn.prepareStatement(queryInsertCustomer.toString(), PreparedStatement.RETURN_GENERATED_KEYS);
            ps.setString(1, "C".concat(Utils.generateCodeWithDate()));
            ps.setString(2, requestBody.get("typeDoc").toString().trim());
            ps.setString(3, requestBody.get("numDoc").toString().trim());
            ps.setString(4, requestBody.get("businessName").toString().trim().toUpperCase());
            ps.setString(5, requestBody.get("address").toString().trim());
            ps.setString(6, requestBody.get("numberPhone").toString().trim());
            ps.setString(7, requestBody.get("email").toString().trim());            
            ps.setString(8, requestBody.get("sessionUser").toString().trim());
            ps.setInt(9, personId);
            ps.setInt(10, 1); /*Agregar de forma Dinamica*/
            ps.setString(11, "A");         
            
            r = ps.executeUpdate();
            
        } catch (SQLException e) {
            LOGGER.log(Level.INFO, "Error:{0}", e.getLocalizedMessage());
        } catch (Exception e) {
            LOGGER.log(Level.INFO, "Error:{0}", e.getLocalizedMessage());            
            throw new RuntimeException(e.getLocalizedMessage());
        } finally {
            try {
                if(rs != null){
                   rs.close();
                }
                if(ps != null){
                   ps.close();
                }   
                if(conn != null){
                    ConexaoDB.releaseConnection(conn);
                }
            } catch (SQLException e) {
                LOGGER.log(Level.INFO, "Error:{0}", e.getLocalizedMessage());
            }
        }  
        return r;
    }
    
    
    private void mappingRequestToValidadeEmptyOrNullPerson(Map<String,Object>requestBody){
        for (Map.Entry<String,Object>entry:requestBody.entrySet()) {
            if(mandatoryColumnsPerson().contains(entry.getKey())){
                Utils.isNullOrEmty(entry.getKey(), entry.getValue().toString());
            }
        }
        if(requestBody.get("birthDate").toString().isBlank()){
            requestBody.put("birthDate","1900-01-01");
        }
    }    

    
    private void mappingRequestToValidadeEmptyOrNullBusiness(Map<String,Object>requestBody){
        for (Map.Entry<String,Object>entry:requestBody.entrySet()) {
            if(mandatoryColumnsBusiness().contains(entry.getKey())){
                Utils.isNullOrEmty(entry.getKey(), entry.getValue().toString());
            }
        }
        if(requestBody.get("birthDate").toString().isBlank()){
            requestBody.put("birthDate","1900-01-01");
        }
    }        
    
    
    private Set<String> mandatoryColumnsBusiness(){
        Set<String> columns = new HashSet<>();
        columns.add("businessName");
        columns.add("typeDoc");
        columns.add("numDoc");
        columns.add("email");
        return columns;
    }


    private Set<String> mandatoryColumnsPerson(){
        Set<String> columns = new HashSet<>();
        columns.add("name");
        columns.add("firstName");
        columns.add("lastName");
        columns.add("typeDoc");
        columns.add("numDoc");
        columns.add("email");
        return columns;
    }    
    
}

CustomerDao

import br.com.systemweb.model.Customer;
import java.util.Map;

/**
 *
 * @author rctom
 */
public interface CustomerDao {
    public Customer getObjectByTypeDocAndNumdoc(String typeDoc, String numDoc);    
    public int saveObject(Map<String,Object>requestBody);
}

ControllerCustomer

import br.com.systemweb.constants.ConstantEnpoint;
import br.com.systemweb.constants.ConstantMenssages;
import br.com.systemweb.constants.Constants;
import br.com.systemweb.model.Employes;
import br.com.systemweb.model.dao.CustomerDao;
import br.com.systemweb.model.dao.impl.CustomerDaoImpl;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import java.io.IOException;
import java.nio.file.AccessDeniedException;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author rctom
 */
public class ControllerCustomer extends HttpServlet {

    private static final Logger LOGGER = Logger.getLogger(ControllerCustomer.class.getName());
    private ObjectMapper objectMapper;
    private CustomerDao customerDao;

    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        Map<String, Object> result = new HashMap<>();
        String pathInfo = request.getPathInfo() == null ? ConstantEnpoint.ROOT : request.getPathInfo();
        HttpSession session = request.getSession();
        Employes sessionUser = (Employes) session.getAttribute(Constants.USERLOGIN);

        try {
            if (sessionUser != null) {
                switch (pathInfo) {
                    case ConstantEnpoint.ROOT:
                        request.getRequestDispatcher(ConstantEnpoint.PAGE_SALES).forward(request, response);
                        break;
                    case ConstantEnpoint.EDIT:
                        request.getRequestDispatcher(ConstantEnpoint.PAGE_CUSTOMER_EDIT).forward(request, response);
                        break;
                    case ConstantEnpoint.SAVE:
                        if (request.getMethod().equals(ConstantEnpoint.POST)) {
                            Map<String, Object> requestBody = objectMapper.readValue(request.getReader(), Map.class);
                            requestBody.put(Constants.USERLOGIN, sessionUser.getUser().getUsername());                                                                                
                            int r = getCustomerDao().saveObject(requestBody);
                            if (r == 0) {
                                throw new Exception(ConstantMenssages.MESSAGE_VAL_400);
                            }
                        } else {
                            throw new AccessDeniedException(ConstantMenssages.MSG_PAGE_NOT_FOUND);
                        }
                        break;
                    default:
                        throw new AccessDeniedException(ConstantMenssages.MSG_PAGE_NOT_FOUND);
                }
                result.put(ConstantMenssages.STATUS_KEY, ConstantMenssages.STATUS_200);
                result.put(ConstantMenssages.MESSAGE_KEY, ConstantMenssages.MESSAGE_VAL_200);
            } else {
                throw new AccessDeniedException(ConstantMenssages.MESSAGE_VAL_404);
            }
        } catch (AccessDeniedException e) {
            LOGGER.log(Level.INFO, "ERROR: {0}", e.getMessage());
            request.setAttribute("error", e.getMessage());
            request.getRequestDispatcher(ConstantEnpoint.PAGE_NOTFOUND).forward(request, response);
        } catch (Exception e) {
            LOGGER.log(Level.INFO, "ERROR: {0}", e.getMessage());
            result.put(ConstantMenssages.STATUS_KEY, ConstantMenssages.STATUS_400);
            result.put(ConstantMenssages.MESSAGE_KEY, e.getMessage());
        }
        String resultJson = getObjectMapper().writeValueAsString(result);
        response.setContentType(ConstantMenssages.CONTEN_TYPE_JSON);
        response.setCharacterEncoding(ConstantMenssages.ENCODE_UTF8);
        response.getWriter().write(resultJson);
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

    private ObjectMapper getObjectMapper() {
        if (objectMapper == null) {
            objectMapper = new ObjectMapper();
            objectMapper.registerModule(new JavaTimeModule());
            objectMapper.enable(SerializationFeature.INDENT_OUTPUT);
            objectMapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);
        }
        return objectMapper;
    }

    private CustomerDao getCustomerDao() {
        if (customerDao == null) {
            customerDao = new CustomerDaoImpl();
        }
        return customerDao;
    }

}

O ERRO
30-Jun-2025 21:27:30.922 INFO [http-nio-8080-exec-11] br.com.systemweb.model.dao.impl.CustomerDaoImpl.saveObject Error:Cannot invoke “Object.toString()” because the return value of “java.util.Map.get(Object)” is null
30-Jun-2025 21:27:30.923 INFO [http-nio-8080-exec-11] br.com.systemweb.controller.mnto.ControllerCustomer.processRequest ERROR: Cannot invoke “Object.toString()” because the return value of “java.util.Map.get(Object)” is null

Mas o erro de compilação está te dando exatamente a explicação:

br.com.systemweb.model.dao.impl.CustomerDaoImpl.saveObject
Error:Cannot invoke “Object.toString()” because the return value of “java.util.Map.get(Object)” is null

Na classe CustomerDaoImpl, no método saveObject você está chamando o método toString() no retorno to método get de um objeto do tipo Map.

Mas o retorno desse método é null, o que acontece se você tenta acessar algum membro de um objeto null?

Atribui o retorno do get em uma variável local e verifica se ela é diferente de null antes de sair tentando invocar métodos.
requestBody.get(“typeDoc”)

Caro amigo, saudações.

Por favor, me perdoa, mas não consegui entender a sua explicação.

Então o problema não está no Java…

Vamos lá, você precisa aprender a interpretar o StackTrace do erro:

br.com.systemweb.model.dao.impl.CustomerDaoImpl.saveObject
    Error:Cannot invoke "Object.toString()" because the return value of "java.util.Map.get(Object)" is null

:memo: O que está acontecendo aqui?

  1. StackTrace é uma mensagem que o sistema mostra quando dá erro.
    Ele indica onde no programa aconteceu o problema e qual é o problema.
  2. Aqui ele diz:
br.com.systemweb.model.dao.impl.CustomerDaoImpl.saveObject

:arrow_right: Isso significa:
O erro aconteceu dentro do método chamado saveObject, que está na classe CustomerDaoImpl do pacote br.com.systemweb.model.dao.impl.

  1. Qual foi o erro?
Cannot invoke "Object.toString()" because the return value of "java.util.Map.get(Object)" is null

:arrow_right: Em português simples:

  • O programa tentou pegar um valor dentro de um mapa (Map) usando a função get().
  • Mas esse valor não existia (era null).
  • Mesmo assim, ele tentou chamar toString() nesse valor.
  • E não é possível rodar nenhum método em algo que é null

Então dá uma olhada na implementação do seu método saveObject, pois em algum lugar você está pegando um objeto de dentro de um map, esse objeto está null e mesmo assim você está tentando chamar o método toString() dele.

Pra ser mais explícito, o erro está nesse trecho:

        if (requestBody.get("typeDoc").toString().equals("6")){
            mappingRequestToValidadeEmptyOrNullBusiness(requestBody);
        } else {
            mappingRequestToValidadeEmptyOrNullPerson(requestBody);
        }
        
        //Validar Número do Documento Informado
        Utils.validTypeAndNumberDoc(requestBody.get("typeDoc").toString(), requestBody.get("numDoc").toString());

Caro amigo, Ricardo.

saudações.

O engraçado que os campos necessários, não são passados como NULL, o usuário precisa informar.

        if(requestBody.get("typeDoc").toString().equals("6")){
            //Cadastra Pessoa Jurídica
            //Chama a validação dos campos necessários
            mappingRequestToValidadeEmptyOrNullBusiness(requestBody);         
        } else {
            //Cadastra Pessoa Física
            //Chama a validação dos campos necessários
            mappingRequestToValidadeEmptyOrNullPerson(requestBody);         
        }
        
        //Validar Número do Documento Informado
        Utils.validTypeAndNumberDoc(requestBody.get("typeDoc").toString(), requestBody.get("numDoc").toString());
             

    private void mappingRequestToValidadeEmptyOrNullPerson(Map<String,Object>requestBody){
        for (Map.Entry<String,Object>entry:requestBody.entrySet()) {
            if(mandatoryColumnsPerson().contains(entry.getKey())){
                Utils.isNullOrEmty(entry.getKey(), entry.getValue().toString());
            }
        }
        if(requestBody.get("birthDate").toString().isBlank()){
            requestBody.put("birthDate","1900-01-01");
        }
    }    

    
    private void mappingRequestToValidadeEmptyOrNullBusiness(Map<String,Object>requestBody){
        for (Map.Entry<String,Object>entry:requestBody.entrySet()) {
            if(mandatoryColumnsBusiness().contains(entry.getKey())){
                Utils.isNullOrEmty(entry.getKey(), entry.getValue().toString());
            }
        }
        if(requestBody.get("birthDate").toString().isBlank()){
            requestBody.put("birthDate","1900-01-01");
        }
    }        
    
    
    private Set<String> mandatoryColumnsBusiness(){
        Set<String> columns = new HashSet<>();
        columns.add("businessName");
        columns.add("typeDoc");
        columns.add("numDoc");
        columns.add("email");
        return columns;
    }


    private Set<String> mandatoryColumnsPerson(){
        Set<String> columns = new HashSet<>();
        columns.add("name");
        columns.add("firstName");
        columns.add("lastName");
        columns.add("typeDoc");
        columns.add("numDoc");
        columns.add("email");
        return columns;
    }    


Reli todo o Código, devo estar cego, não consegui achar.

Com sua permissão e autorização, teria a possibilidade de encaminhar os Fonte caso o amigo possa me ajudar, para me ajudar a Identificar esse erro.

Grato,

Cesar

Use variáveis locais para armazenar o retorno do requestBody.get("alguma coisa") e só chame o toString() se a variável for != null.

Caro amigo, Ricardo.

saudações.

Agradeço sua orientação e ajuda, mas infelizmente não consigo identificar o erro, após várias tentativa para solucionar.

Fiz vários teste, reescrever o Código e sem sucesso.

Programo em PHP+Codeginter, acontece erros mas é de fácil identificação,
mas o JAVA nossa, não entendo.

Grato,

Cesar