Ir para conteúdo
  • Cadastre-se

dev botao

Erro ACBrBoleto + Java - Invalid memory access


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

Recommended Posts

  • Membros Pro
Postado

Boa tarde à todos.

Teriam como me dar uma ajuda por favor?

Utilizei o mesmo projeto abaixo e com as mesmas configurações em 3 notes e 1 desktop diferentes. Mas só funciona em 1 dos 4. Fica dando exception. Observe os retornos de cada linha... -10

image.png.a37a9ddeeb758975570c2278ddde654e.png

E na hora do ACBrBoletoLib.INSTANCE.Boleto_Finalizar() dá a exception abaixo:

2024-05-28 12:20:32.036[0;39m [31mERROR[0;39m [35m15184[0;39m [2m---[0;39m [2m[nio-8080-exec-1][0;39m [36mo.a.c.c.C.[.[.[/].[dispatcherServlet]   [0;39m [2m:[0;39m Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed; nested exception is java.lang.Error: Invalid memory access] with root cause

java.lang.Error: Invalid memory access
    at com.sun.jna.Native.invokeInt(Native Method) ~[jna-5.9.0.jar:5.9.0 (b0)]

 

Saberiam me dizer o que está acontecendo? Ou teria como me dar um help por favor?

Att

  • Membros Pro
Postado (editado)
16 horas atrás, Renato Rubinho disse:

O jar possui versão por arquitetura? 

Se tiver, veja se está utilizando a mesma da lib que você está distribuindo. 

Bom dia Renato.

As arquiteturas são as mesmas e a lib também acompanha. Teoricamente seria para funcionar mas em algo ainda peco nestas 3 outras máquinas nas quais não funciona.

Editado por Messias Bittencourt
.
  • Consultores
Postado

se vc pegar as dlls (lib, ini e dependências) da maquina q esta funcionando e copiar para as outras funciona?
existe permissão de leitura e escrita nas pastas?
o projeto jar é o mesmo tbm?



 

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

  • Membros Pro
Postado
10 minutos atrás, Daniel InfoCotidiano disse:

se vc pegar as dlls (lib, ini e dependências) da maquina q esta funcionando e copiar para as outras funciona?
existe permissão de leitura e escrita nas pastas?
o projeto jar é o mesmo tbm?



 

Bom dia Daniel.

Foi feita exatamente esta cópia. Os arquivos e o projeto foram copiados e o erro persiste. Pode ser que algum esteja conflitando com a dll creio eu.

Existe alguma combinação de versões? O que estou usando é:

E devidamente configurado no path (variáveis de ambiente)?

  • Spring Tool Suite 4 - Version: 4.15.1.RELEASE - Build Id: 202206171354
  • C:\Program Files\Java\jdk-11
  • C:\Program Files\OpenSSL-Win64 (OpenSSL 3.3)
  • Consultores
Postado

Faz um teste assim. junto com acbrlibNFe.dll deixe as dependencias. todas dlls
vai ter uma pasta qdo faz o download da lib com as dll das dependencias. (openssl/xml2)
se sua aplicação for 32 compilada em 32 bits, todas dependencias e lib serão da pasta x86, caso seja compilado 64bits, utilize lib e dependencia da x64
exemplo da minha pasta em c# aplicacao gerada em 32bits
image.png

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

  • Membros Pro
Postado
6 minutos atrás, Messias Bittencourt disse:

Bom dia Daniel.

Foi feita exatamente esta cópia. Os arquivos e o projeto foram copiados e o erro persiste. Pode ser que algum esteja conflitando com a dll creio eu.

Existe alguma combinação de versões? O que estou usando é:

E devidamente configurado no path (variáveis de ambiente)?

  • Spring Tool Suite 4 - Version: 4.15.1.RELEASE - Build Id: 202206171354
  • C:\Program Files\Java\jdk-11
  • C:\Program Files\OpenSSL-Win64 (OpenSSL 3.3)

Testei inclusive alterando versões no jna e jna-plataform

2 minutos atrás, Daniel InfoCotidiano disse:

Faz um teste assim. junto com acbrlibNFe.dll deixe as dependencias. todas dlls
vai ter uma pasta qdo faz o download da lib com as dll das dependencias. (openssl/xml2)
se sua aplicação for 32 compilada em 32 bits, todas dependencias e lib serão da pasta x86, caso seja compilado 64bits, utilize lib e dependencia da x64
exemplo da minha pasta em c# aplicacao gerada em 32bits
image.png

No meu caso é a ACBrBoleto64.dll + java. As dependências não são as mesmas certo?

  • Membros Pro
Postado
2 minutos atrás, Messias Bittencourt disse:

Testei inclusive alterando versões no jna e jna-plataform

No meu caso é a ACBrBoleto64.dll + java. As dependências não são as mesmas certo?

E no meu caso que é boleto a única coisa na pasta "dep" são as logos. Tanto para HOM quanto PROD.

  • Membros Pro
Postado
26 minutos atrás, Daniel InfoCotidiano disse:

Quando deixo o ACBrBoletoLib.INSTANCE.Boleto_Inicializar("", "") vazio ele deveria criar o arquivo acbrlib.ini. O que não está acontecendo.

Resolvi então criá lo manualmente e colocar de seguinte forma no comando ACBrBoletoLib.INSTANCE.Boleto_Inicializar("C:\\dev\\Boletos_new\\arquivos_ini_hom\\", ""). De qq forma não surtiu efeito. Como podemos ver na imagem abaixo ele já dá erro no inicializar.

image.png.9193ad6771f5303f4f9776bfccc6ba1f.png

Agora, Messias Bittencourt disse:

Quando deixo o ACBrBoletoLib.INSTANCE.Boleto_Inicializar("", "") vazio ele deveria criar o arquivo acbrlib.ini. O que não está acontecendo.

Resolvi então criá lo manualmente e colocar de seguinte forma no comando ACBrBoletoLib.INSTANCE.Boleto_Inicializar("C:\\dev\\Boletos_new\\arquivos_ini_hom\\", ""). De qq forma não surtiu efeito. Como podemos ver na imagem abaixo ele já dá erro no inicializar.

image.png.9193ad6771f5303f4f9776bfccc6ba1f.png

Segue também o ini que criei manualmenteACBrLib.ini

  • Consultores
Postado

No seu arquivo qdo vc inicializa vc aponta um path com o arquivo lib, se ele nao existir vai criar. Pode estar ai o problema.
entao supondo q ele vai criar em \pdv\acbrlib.ini
vc precisa configurar a lib, dentre estas configuracoes, vc precisa informar o nivel e o log path q sera criado o arquivo log
[Principal]
TipoResposta=0
CodificacaoResposta=0
LogNivel=4
LogPath=\pdv\log\

Em Python por exemplo inicializo informando qual path e ini vou usar.. se nao existir ele cria.
Depois ja vou configurando o que preciso da lib como tipo de reposta e log;
Mas vc pode configurar manual na libINI, mas depis mude algo p saber se sua aplicacao esta lendo a lib correta

#Inicializa Lib

resposta = acbr_lib.NFE_Inicializar("c:\nfe\acbrlib.ini",)
if resposta == 0:
    print("Libi inicializada com sucesso!")
else
    print("erro ao iniciar a lib. erro:",inicializa)    
    # interromper aqui a execucao do programa pois a lib nao foi iniciada

#configurando tipo de repsosta retorno INI
acbr_lib.NFE_ConfigGravarValor("Principal", "TipoResposta","2")

#log configurando log na ini
acbr_lib.NFE_ConfigGravarValor("Principal", "LogNivel", "4")
acbr_lib.NFE_ConfigGravarValor("Principal", "LogPath" , "c:\nfe\log\")

 

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

  • Membros Pro
Postado
3 horas atrás, Daniel InfoCotidiano disse:

No seu arquivo qdo vc inicializa vc aponta um path com o arquivo lib, se ele nao existir vai criar. Pode estar ai o problema.
entao supondo q ele vai criar em \pdv\acbrlib.ini
vc precisa configurar a lib, dentre estas configuracoes, vc precisa informar o nivel e o log path q sera criado o arquivo log
[Principal]
TipoResposta=0
CodificacaoResposta=0
LogNivel=4
LogPath=\pdv\log\

Em Python por exemplo inicializo informando qual path e ini vou usar.. se nao existir ele cria.
Depois ja vou configurando o que preciso da lib como tipo de reposta e log;
Mas vc pode configurar manual na libINI, mas depis mude algo p saber se sua aplicacao esta lendo a lib correta

#Inicializa Lib

resposta = acbr_lib.NFE_Inicializar("c:\nfe\acbrlib.ini",)
if resposta == 0:
    print("Libi inicializada com sucesso!")
else
    print("erro ao iniciar a lib. erro:",inicializa)    
    # interromper aqui a execucao do programa pois a lib nao foi iniciada

#configurando tipo de repsosta retorno INI
acbr_lib.NFE_ConfigGravarValor("Principal", "TipoResposta","2")

#log configurando log na ini
acbr_lib.NFE_ConfigGravarValor("Principal", "LogNivel", "4")
acbr_lib.NFE_ConfigGravarValor("Principal", "LogPath" , "c:\nfe\log\")

 

Tentei também desta forma. Mas o erro continua aparecendo desde o inicializar.

Tentaiva_03.txtTentaiva_02.txtTentaiva_01.txt

 

Testei tentando deixar ele criar o ini, assim como eu criando o ini manualmente.

E também alterando as dependências do pom.xml, colocando as diretamente no build path.

E assim estou caminhando com minhas tentativas mas em todas, até o momento, o erro persiste.

  • Membros Pro
Postado
 

Revisando.

Seu jar, sua aplicação são x64, certeza?

Tenha certeza de copiar as dlls de dependências também x64.

Tente instalar as ferramentas de runtime do C++ que o problema pode ter relação com as dlls de dependências.

https://github.com/abbodi1406/vcredist/releases

Em relação ao x64 tenho certeza que tudo ok.
Vou agora verificar esta questão do runtime.

Obrigado!

  • Curtir 1
  • Membros Pro
Postado
 

Em relação ao x64 tenho certeza que tudo ok.
Vou agora verificar esta questão do runtime.

Obrigado!

Com a instalação do runtime acima indicado, parou de acontecer a exception na primeira vez que o método é executado. Da segunda em diasnte ainda dá o erro de Invalid Memory Access. Se eu parar o server e subir novamente, a primeira vez não dá mais o erro de memory access. Mas de qq forma continuam os retornos com -10.
 

Saberiam me dizer se tem mais algo a ser instalado?

 

Obrigado 

  • Consultores
Postado

 

 
  • Spring Tool Suite 4 - Version: 4.15.1.RELEASE - Build Id: 202206171354
  • C:\Program Files\Java\jdk-11
  • C:\Program Files\OpenSSL-Win64 (OpenSSL 3.3)

No início você postou um print que está utilizando a versão 3.

 


image.png

As dlls da OpenSSL são distribuídas com a lib.

Assim como o @Daniel InfoCotidianosugeriu, tente copiar as dlls distribuídas pelo ACBr e cole na mesma pasta onde está a lib, mas atente-se em pegar as x64 ao invés do exemplo dele x86.

Teste com a versão 1.1.1.10 que é mais antiga e tem menor chances de ser o problema.

  • Consultores
Postado

@Messias Bittencourt
Se o retorno esta vindo -10, procure o log ai nas suas pastas.
Pois pode ser um dado invalido, -10 na consulta cnpj é CNPJ invalido.

Através do log vc vai detectar o problema, por isso q solicitei acima, vc chegou a me enviar ?

image.png

  • Curtir 1
Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

  • Membros Pro
Postado
 

sobre Log e ini veja se ele nao esta criando na pasta /usr/bin
passei por isso com NodeJs...
 

Estou usando windows 11. E o arquivo de log não está sendo criado.

 

 

No início você postou um print que está utilizando a versão 3.

As dlls da OpenSSL são distribuídas com a lib.

Assim como o @Daniel InfoCotidianosugeriu, tente copiar as dlls distribuídas pelo ACBr e cole na mesma pasta onde está a lib, mas atente-se em pegar as x64 ao invés do exemplo dele x86.

Teste com a versão 1.1.1.10 que é mais antiga e tem menor chances de ser o problema.

Vou tentar esta versão mais antiga então obrigado!

  • Consultores
Postado

Na pasta onde vc indicou o log esta com permissão de leitura e gravação ?
        int logNivel = ACBrBoletoLib.INSTANCE.Boleto_ConfigGravarValor("Principal", "LogNivel", "4");
        int logPath = ACBrBoletoLib.INSTANCE.Boleto_ConfigGravarValor("Principal", "LogPath" , "C:\\dev\\Boletos_new\\arquivos_ini_hom\\");

Se vc executar ai um localizar ele nao encontra o arquivo em nenhuma outra pasta ?
c:\>dir ACbrLibBoleto*.log /s/b

 

Consultor SAC ACBr

Daniel de Morais (Infocotidiano)
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  Discord

×
×
  • 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.