• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

wmixvideo / nfe / #9665

31 Aug 2026 12:30PM UTC coverage: 51.298% (+0.3%) from 51.007%
#9665

push

web-flow
Implementação migração do Axis2 para Httpclient5 - Todos modulos documentos fiscais (#1184)

* Javadoc Warnings invalid input: '<' e '&' literais

* Javadoc Warnings invalid input: '<' e '&' literais

* Refatoração de chaves para suportar CNPJ alfanumérico (NT 2026.004)

* Normaliza char para maiusculo na chave

O cálculo do DV usa valores[i - 1] - '0'. Se a chave vier com letras minúsculas (o que é aceito por alguns validadores de CNPJ na base), o DV calculado muda (ex.: 'a' - '0' != 'A' - '0'), gerando falsos negativos/positivos. Normalize o caractere para maiúsculo antes de converter para o valor numérico.

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>

* Remove unused Javadoc references from stub classes
[Javadoc Warnings Tag @see: reference not found

* Implementa DFHttpClient e DFSoapEnvelope para migração do Axis2 para
httpclient5

* Add extra hardening against XXE in DFSoapEnvelope

* Clarify timeout mapping in DFHttpClient to maintain compatibility with
Axis2

* Add unit tests for DFHttpClient to validate SOAP request handling

* Add author annotations

* Alinhar o mapeamento de timeout no DFHttpClient

* Implementação migração do Axis2 para Httpclient5 - Envio Lote

* Migrate web services from Axis2 to HttpClient5 to nfe

* Add exception handling for HTTP client initialization in
WSDistribuicaoNFe

* Refactor web service methods to include specific exception handling for
IOException and DFSoapFaultException

* Add specific exception handling for IOException and DFSoapFaultException
in web service methods

* Implement Closeable interface for web service classes and add close
method to manage HTTP client connections

* Add unit tests for WSFacade to verify construction and closure behavior
after migration to HttpClient5

* Add connection management settings to DFHttpClient to mitigate
keep-alive issues

* Handle null HttpEntity in DFHttpClient response processing to prevent
NullPointerException

* E... (continued)

184 of 265 new or added lines in 21 files covered. (69.43%)

9 existing lines in 8 files now uncovered.

15291 of 29808 relevant lines covered (51.3%)

0.51 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

64.71
/src/main/java/com/fincatto/documentofiscal/DFConfig.java
1
package com.fincatto.documentofiscal;
2

3
import com.fincatto.documentofiscal.utils.DFPersister;
4
import com.fincatto.documentofiscal.utils.DFSocketFactory;
5

6
import org.simpleframework.xml.core.Persister;
7

8
import java.security.KeyStore;
9
import java.security.KeyStoreException;
10
import java.util.TimeZone;
11

12
/**
13
 * @author Caio Configuracao basica do sistema de documentos fiscais.
14
 */
15
public abstract class DFConfig {
1✔
16
    
17
    /**
18
     * @deprecated {@link TimeZone} e mutavel - qualquer codigo com acesso a esta constante pode
19
     * alterar o fuso compartilhado por toda a aplicacao. Use {@link #getTimezoneSP()}, que
20
     * devolve uma copia defensiva.
21
     */
22
    @Deprecated
23
    public static final TimeZone TIMEZONE_SP = TimeZone.getTimeZone("America/Sao_Paulo");
1✔
24
    private volatile Persister persister;
25

26
    /**
27
     * Fuso horario de Sao Paulo (America/Sao_Paulo), em copia defensiva.
28
     *
29
     * @return copia do TimeZone de Sao Paulo, segura para modificacao pelo chamador.
30
     */
31
    public static TimeZone getTimezoneSP() {
NEW
32
        return TimeZone.getTimeZone("America/Sao_Paulo");
×
33
    }
34
    
35
    /**
36
     * Indica o ambiente de trabalho, se em producao ou homologacao.
37
     *
38
     * @return Ambiente de trabalho.
39
     */
40
    public DFAmbiente getAmbiente() {
41
        return DFAmbiente.HOMOLOGACAO;
1✔
42
    }
43
    
44
    /**
45
     * Indica o modelo do documento fiscal
46
     *
47
     * @return Modelo documento fiscal.
48
     */
49
    public DFModelo getModelo() {
50
        return DFModelo.NFE;
1✔
51
    }
52
    
53
    /**
54
     * Unidade da federacao do emissor das notas.
55
     *
56
     * @return Unidade da federacao do emissor.
57
     */
58
    public abstract DFUnidadeFederativa getCUF();
59
    
60
    /**
61
     * KeyStore contendo o certificado pessoal do emissor. <br>
62
     * Esse certificado e fornecido por uma autoridade certificadora. <br>
63
     * Em caso de duvidas, consulte seu contador.
64
     *
65
     * @return KeyStore do certificado pessoal.
66
     * @throws KeyStoreException Caso nao consiga carregar o KeyStore.
67
     */
68
    public abstract KeyStore getCertificadoKeyStore() throws KeyStoreException;
69
    
70
    /**
71
     * Retorna o nome do alias do certificado dentro do {@link KeyStore} retornado por {@link #getCertificadoKeyStore()}. Caso seja retornado {@code null}, sera utilizado o primeiro alias do {@link KeyStore}.
72
     *
73
     * @return o nome do alias do certificado ou {@code null}
74
     */
75
    public String getCertificadoAlias() {
76
        return null;
×
77
    }
78
    
79
    /**
80
     * Senha do certificado pessoal do emissor, contido dentro do KeyStore do certificado.
81
     *
82
     * @return Senha do certificado.
83
     * @see #getCertificadoKeyStore()
84
     */
85
    public abstract String getCertificadoSenha();
86
    
87
    /**
88
     * KeyStore contendo a cadeia de certificados da SEFAZ de destino. <br>
89
     * Para gerar a cadeia, use o utilitario fornecido com a biblioteca:<br>
90
     * FileUtils.writeByteArrayToFile(new File("/tmp/producao.cacerts"), NFGeraCadeiaCertificados.geraCadeiaCertificados(NFAmbiente.PRODUCAO, "senha"));
91
     *
92
     * @return KeyStore da cadeia de certificados.
93
     * @throws KeyStoreException Caso nao consiga carregar o KeyStore.
94
     */
95
    public abstract KeyStore getCadeiaCertificadosKeyStore() throws KeyStoreException;
96
    
97
    /**
98
     * Senha da cadeia de certificados, contida dentro do KeyStore da cadeia.
99
     *
100
     * @return Senha da cadeia de certificados.
101
     * @see #getCadeiaCertificadosKeyStore()
102
     */
103
    public abstract String getCadeiaCertificadosSenha();
104
    
105
    /**
106
     * Protocolo de SSL, usado pela SEFAZ para receber as notas.
107
     * Habilita mais de um parametro pra ssl.
108
     *
109
     * @return Protocolo SSL da SEFAZ de origem.
110
     */
111
    public String[] getSSLProtocolos() {
112
        return new String[]{"TLSv1.2"};
1✔
113
    }
114

115
    /**
116
     * Timeout a ser utilizado em cada requisição feita ao SEFAZ de origem.
117
     * Deve ser maior que zero, se não, será utilizado {@link DFSocketFactory#TIMEOUT_PADRAO_EM_MILLIS}
118
     *
119
     * @return timeout da requisição em millisegundos
120
     */
121
    public int getTimeoutRequisicaoEmMillis() {
122
        return DFSocketFactory.TIMEOUT_PADRAO_EM_MILLIS;
1✔
123
    }
124

125
    /**
126
     * Timeout do socket
127
     * Deve ser zero ou maior, se não, será utilizado {@link DFSocketFactory#SO_TIMEOUT_PADRAO_EM_MILLIS}
128
     * @return timeout da requisição em millisegundos
129
     */
130
    public int getSoTimeoutEmMillis() {
131
        return DFSocketFactory.SO_TIMEOUT_PADRAO_EM_MILLIS;
1✔
132
    }
133

134
    /**
135
     * Numero maximo de conexoes simultaneas mantidas no pool de {@link com.fincatto.documentofiscal.utils.DFHttpClient}
136
     * para uma mesma rota (o mesmo host/porta de um autorizador da SEFAZ). O default do
137
     * httpclient5 quando nao configurado explicitamente e 5 - baixo demais para emissao de
138
     * documentos fiscais em lote com varias requisicoes concorrentes contra o mesmo autorizador.
139
     *
140
     * @return numero maximo de conexoes por rota.
141
     */
142
    public int getMaxConexoesPorRota() {
143
        return 20;
1✔
144
    }
145

146
    /**
147
     * Numero maximo de conexoes simultaneas mantidas no pool de {@link com.fincatto.documentofiscal.utils.DFHttpClient},
148
     * somando todas as rotas (autorizadores) usadas por esta instancia. O default do
149
     * httpclient5 quando nao configurado explicitamente e 25.
150
     *
151
     * @return numero maximo de conexoes no pool.
152
     */
153
    public int getMaxConexoesTotal() {
154
        return 40;
1✔
155
    }
156

157
    /**
158
     * Tempo maximo de espera por uma conexao livre do pool de {@link com.fincatto.documentofiscal.utils.DFHttpClient}
159
     * antes de falhar com timeout, quando todas as conexoes disponiveis (ate
160
     * {@link #getMaxConexoesPorRota()}) estao em uso. O default do httpclient5 quando nao
161
     * configurado explicitamente e 3 minutos - alto demais para nao reter threads da aplicacao
162
     * sob pico de carga.
163
     *
164
     * @return timeout de espera por uma conexao do pool, em milissegundos.
165
     */
166
    public int getTimeoutFilaConexaoEmMillis() {
167
        return 10_000;
1✔
168
    }
169

170
    /**
171
     * Retorna o timezone a ser usado no sistema.
172
     * Por padrao, vai usar o timezone default da maquina.
173
     *
174
     * @return TimeZone a ser utilizado.
175
     */
176
    public TimeZone getTimeZone() {
177
        return TimeZone.getDefault();
1✔
178
    }
179
    
180
    /**
181
     * Retorna o persister a ser usado para serializacao dos objetos.
182
     * Por padrao vai usar o {@link DFPersister} com o {@link TimeZone} definido em {@link #getTimeZone()}.
183
     *
184
     * @return Persister a ser utilizado.
185
     */
186
    public Persister getPersister() {
187
        if (this.persister == null) {
×
188
            this.persister = new DFPersister();
×
189
        }
190
        return this.persister;
×
191
    }
192
    
193
    /**
194
     * Codigo de Seguranca do Responsavel Tecnico - CSRT(NT 2018.005)
195
     *
196
     * @return Codigo de seguranca do responsavel tecnico.
197
     * @see <a href="http://www.nfe.fazenda.gov.br/portal/informe.aspx?ehCTG=false&Informe=hDS5co/qWOc=">Informativo(acessado em 10/04/19 as 11:30)</a>
198
     * @see <a href="http://www.nfe.fazenda.gov.br/portal/exibirArquivo.aspx?conteudo=j/im9zMlcIE=">Baixar PDF(acessado em 10/04/19 as 11:30)</a>
199
     */
200
    public String getCSRT() {
201
        return "";
×
202
    }
203
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc