Details | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 695 | blopes | 1 | /** |
| 2 | * |
||
| 3 | */ |
||
| 4 | package 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 | logger.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 | logger.info("[URL]: " + tipoServico + ": " + url); |
||
| 119 | |||
| 120 | return url; |
||
| 121 | |||
| 122 | } catch (IOException e) { |
||
| 123 | throw new NfeException(e.getMessage(),e); |
||
| 124 | } |
||
| 125 | |||
| 126 | } |
||
| 127 | } |