demoiselle / signer

Repositório que contém os componentes para facilitar a implementação de assinatura digital nos padrões da ICP-BRASIL
https://www.frameworkdemoiselle.gov.br/v3/signer/
GNU Lesser General Public License v3.0
145 stars 72 forks source link

Erro ao tentar carregar objeto ICPBrasilCertificate de um certificado de equipamento que não possui dados no campo BIRTH_DATE #359

Closed danysouzam closed 1 year ago

danysouzam commented 1 year ago

Ao tentar carregar o objeto ICPBrasilCertificate de um certificado de equipamento que não possui dados no campo BIRTH_DATE ocorre o erro abaixo:

br.gov.serpro.denatran.utils.exceptions.ParametroInvalidoException: CERTIFICADO_ERRO_EXTRAIR at br.gov.serpro.portalservicos.acesso.util.CertificadoUtils.getCertificado(CertificadoUtils.java:62) at br.gov.serpro.portalservicos.acesso.service.LoginService.autorizarCertificadoPJ(LoginService.java:249) at br.gov.serpro.portalservicos.acesso.controller.LoginCertificadoController.loginCertificadoPJ(LoginCertificadoController.java:43) at ... Caused by: org.demoiselle.signer.core.exception.CertificateCoreException: Ocorreu um erro ao recuperar o valor do campo: dataNascimento at org.demoiselle.signer.core.extension.ICPBrasilExtensionLoader.load(ICPBrasilExtensionLoader.java:292) at org.demoiselle.signer.core.CertificateManager.load(CertificateManager.java:180) at org.demoiselle.signer.core.CertificateManager.load(CertificateManager.java:202) at br.gov.serpro.portalservicos.acesso.util.CertificadoUtils.getCertificado(CertificadoUtils.java:60) ... 107 more Caused by: java.lang.NullPointerException: Cannot invoke "java.util.Date.toString()" because the return value of "org.demoiselle.signer.core.extension.ICPBRCertificateEquipment.getBirthDate()" is null at org.demoiselle.signer.core.extension.ICPBrasilExtensionLoader.load(ICPBrasilExtensionLoader.java:167) ... 110 more

Na classe ICPBrasilExtensionLoader, método load é feito um toString() no campo BIRTH_DATE quando é certificado de equipamento, conforme o trecho abaixo:

case BIRTH_DATE: if (cert.hasCertificatePF()) { keyValue = cert.getICPBRCertificatePF().getBirthDate(); } else { if (cert.hasCertificatePJ()) { keyValue = cert.getICPBRCertificatePJ().getBirthDate(); } else { if (cert.hasCertificateEquipment()) { keyValue = cert.getICPBRCertificateEquipment().getBirthDate().toString(); } else { keyValue = ""; } } } break;

Acredito que seria necessário efetuar uma verificação se o campo BIRTH_DATE é diferente de nulo antes de tentar convertê-lo para String com o toString().