Ir para conteúdo
  • Cadastre-se

dev botao

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


Ver Solução Respondido por antonio.carlos,
  • Este tópico foi criado há 810 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

  • Membros Pro
Postado

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

  • Membros Pro
Postado (editado)

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

Editado por Trier Sistemas
  • Consultores
Postado
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);
        }

 

  • Membros Pro
Postado

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

  • Consultores
Postado
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 ?

  • Membros Pro
Postado (editado)

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

Editado por Trier Sistemas
  • Consultores
Postado
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 ?

  • Membros Pro
Postado

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.

  • Consultores
  • Solution
Postado
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
)

×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.