Hallo Gustav,
ich kann deine Verwirrung aufgrund des fehlenden Spaltentitels gut nachvollziehen, aber es is nicht wirklich ein Bug. Die Ursache für dieses Verhalten liegt in der „lazy“ Verarbeitung des XMLReaders bei mehreren input Dateien. Das output Spreadheet des XMLReaders wird quasi erst erzeugt, wenn es von einem Step „konsumiert“ wird. Das ist in deinem Beispiel Flow der CSVWriter Step. Die Header Zeile im 1. CSVWriter Step basiert dann auf der 1. eingelesenen XML Datei. Hier ist die Spalte „B“ nicht vorhanden.
Wenn der XMLReader einmal alle Dateien durchlaufen hat (nach dem 1. CSVWriter Step), dann ist der Titel auch im Header des Spreadsheet vorhanden/bekannt. Alle nachfolgenden Steps die das Output spreadsheet des XMLReaders verwenden (z.B. 2. CSVWriter), haben dann auch den Spaltentitel in der Kopfzeile.
(siehe auch Error in XML parsing code: No compatible overloaded variation was found)
Es gibt zwei Möglichkeiten, das Problem zu beheben:
- Du fügst die Spalte template des XMLReaders immer hinzu (auch wenn sie nicht vorhanden ist)
<#if element["b"]?? && element["b"]?has_content>
${row.addCol("b", element["b"])}
<#else>
${row.addCol("b", "")}
</#if>
Wenn möglich, dann würde ich dir diese Variante empfehlen.
- Du packst hinter den XMLReader Step einen (Dummy) CSVWriter oder Mapper (mit Cache Mode aktiviert) Step, der das output Spreadsheet des XMLReader Steps verwendet.
Viele Grüße
Torsten