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á 895 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.

The popup will be closed in 10 segundos...
The popup will be closed in 10 segundos...