Jump to content

dev botao

Perde informação ao ler o buffer de retorno em container Docker Java e Linux


Trier Sistemas
Go to solution Solved by antonio.carlos,
  • Este tópico foi criado há 758 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro

Tenho uma aplicação Java usando a ACBr.
Ao ler o retorno das funções NFE_Consultar e NFE_Cancelar local na minha IDE Eclipse, SO Windows 64, o resultado vem correto, porém quando rodo a aplicação num Docker em Linux os dados parecem corrompidos e com caracteres especiais de controle.

Segue imagem em anexo comparando os dois resultados, no Docker em Linux (Ubuntu) e executando direto na IDE me máquina Windows.
Sabem dizer o que pode ser a causa disso?

Estou me baseando nesse fonte: http://svn.code.sf.net/p/acbr/code/trunk2/Projetos/ACBrLib/Demos/Java/ACBr Common/src/com/acbr/ACBrLibBase.java

na rotina "processResult".
Também não entendi direito porque nessa linha, aumenta em 30% o tamanho do buffer: 

int tamanhoBuffer = (int)(Math.round(bLen * 1.3));

Problema no resultado de cancelar nota em container Docker Linux.png

Link to comment
Share on other sites

  • Consultores
18 minutos atrás, Trier Sistemas disse:

Segue o conteúdo do arquivo solicitado em anexo.

ACBrDotIni.txt 54 kB · 1 download

Aparentemente correto CodificacaoResposta=0 (UTF-8)
Tem os logs ? da ACBrLib, pode anexar por favor.
se possível, atualize versão da ACBrLib também.

Com o programa exemplo ocorre o mesmo comportamento ?

Link to comment
Share on other sites

  • Membros Pro

A lib está atualizada

[Principal]
TipoResposta=0
CodificacaoResposta=0
LogNivel=4
LogPath=

[Versao]
ACBrLib=0.0.2
ACBrLibNFE=0.4.6.197
 

E os logs, mesmo eu atribuindo um valor para "LogNivel" e "LogPath", nunca grava log, inclusive a chave "LogPath" sempre fica sem valor, mesmo que eu atribua um valor via código Java.

Acessando o diretório Docs da pra ver o conteúdo do XML que eu suponho seja de retorno de uma chamada "NFE_Consultar":

root@8141cd808ca1:/opt/java/openjdk/bin/Docs# cat 41220929728590000155650030000010031953310687-sit.xml
<?xml version="1.0" encoding="UTF-8"?><retConsSitNFe versao='4.00' xmlns='http://www.portalfiscal.inf.br/nfe'><tpAmb>2</tpAmb><verAplic>PR-v4_4_18</verAplic><cStat>100</cStat><xMotivo>Autorizado o uso da NF-e</xMotivo><cUF>41</cUF><dhRecbto>2022-09-06T17:37:17-03:00</dhRecbto><chNFe>41220929728590000155650030000010031953310687</chNFe><protNFe versao='4.00'><infProt Id='ID141220000233084'><tpAmb>2</tpAmb><verAplic>PR-v4_4_18</verAplic><chNFe>41220929728590000155650030000010031953310687</chNFe><dhRecbto>2022-09-05T07:04:44-03:00</dhRecbto><nProt>141220000233084</nProt><digVal>Qaa7Gk48sV89AN50DMSQvzGqEls=</digVal><cStat>100</cStat><xMotivo>Autorizado o uso da NF-e</xMotivo></infProt></protNFe></retConsSitNFe>

 

ACBrDotIni.txt

Edited by Trier Sistemas
Link to comment
Share on other sites

  • Consultores
3 minutos atrás, Trier Sistemas disse:

A lib está atualizada

[Principal]
TipoResposta=0
CodificacaoResposta=0
LogNivel=4
LogPath=

[Versao]
ACBrLib=0.0.2
ACBrLibNFE=0.4.6.197
 

E os logs, mesmo eu atribuindo um valor para "LogNivel" e "LogPath", nunca grava log, inclusive a chave "LogPath" sempre fica sem valor, mesmo que eu atribua um valor via código Java.

 

ACBrDotIni.txt 54 kB · 1 download

você tem que chamar método gravarvalor
https://acbr.sourceforge.io/ACBrLib/NFE_ConfigGravarValor.html

depois 
https://acbr.sourceforge.io/ACBrLib/NFE_ConfigGravar.html

igual esta no programa exemplo:

try {
            // Altera as config de log
            Path pathLog = Paths.get(System.getProperty("user.dir"), "Log");
            if (!Files.isDirectory(pathLog)) {
                pathLog.toFile().mkdirs();
            }

            acbrNFe.configGravarValor(ACBrSessao.Principal, "LogNivel", 4);
            acbrNFe.configGravarValor(ACBrSessao.Principal, "LogPath", pathLog.toString());
            acbrNFe.configGravar();

            loadConfig();
        } catch (Exception ex) {
            Logger.getLogger(FrmMain.class.getName()).log(Level.SEVERE, null, ex);
        }

 

Link to comment
Share on other sites

  • Membros Pro

Fiz exatamente como sua sugestão, até cria a pasta Log, porém vazia. Dei permissão de escrita na pasta, mas mesmo assim sempre vazia.
Chamei as rotinas:

- NFE_Consultar

- NFE_Cancelar

[Principal]
TipoResposta=0
CodificacaoResposta=0
LogNivel=4
LogPath=/Log

[Versao]
ACBrLib=0.0.2
ACBrLibNFE=0.4.6.197

Logs_ACBr.png

Link to comment
Share on other sites

  • Consultores
Em 06/09/2022 at 21:27, Trier Sistemas disse:

Fiz exatamente como sua sugestão, até cria a pasta Log, porém vazia. Dei permissão de escrita na pasta, mas mesmo assim sempre vazia.
Chamei as rotinas:

- NFE_Consultar

- NFE_Cancelar

[Principal]
TipoResposta=0
CodificacaoResposta=0
LogNivel=4
LogPath=/Log

[Versao]
ACBrLib=0.0.2
ACBrLibNFE=0.4.6.197

Logs_ACBr.png

preciso dos logs, para saber se essa diferença do retorno esta relacionada ao acbrlib ou não..
se quiser pode anexar o xml também, o xml pode me enviar de forma privada.. no programa exemplo você conseguiu testar ? ocorre mesmo comportamento ?

Link to comment
Share on other sites

  • Membros Pro

Segue arquivo de log, o log é gerado no diretório da JDK/bin, não respeita o caminho especificado na configuração.

Suspeito que pode ter algo relacionado a quebra de linha que separa os campos da resposta, exemplo no log:
Mensagem:[Consulta][LF]CStat=100[LF]CUF=41[LF]...

Suponho que o "[LF]" represente a quebra de linha.

 

log.txt

Edited by Trier Sistemas
Link to comment
Share on other sites

  • Consultores
1 hora atrás, Trier Sistemas disse:

Segue arquivo de log, o log é gerado no diretório da JDK/bin, não respeita o caminho especificado na configuração.

 

log.txt 8 kB · 0 downloads

Log parece com as resposta do retorno correto, a principio não é um problema na lib,  em seu ambiente no docker esta configurado corretamente ? para UTF-8 ?

Link to comment
Share on other sites

  • Membros Pro

Difícil de afirmar com certeza, mas a possibilidade do problema estar no código da ACBr que gera o retorno no formato .ini deveria ser considerado. Pois apenas mudei o "TipoResposta=2" (JSON), não mudei nada no meu código de leitura de bytes UTF-8 para String (do Java) e está lendo a resposta em JSON corretamente. Isso já me atende (até fica melhor), apesar de ter que mudar toda a minha implementação que já estava baseada na resposta .ini.

Link to comment
Share on other sites

  • Consultores
  • Solution
32 minutos atrás, Trier Sistemas disse:

Difícil de afirmar com certeza, mas a possibilidade do problema estar no código da ACBr que gera o retorno no formato .ini deveria ser considerado. Pois apenas mudei o "TipoResposta=2" (JSON), não mudei nada no meu código de leitura de bytes UTF-8 para String (do Java) e está lendo a resposta em JSON corretamente. Isso já me atende (até fica melhor), apesar de ter que mudar toda a minha implementação que já estava baseada na resposta .ini.

se TipoResposta = 2 (JSON) fica melhor para você, pode utilizar ela, acho que para seu ambiente é até melhor.
com o programa exemplo eu utilizo somente TipoResposta = 0 (ini) e não tenho problema na respostas

estou sem certificado para fazer testes, mas fazendo testes simples como impressão 

Retorno JSON:
09/09/22 09:24:57:332 - NFe_Imprimir(,1,,,,,)
09/09/22 09:24:57:332 - Travar
09/09/22 09:24:57:332 - ConfigurarImpressao - Iniciado
09/09/22 09:24:57:332 - ConfigurarImpressao - Feito
09/09/22 09:25:06:150 -    SetRetorno(0, { "Impressao" : { "Msg" : "1 Documento (s) impresso(s) com sucesso" } })

Retorno .INI:
09/09/22 09:28:47:316 - NFe_Imprimir(,1,,,,,)
09/09/22 09:28:47:316 - Travar
09/09/22 09:28:47:316 - ConfigurarImpressao - Iniciado
09/09/22 09:28:47:316 - ConfigurarImpressao - Feito
09/09/22 09:28:51:720 -    SetRetorno(0, [Impressao]
Msg=1 Documento (s) impresso(s) com sucesso
)

Link to comment
Share on other sites

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.

The popup will be closed in 10 seconds...