Contexto

Los logs del módulo SDM contenían mensajes del tipo:

text
FisAircrafts message received:
<xml-fragment fullLoad="true">
    <urn:fisAircraft ... />
    <urn:fisAircraft ... />
    ...
</xml-fragment>

Un único fragmento podía contener cientos de aeronaves.

Se necesitaba buscar vuelos presentes en un Excel y extraer sus datos.

Dificultad

Un enfoque ingenuo podría procesar únicamente una línea o buscar una matrícula mediante una expresión regular global.

Esto falla cuando:

  • el XML ocupa múltiples líneas;
  • hay cientos de nodos;
  • la matrícula aparece lejos de la cabecera;
  • existen varios fragmentos;
  • un mensaje se corta por rotación de logs;
  • el XML contiene namespaces;
  • se intenta aplicar regex a estructuras jerárquicas complejas.

Decisión: reconstruir primero el fragmento completo

La estrategia correcta es detectar:

text
inicio de mensaje
        |
        v
acumular lineas
        |
        v
fin de xml-fragment
        |
        v
parsear XML completo
        |
        v
iterar fisAircraft

Esto permite tratar cada mensaje como una unidad.

Caso de fallo: una matrícula visible no aparecía en el informe

Se detectó un caso donde una matrícula concreta estaba claramente presente en el log pero no aparecía en la salida.

Este tipo de incidencia es especialmente útil desde el punto de vista de ingeniería.

La respuesta adecuada no es añadir una excepción especial para esa matrícula.

Hay que estudiar por qué el algoritmo no la detectó.

Posibles causas:

  • lectura parcial del bloque;
  • namespace;
  • normalización;
  • expresión regular demasiado restrictiva;
  • procesamiento que solo toma el primer elemento;
  • XML incompleto;
  • filtrado previo;
  • problema de encoding.

Lo que aprendí

Cuando un caso conocido contradice el resultado, debe convertirse en un caso de prueba de regresión.

Decisión: eliminar RAW del informe final

Durante debugging puede ser útil conservar el XML completo.

Pero para un informe operacional, una columna RAW:

  • ocupa mucho;
  • dificulta abrir Excel;
  • hace el archivo poco legible;
  • duplica información.
La decisión fue mantener campos estructurados y retirar RAW del informe final.

Es un buen ejemplo de separación entre:

text
datos de diagnóstico

y:

text
datos de consumo

---