Skip to content

Commit

Permalink
Merge pull request #293 from jardelnovaes/develop
Browse files Browse the repository at this point in the history
Tratamento de certificados na camada TLS/SSL em multithreading
  • Loading branch information
Samuel-Oliveira authored Dec 1, 2024
2 parents 9aaef72 + cc86d85 commit 227b44b
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 8 deletions.
9 changes: 6 additions & 3 deletions src/main/java/br/com/swconsultoria/nfe/DistribuicaoDFe.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package br.com.swconsultoria.nfe;

import br.com.swconsultoria.certificado.exception.CertificadoException;
import br.com.swconsultoria.nfe.dom.ConfiguracoesNfe;
import br.com.swconsultoria.nfe.dom.enuns.ConsultaDFeEnum;
import br.com.swconsultoria.nfe.dom.enuns.DocumentoEnum;
Expand All @@ -10,6 +11,7 @@
import br.com.swconsultoria.nfe.schema.retdistdfeint.RetDistDFeInt;
import br.com.swconsultoria.nfe.util.ConstantesUtil;
import br.com.swconsultoria.nfe.util.ObjetoUtil;
import br.com.swconsultoria.nfe.util.StubUtil;
import br.com.swconsultoria.nfe.util.WebServiceUtil;
import br.com.swconsultoria.nfe.util.XmlNfeUtil;
import br.com.swconsultoria.nfe.wsdl.NFeDistribuicaoDFe.NFeDistribuicaoDFeStub;
Expand Down Expand Up @@ -85,8 +87,9 @@ static RetDistDFeInt consultaNfe(ConfiguracoesNfe config, PessoaEnum tipoPessoa,
NFeDistribuicaoDFeStub.NfeDistDFeInteresse distDFeInteresse = new NFeDistribuicaoDFeStub.NfeDistDFeInteresse();
distDFeInteresse.setNfeDadosMsg(dadosMsgType0);

NFeDistribuicaoDFeStub stub = new NFeDistribuicaoDFeStub(
WebServiceUtil.getUrl(config, DocumentoEnum.NFE, ServicosEnum.DISTRIBUICAO_DFE));
String url = WebServiceUtil.getUrl(config, DocumentoEnum.NFE, ServicosEnum.DISTRIBUICAO_DFE);
NFeDistribuicaoDFeStub stub = new NFeDistribuicaoDFeStub(url);
StubUtil.configuraHttpClient(stub, config, url);

// Timeout
if (ObjetoUtil.verifica(config.getTimeout()).isPresent()) {
Expand All @@ -100,7 +103,7 @@ static RetDistDFeInt consultaNfe(ConfiguracoesNfe config, PessoaEnum tipoPessoa,
return XmlNfeUtil.xmlToObject(result.getNfeDistDFeInteresseResult().getExtraElement().toString(),
RetDistDFeInt.class);

} catch (RemoteException | XMLStreamException | JAXBException e) {
} catch (RemoteException | XMLStreamException | JAXBException | CertificadoException e) {
throw new NfeException(e.getMessage(),e);
}
}
Expand Down
14 changes: 9 additions & 5 deletions src/main/java/br/com/swconsultoria/nfe/Status.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package br.com.swconsultoria.nfe;

import br.com.swconsultoria.certificado.exception.CertificadoException;
import br.com.swconsultoria.nfe.dom.ConfiguracoesNfe;
import br.com.swconsultoria.nfe.dom.enuns.DocumentoEnum;
import br.com.swconsultoria.nfe.dom.enuns.EstadosEnum;
Expand All @@ -8,6 +9,7 @@
import br.com.swconsultoria.nfe.schema_4.consStatServ.TConsStatServ;
import br.com.swconsultoria.nfe.schema_4.retConsStatServ.TRetConsStatServ;
import br.com.swconsultoria.nfe.util.ConstantesUtil;
import br.com.swconsultoria.nfe.util.StubUtil;
import br.com.swconsultoria.nfe.util.WebServiceUtil;
import br.com.swconsultoria.nfe.util.XmlNfeUtil;
import br.com.swconsultoria.nfe.wsdl.NFeStatusServico4.NFeStatusServico4Stub;
Expand Down Expand Up @@ -73,14 +75,16 @@ static TRetConsStatServ statusServico(ConfiguracoesNfe config, DocumentoEnum tip

OMElement ome = AXIOMUtil.stringToOM(xml);

String url = WebServiceUtil.getUrl(config, tipoDocumento, ServicosEnum.STATUS_SERVICO);

if (EstadosEnum.MS.equals(config.getEstado())) {
br.com.swconsultoria.nfe.wsdl.NFeStatusServico4MS.NFeStatusServico4Stub.NfeDadosMsg dadosMsg =
new br.com.swconsultoria.nfe.wsdl.NFeStatusServico4MS.NFeStatusServico4Stub.NfeDadosMsg();
dadosMsg.setExtraElement(ome);

br.com.swconsultoria.nfe.wsdl.NFeStatusServico4MS.NFeStatusServico4Stub stub =
new br.com.swconsultoria.nfe.wsdl.NFeStatusServico4MS.NFeStatusServico4Stub(
WebServiceUtil.getUrl(config, tipoDocumento, ServicosEnum.STATUS_SERVICO));
new br.com.swconsultoria.nfe.wsdl.NFeStatusServico4MS.NFeStatusServico4Stub(url);
StubUtil.configuraHttpClient(stub, config, url);

br.com.swconsultoria.nfe.wsdl.NFeStatusServico4MS.NFeStatusServico4Stub.NfeResultMsg result = stub.nfeStatusServicoNF(dadosMsg);

Expand All @@ -90,16 +94,16 @@ static TRetConsStatServ statusServico(ConfiguracoesNfe config, DocumentoEnum tip
NFeStatusServico4Stub.NfeDadosMsg dadosMsg = new NFeStatusServico4Stub.NfeDadosMsg();
dadosMsg.setExtraElement(ome);

NFeStatusServico4Stub stub = new NFeStatusServico4Stub(
WebServiceUtil.getUrl(config, tipoDocumento, ServicosEnum.STATUS_SERVICO));
NFeStatusServico4Stub stub = new NFeStatusServico4Stub(url);
StubUtil.configuraHttpClient(stub, config, url);

NFeStatusServico4Stub.NfeResultMsg result = stub.nfeStatusServicoNF(dadosMsg);

log.info("[XML-RETORNO]: " + result.getExtraElement().toString());
return XmlNfeUtil.xmlToObject(result.getExtraElement().toString(), TRetConsStatServ.class);
}

} catch (RemoteException | XMLStreamException | JAXBException e) {
} catch (RemoteException | XMLStreamException | JAXBException | CertificadoException e) {
throw new NfeException(e.getMessage(),e);
}
}
Expand Down
36 changes: 36 additions & 0 deletions src/main/java/br/com/swconsultoria/nfe/util/StubUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package br.com.swconsultoria.nfe.util;

import br.com.swconsultoria.certificado.Certificado;
import br.com.swconsultoria.certificado.CertificadoService;
import br.com.swconsultoria.certificado.exception.CertificadoException;
import br.com.swconsultoria.nfe.dom.ConfiguracoesNfe;
import org.apache.axis2.client.Stub;
import org.apache.axis2.transport.http.HTTPConstants;
import org.apache.commons.httpclient.HttpClient;

public class StubUtil {

/**
*
* Configura o stub para usar certificado e HttpClient específicos, desde que esteja com
* configuracoesNfe.getCertificado().isModoMultithreading() ativo.
*
* @param stub {@link org.apache.axis2.client.Stub} que terá a conexão configurada para o {@link org.apache.commons.httpclient.HttpClient}
* específico do certificado.
* @param configuracoesNfe {@link br.com.swconsultoria.nfe.dom.ConfiguracoesNfe} config que possui o {@link br.com.swconsultoria.certificado.Certificado}
* que será configurado no HttpClient.
* @param url {@link String} url que será executada.
* @throws CertificadoException
*/
public static void configuraHttpClient(Stub stub, ConfiguracoesNfe configuracoesNfe, String url) throws CertificadoException {
Certificado certificado = configuracoesNfe.getCertificado();
if (certificado.isModoMultithreading()) {
HttpClient httpClient = ObjetoUtil.verifica(configuracoesNfe.getCacert()).isPresent()
? CertificadoService.getHttpsClient(certificado, url, configuracoesNfe.getCacert())
: CertificadoService.getHttpsClient(certificado, url);

stub._getServiceClient().getOptions().setProperty(HTTPConstants.CACHED_HTTP_CLIENT, httpClient);
stub._getServiceClient().getOptions().setProperty(HTTPConstants.CUSTOM_PROTOCOL_HANDLER, httpClient.getHostConfiguration().getProtocol());
}
}
}

0 comments on commit 227b44b

Please sign in to comment.