Subversion Repositories Integrator Subversion

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
414 espaco 1
/**
2
 *
3
 */
4
package br.com.swconsultoria.nfe.util;
5
 
6
import br.com.swconsultoria.nfe.dom.ConfiguracoesNfe;
7
import br.com.swconsultoria.nfe.dom.enuns.AmbienteEnum;
8
import br.com.swconsultoria.nfe.dom.enuns.DocumentoEnum;
9
import br.com.swconsultoria.nfe.dom.enuns.EstadosEnum;
10
import br.com.swconsultoria.nfe.dom.enuns.ServicosEnum;
11
import br.com.swconsultoria.nfe.exception.NfeException;
12
import lombok.extern.java.Log;
13
import org.ini4j.Wini;
14
 
15
import java.io.*;
16
import java.util.logging.Logger;
17
 
18
/**
19
 * @author Samuel Oliveira
20
 *
21
 * Classe responsávelem montar as URL's de consulta de serviços do SEFAZ.
22
 */
23
@Log
24
public class WebServiceUtil {
25
 
26
    private final static Logger logger = Logger.getLogger(WebServiceUtil.class.getName());
27
 
28
    /**
29
     * Retorna a URL para consulta de operações do SEFAZ.<br>
30
     *
31
     * <p>
32
     * O método carrega o arquivo <b>WebServicesNfe.ini</b> que contêm as
33
     * URL's de operações do SEFAZ, busca pela seção no arquivo .ini que
34
     * corresponda com os argumentos <b>tipo</b>, <b>config</b>, <b>servico</b>
35
     * e retorna essa URL.
36
     * </p>
37
     *
38
     * @param config interface que contêm os dados necessários para a comunicação.
39
     * @param tipoDocumento DocumentoEnum.NFE e ConstantesUtil.NFCE
40
     * @param tipoServico é a operação que se deseja fazer.<br>
41
     * Ex.: para consultas status deserviço no ambiente de produção
42
     * use ServicosEnum.NfeStatusServico_4.00
43
     *
44
     * @return url String que representa a URL do serviço.
45
     * @throws NfeException
46
     *
47
     * @see ConfiguracoesNfe
48
     * @see ConstantesUtil
49
     **/
50
    public static String getUrl(ConfiguracoesNfe config, DocumentoEnum tipoDocumento, ServicosEnum tipoServico) throws NfeException {
51
 
52
        try {
53
 
54
            String secao = tipoDocumento.getTipo() + "_" + config.getEstado() + "_"
55
                    + (config.getAmbiente().equals(AmbienteEnum.HOMOLOGACAO) ? "H" : "P");
56
 
57
            InputStream is;
58
            if (ObjetoUtil.verifica(config.getArquivoWebService()).isPresent()) {
59
                File arquivo = new File(config.getArquivoWebService());
60
                if (!arquivo.exists())
61
                    throw new FileNotFoundException("Arquivo WebService" + config.getArquivoWebService() + " não encontrado");
62
                is = new FileInputStream(arquivo);
63
                log.info("[ARQUIVO INI CUSTOMIZADO]: " + config.getArquivoWebService());
64
            } else {
65
                is = WebServiceUtil.class.getResourceAsStream("/WebServicesNfe.ini");
66
            }
67
 
68
            Wini ini = new Wini();
69
            ini.getConfig().setLowerCaseOption(true);
70
            ini.load(is);
71
            is.close();
72
            String url = ini.get(secao, "usar");
73
 
74
            //URLS CONSULTA CADASTO
75
            if (tipoServico.equals(ServicosEnum.CONSULTA_CADASTRO) && (
76
                    config.getEstado().equals(EstadosEnum.PA) ||
77
                            config.getEstado().equals(EstadosEnum.AM) ||
78
                            config.getEstado().equals(EstadosEnum.AL) ||
79
                            config.getEstado().equals(EstadosEnum.AP) ||
80
                            config.getEstado().equals(EstadosEnum.DF) ||
81
                            config.getEstado().equals(EstadosEnum.PI) ||
82
                            config.getEstado().equals(EstadosEnum.RJ) ||
83
                            config.getEstado().equals(EstadosEnum.RO) ||
84
                            config.getEstado().equals(EstadosEnum.SE) ||
85
                            config.getEstado().equals(EstadosEnum.TO))) {
86
                throw new NfeException("Estado não possui Consulta Cadastro.");
87
                // URLS de ambiente nacional
88
            } else if (tipoServico.equals(ServicosEnum.DISTRIBUICAO_DFE)
89
                    || tipoServico.equals(ServicosEnum.MANIFESTACAO)
90
                    || tipoServico.equals(ServicosEnum.EPEC)) {
91
                secao = config.getAmbiente().equals(AmbienteEnum.HOMOLOGACAO) ? "NFe_AN_H" : "NFe_AN_P";
92
 
93
            } else if (!tipoServico.equals(ServicosEnum.URL_CONSULTANFCE)
94
                    && !tipoServico.equals(ServicosEnum.URL_QRCODE) && ObjetoUtil.verifica(url).isPresent()) {
95
                secao = url;
96
            } else if (config.isContigenciaSVC()) {
97
                // SVC-RS
98
                if (config.getEstado().equals(EstadosEnum.GO) || config.getEstado().equals(EstadosEnum.AM)
99
                        || config.getEstado().equals(EstadosEnum.BA) || config.getEstado().equals(EstadosEnum.CE)
100
                        || config.getEstado().equals(EstadosEnum.MA) || config.getEstado().equals(EstadosEnum.MS)
101
                        || config.getEstado().equals(EstadosEnum.MT) || config.getEstado().equals(EstadosEnum.PA)
102
                        || config.getEstado().equals(EstadosEnum.PE) || config.getEstado().equals(EstadosEnum.PI)
103
                        || config.getEstado().equals(EstadosEnum.PR)) {
104
                    secao = tipoDocumento.getTipo() + "_SVRS_"
105
                            + (config.getAmbiente().equals(AmbienteEnum.HOMOLOGACAO) ? "H" : "P");
106
                    // SVC-AN
107
                } else {
108
                    secao = tipoDocumento.getTipo() + "_SVC-AN_"
109
                            + (config.getAmbiente().equals(AmbienteEnum.HOMOLOGACAO) ? "H" : "P");
110
                }
111
            }
112
 
113
            url = ini.get(secao, tipoServico.getServico().toLowerCase());
114
 
115
            ObjetoUtil.verifica(url).orElseThrow(() -> new NfeException(
116
                    "WebService de " + tipoServico + " não encontrado para " + config.getEstado().getNome()));
117
 
118
            log.info("[URL]: " + tipoServico + ": " + url);
119
 
120
            return url;
121
 
122
        } catch (IOException e) {
123
            throw new NfeException(e.getMessage(),e);
124
        }
125
 
126
    }
127
}