Ir para conteúdo
  • Cadastre-se

dev botao

Erro class EACBrXmlException with message 'EntityRef: expecting ';' ao tentar carregar o xml do Bpe


Ver Solução Respondido por prismars,

Recommended Posts

Postado

Senhores,

Após atualizar o ACBr estou com este problema ao tentar imprimir uma 2a via do BPe.

Métodos utilizados mas com erro:

MeuExemploBPe.BPe.Bilhetes.Add.LerXML(StringComXML);

MeuExemploBPe.BPe.Bilhetes.LoadFromString(ArquivoXML);

MeuExemploBPe.BPe.Bilhetes.Items[0].LerXML(StringComXML);

Qualquer dica ou orientação será bem vinda.

Grato desde já.

 

 

Postado

Juliomar,

Ao testar com o exemplo do ACBrBPe, o mesmo problema ocorre.

Após uma pesquisa na internet encontrei um outro usuário do ACBr reportando o mesmo erro, mas no caso dele era na NFe,

Abaixo o teor da mensagem dele:

"

Boa Tarde!

No meu XML, gero o Nome Fantasia do Destinatário nos Dados Adicionais: tag <infCpl>

Quando este nome tem & está trocando para "&amp;" que é correto, então salva corretamente.

Quando carrego um XML por:

ACBrNFe.NotasFiscais.LoadFromFile(PathArquivoXML);
E Logo em seguida realizo a Assinatura:

ACBrNFe.NotasFiscais.Assinar;
Ocorre o Erro:  Falha ao interpretar o XML "xmlParseDoc" --> 23 - EntityRef: expecting ';'

Analisando o Código fonte da ACBr observei que no TNotasFiscais.LoadFromFile é executado:

1- TNotasFiscais.LoadFromString;

2- NotaFiscal.LerXML;

3-ACBrUtil.XMLHTML.ParseText;

na Function ParseText é executado:

Astr := InternalStringReplace(AStr, '&amp;'   , '&');
Voltando para somente "&"

Depois ainda executa o:

4- TNFeR.LerXml

5- Leitor.rCampo

na Function rCampo quando o campo é tcStr

É executado o pcnAuxiliar.ReverterFiltroTextoXML

Que contém o código:

aTexto := StringReplace(aTexto, '&amp;', '&', [rfReplaceAll]);
Ou seja, quando eu for realizar a Assinatura vai ocorrer o Erro: Falha ao interpretar o XML "xmlParseDoc" --> 23 - EntityRef: expecting ';'

Se eu comentar as duas linhas desse código que fazem o replace, só para testar, Funciona Perfeitamente.

Mas Também entendo que esta não é a Solução pois o LoadFromfile é usado em Inúmeras situações e se comentar essa parte pode ocorrer outro tipo de erro.

Como devo proceder nesse caso?

utilizo a montagem do XML pelo TXMLDocument, Salvo no Disco, Utilizo os fontes da ACBr para Assinar, Validar e Enviar os Documentos.

Tem uma outra opção que não seja ACBrNFe1.NotasFiscais.Add, tendo em vista que eu precisaria refatorar todo o código somente por conta do "&" 

Alguém poderia me sugerir algo?

"

Fico no aguardo e agradeço desde já,

Moacir

Postado

Juliomar,

Fiz alguns testes e descobri que o erro ocorre na unit ACBrXMLDocument, na função LoadFromXML:

"procedure TACBrXmlDocument.LoadFromXml(AXmlDocument: string);
var
  loadedDoc: xmlDocPtr;
  loadedRoot: xmlNodePtr;
begin
  // a linha abaixo foi comentada pois segundo o DSA consome muito a CPU e causa lentidão
//  AXmlDocument := NativeStringToUTF8(AXmlDocument);
  loadedDoc := xmlParseDoc(PAnsiChar(ansistring(AXmlDocument)));   
 <- O erro ocorre aqui !

  if loadedDoc <> nil then
  begin
    xmlFreeDoc(xmlDocInternal);
    xmlDocInternal := loadedDoc;

    loadedRoot := xmlDocGetRootElement(xmlDocInternal);
    if loadedRoot <> nil then
    begin
      xmlRootElement.Free;
      xmlRootElement := TACBrXmlNode.Create(Self, loadedRoot);
    end
    else
      raise EACBrXmlException.Create(xmlGetLastError()^.message);
  end
  else
    RaizeExceptionTratandoNaoCarregamentoDLL;
end;
"

 

Caso voce tenha alguma novidade, me avise !

Moacir

  • Consultores
Postado

Boa tarde @prismars,

Fiz um teste usando o programa exemplo com os seus XML.

Usei o botão Validar XML para testar a carga do XML e sua validação.

Em ambos a carga do XML ocorreu com sucesso e os mesmos são validos.

Acredito o seu problema seja configuração do componente, alguma configuração esta errada e com isso provocando esse erro.

Consultor SAC ACBr

Italo Giurizzato Junior
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr

Analista de Sistemas / Araraquara-SP

Araraquara - A era dos Trólebus

Postado

Italo,

Tente IMPRIMIR usando estes arquivos pelo programa exemplo e voce verá o erro acontecer. 

 

Meu programa existe a alguns anos usando o ACBr e sempre funcionou bem, até a refactory feito.

Métodos utilizados mas com erro:

MeuExemploBPe.BPe.Bilhetes.Add.LerXML(StringComXML);

MeuExemploBPe.BPe.Bilhetes.LoadFromString(ArquivoXML);

MeuExemploBPe.BPe.Bilhetes.Items[0].LerXML(StringComXML);

Se eu gerar um novo Bpe o erro NÃO ocorre, então pressuponho que não possa ser algo do componente.

De qualquer forma esta é a configuração corrente:

SSLLib = libWinCrypt

SSCrypLib = cryWinCrypt

SSHttpLib = httpWinHttp

SSLXmlSignLib = xsLibXml2

Caso esta configuração esteja incorreta, por favor, me informe a correta.

Ou pode ser alguma outra configuração ??

Qualquer dica ou comentário é bemvindo...

Moacir

 

 

Postado

Juliomar,

Fiz como recomendado e ao tentar imprimir uma segunda via a partir do XML o erro persiste !

Capturadetela2025-07-10181556.png.4fe7071c0070e02f3dbefe8627d60a92.png

 

Tente IMPRIMIR usando estes arquivos xml que enviei pelo programa exemplo e voce verá o erro acontecer. 

  • Moderadores
Postado
1 hora atrás, prismars disse:

Juliomar,

Fiz como recomendado e ao tentar imprimir uma segunda via a partir do XML o erro persiste !

Capturadetela2025-07-10181556.png.4fe7071c0070e02f3dbefe8627d60a92.png

 

Tente IMPRIMIR usando estes arquivos xml que enviei pelo programa exemplo e voce verá o erro acontecer. 

Nem perguntei ou passou batido.

está usando ESC POS ou o que pra imprimir?

pois mandei validar o xml e está Ok no exemplo e carregando via libxml2

image.png

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

  • Moderadores
Postado
25 minutos atrás, prismars disse:

Uso ESC POS. Mas o erro ocorre ANTES da impressão. Ocorre no parse do xml

Beleza é no carregar o xml. 
no caso não ocorreu
eu to aqui pensando que tu pode ter um bpl ai na sua pasta do delphi lá em documentos publicos
poderia confirmar que não tem bpl lá do ACBr?

Consultor SAC ACBr Juliomar Marchetti
 

Projeto ACBr

skype: juliomar
telegram: juliomar
e-mail: [email protected]
http://www.juliomarmarchetti.com.br
MVP_NewLogo_100x100_Transparent-02.png
 

 

  • Solution
Postado

Juliomar,

Verifiquei e não encontrei bpl do ACBr 'perdidas'.

Fiz então uma nova instalação do ACBr:

- Apaguei o diretorio do ACBr
- Baixei o ACBr de novo 
- Rodei o bat 'apagarAcbr.bat'

- Instalei o ACBr novamente (ACBrInstall_Trunk2.exe)

- Re-compilei o meu aplicativo e o erro persistia.

Mas ao verificar no diretorio do meu aplicativo identifiquei duas DLL´s:
- libeay32.dll
- ssleay32.dll

Bastou exclui-las e o meu aplicativo voltou a funcionar !!!

Eram estas DLL´s mais antigas perdidas ali que estavam causando o problema !

Deixo aqui o registro caso mais alguem venha a ter este problema.

Agradeço demais a ajuda e o interesse na resolução de meu problema,

 

Gratidão a todos !

  • Curtir 1
Visitante
Este tópico está agora fechado para novas respostas
×
×
  • 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.