Avalados por :

Solução para o erro do adaptador JDBC no SAP PI: Causas e resolução em Java/XML

  • Creado 01/03/2024
  • Modificado 01/03/2024
  • 3 Vistas
0
Cargando...

Olá SDN'ers,

Estou com um problema muito estranho com um Módulo de Adaptador adicional que desenvolvi.

Meu cenário é: IDOC -> JDBC (Oracle)

Bem, para resumir, antes do receptor JDBC poder escrever meus dados no banco de dados, eu tenho que fazer (dentro do canal) um mapeamento em Java para produzir um documento XML que seja aceitável para ele. Então, no meu módulo, eu manipulo a carga através do DOM. Não há problema aqui.

A história estranha é: na primeira tentativa, o Adaptador falha (ver erro abaixo), enquanto depois de 5 minutos, ao tentar automaticamente novamente, ele tem sucesso.

Apenas porque coloquei algumas coisas no registro de auditoria de mensagens, o que posso dizer é esta coisa estranha:

1. no início, não há nenhum documento XML na carga, mas em vez disso há esta string:

org.apache.crimson.tree.XmlDocument@745501c6

que parece ser um toString() de algo que não utilizo diretamente (ou não sei como usar)

2. na segunda tentativa, mesmo no registro de auditoria, consigo ver o documento XML bem formado pronto para o adaptador JDBC, e de fato os dados são escritos no banco de dados.

?? O QUE PODERIA CAUSAR ISSO ??

Também observo que no sentido contrário (JDBC->IDOC) com outro módulo muito semelhante funciona perfeitamente.

Obrigado.

Alex

<b>A entrega da mensagem para a aplicação utilizando a conexão AFW falhou, devido a: OCORREU UM ERRO ao analisar a solicitação: com.sap.engine.lib.xml.parser.NestedSAXParserException: Erro fatal: com.sap.engine.lib.xml.parser.ParserException: XMLParser: Não é permitido dados aqui: (hex) 6f, 72, 67(:main:, linha:1, coluna:3)(:main:, linha=1, col=3) -> com.sap.engine.lib.xml.parser.ParserException: XMLParser: Não é permitido dados aqui: (hex) 6f, 72, 67(:main:, linha:1, coluna:3).</b>

P.S. -> 6f, 72, 67 é "org", que são as três primeiras letras da carga estranha que recebo na primeira tentativa.

Pedro Pascal
Se unió el 07/03/2018
Pinterest
Telegram
Linkedin
Whatsapp

1 Respuestas

0
Cargando...

Ok pessoal, consegui fazer funcionar.

Não sei por que, e não acho que tenha tempo para investigar mais, mas parece que a implementação do Documento DOM usada pelo XI é diferente na primeira vez que o AFW executa meu módulo, então aqui está minha solução alternativa.

if (docOut instanceof org.apache.crimson.tree.XmlDocument) {
   org.apache.crimson.tree.XmlDocument tmpDocOut = (org.apache.crimson.tree.XmlDocument)docOut;
   tmpDocOut.write(out);			
} else {
   out.write(docOut.toString().getBytes());
}

Saudações,

Alex

Respondido el 15/04/2024
LUCIANO RIOJA GHIOTTO
Se unió el 13/07/2019

contacto@primeinstitute.com

(+51) 1641 9379
(+57) 1489 6964

© 2024 Copyright. Todos los derechos reservados.

Desarrollado por Prime Institute

¡Hola! Soy Diana, asesora académica de Prime Institute, indícame en que curso estas interesado, saludos!
Hola ¿Puedo ayudarte?