Avalados por :

Solución al error de adaptador JDBC en SAP PI: Causas y resolución en Java/XML

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

Hola SDN'ers,

Tengo un problema muy extraño con un Módulo de Adaptador adicional que desarrollé.

Mi escenario es: IDOC -> JDBC (Oracle)

Bueno, para resumir, antes de que el receptor JDBC pueda escribir mis datos en la base de datos, tengo que hacer (dentro del canal) un mapeo en Java para producir un documento XML que sea aceptable para él. Así que en mi módulo manipulo la carga a través de DOM. No hay problema aquí.

La historia extraña es: en el primer intento, el Adaptador falla (ver error a continuación), mientras que después de 5 minutos, al intentarlo automáticamente de nuevo, tiene éxito.

Solo porque puse algunas cosas en el registro de auditoría de mensajes, lo que puedo decirles es esta cosa rara:

1. al principio, no existe ningún documento XML en la carga, sino que en su lugar hay esta cadena:

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

que parece ser un toString() de algo que no uso directamente (o no sé cómo usarlo)

2. en el segundo intento, incluso en el registro de auditoría puedo ver el documento XML bien formado listo para el adaptador JDBC, y de hecho los datos se escriben en la base de datos.

?? ¿QUÉ PODRÍA CAUSAR ESTO ??

También decir que en sentido contrario (JDBC->IDOC) con otro módulo muy similar funciona perfectamente.

Gracias.

Alex

<b>La entrega del mensaje a la aplicación utilizando la conexión AFW falló, debido a: SE PRODUJO UN ERROR al analizar la solicitud: com.sap.engine.lib.xml.parser.NestedSAXParserException: Error fatal: com.sap.engine.lib.xml.parser.ParserException: XMLParser: No se permite datos aquí: (hex) 6f, 72, 67(:main:, fila:1, col:3)(:main:, fila=1, col=3) -> com.sap.engine.lib.xml.parser.ParserException: XMLParser: No se permite datos aquí: (hex) 6f, 72, 67(:main:, fila:1, col:3).</b>

P.S. -> 6f, 72, 67 es "org", que son las tres primeras letras de la carga extraña que obtengo en el primer intento.

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

1 Respuestas

0
Cargando...

Ok chicos, lo tengo funcionando.

No sé por qué, y no creo que tenga tiempo para investigar más, pero parece que la implementación del Documento DOM utilizada por XI es diferente la primera vez que AFW ejecuta mi módulo, así que aquí está mi solución 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());
}

Saludos,

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?