Error in XML parsing code: No compatible overloaded variation was found

Diese Fehlermeldung kann bei der Verwendung des Steps XML2Spreadsheet beim Einlesen von XML-Dateien kommen.

Das Einlesen von XML Dateien ist nicht ganz einfach und es passieren auch schnell einmal Tippfehler, man verschreibt sich bei einem XML-Tag, welches es nicht gibt.

In diesem Fall gibt der Step Fehlermeldungen wie folgt aus:

Error in XML parsing code: No compatible overloaded variation was found; can’t convert (unwrap) the 2nd argument to the desired Java type.The FTL type of the argument values were: string (wrapper: f.t.SimpleScalar), sequence+hash (wrapper: f.e.dom.NodeListModel).
--------FTL stack trace („~“ means nesting-related): - Failed at: ${row.addCol(„Modell“, art[„MODELLa“])} [in template „xmlToSpreadsheet“ at line 6, column 9]---- (responsible code: - Failed at: ${row.addCol(„Modell“, art[„MODELLa“])} [in template „xmlToSpreadsheet“ at line 6, column 9])

Übersetzt heißt diese Meldung Folgendes:

  • Das Problem tritt in Zeile 6 des Scripts auf
    • Suchen Sie in der Fehlermeldung immer nach dem Teil „responsible code:“. Dieser gibt oft einen genauen Hinweis auf die Zeile im Script, wo etwas nicht stimmt.
  • Im Beispiel wurde auf ein falsch geschriebenes XML-Tag MODELLa (das a am Ende ist zuviel und war ein Tippfehler) in einem Artikel zugegriffen.
  • Korrekt hätte es MODELL (ohne a) heißen müssen. Vermutlich handelte es sich um einen Tippfehler. So etwas kommt vor und kann dadurch lokalisiert werden.

Beispiel wann dieser Fehler kommen kann:

XML-Datei:

<?xml version="1.0" encoding="ISO-8859-1"?>
<ARTIKELLISTE xmlns="http://meistensirgendeinelangeurl.de/" xmlns:prefix="http://meistensirgendeinelangeurl.de/erweitert">
	<ARTIKEL>
		<ARTNR>010-12983</ARTNR>
		<MODELL>High Pressure</MODELL>
    </ARTIKEL>
</ARTIKELLISTE>

Script zum Einlesen:

<#assign row = target.addRow()>
 
<#list xml["ARTIKELLISTE"]["ARTIKEL"] as art>
    <#assign row = target.addRow()>
    ${row.addCol("Artikelnummer",art["ARTNR"])}
    ${row.addCol("Modell",art["MODELLa"])}
</#list>

Die vorletzte Zeile ${row.addCol(„Modell“,art[„MODELLa“])} ist die Zeile aus der obigen Fehlermeldung. Dort wird versucht auf ein nicht-existierendes Tag MODELLa zuzugreifen.

Warum kommt dieser Fehler manchmal auch bei anderen Steps z.B. SpreadsheetCSVWriter?

Das sieht nur so aus. Der Grund ist, dass die eigentliche Verarbeitung des XML2Spreadsheets erst beginnt, sobald ein nachfolgender Step dessen Output beginnt zu verarbeiten. In Entwicklerkreisen ist das auch als sog. Lazy-Evaluation bekannt und wird aus zur Performance-Optimierung eingesetzt, damit ein Verarbeitungsprozess auch nur ausgeführt wird, wenn er wirklich gebraucht wird.

Deshalb erscheint der Fehler erst bei der Ausführung des nachfolgenden SpreadsheetCSVWriter Steps, der versucht das Ausgabe-Spreadsheet des XML2Spreadsheet in eine CSV-Datei zu schreiben.

Statt des SpreadsheetCSVWriter könnte es jeder andere Step sein, der als Input ein Spreadsheet-Objekt erwartet.