Fehler beim XMLReader

Hallo,

ich habe einen APICall der von einer SOAP API eine XML Response erhält. Diese Response möchte ich mit dem XMLReader auslesen und in ein Spreadsheet schreiben. Dazu habe ich den XMLReader mit der Response des APICalls verknüpft. Allerdings erhalte ich dabei einen Fehler:
„B-7 XMLReader: class java.lang.String cannot be cast to class java.io.File (java.lang.String and java.io.File are in module java.base of loader ‚bootstrap‘) (Root Causes: ClassCastException: class java.lang.String cannot be cast to class java.io.File (java.lang.String and java.io.File are in module java.base of loader ‚bootstrap‘))“

Ich habe es auch mit dem HTMLParser versucht. Da kann ich allerdings die Response nicht verknüpfen.
Ich kann zwar das response parsing script des APICalls benutzen. Das benötige ich aber für die Fehlerabfrage des APICalls.

Viele Grüße,
Patrick

Hallo Patrick,

Der APICall Step hat den XMLReader quasi schon integriert. Über das parsingTemplate kannst du dir ein Spreadsheet (output) erstellen. Alle anderen Outputs werden nur nur zum debuggen in der Vorschau angezeigt und können in den nachfolgenden Steps nicht verwendet werden bzw. werden nur in der Vorschau angezeigt.

Kannst du uns das etwas genauer erklären. Was meinst du mit „Fehlerabfrage des APICalls“ ? Wie sieht das parsing script aus?

Viele Grüße
Torsten

Hallo @synesty-Torsten ,

über die Response vom APICall werden auch Fehlermeldungen mitgeliefert. Diese wollte ich mit dem Response Parsing Script abfangen und mit einem StopFlowIf ausgeben.
Ich habe das Skript jetzt aber umgeschrieben, so dass es mit die eigentlichen Daten und die eventuellen Fehlermeldungen ausgibt:

<#ftl ns_prefixes={"A":"http://schemas.xmlsoap.org/soap/envelope/", "B":"http://www.myfactory.com/Services/SoapAPI"}>
                   
<#assign row = target.addRow()>        

<#-- Allgemeinen Fehler auslesen -->
<#assign generalError = xml["A:Envelope"]["A:Body"]["B:GetProductStockInfosResponse"]["B:GetProductStockInfosResult"]["B:ErrCode"][0]!''>

<#if generalError?has_content && generalError?trim != ''>
    <#assign row = target.addRow()>

    ${row.addCol("ProductID", "")}
    ${row.addCol("ProductNumber", "")}
    ${row.addCol("StockQuantity", "")}
    ${row.addCol("ErrMsg", generalError)}
</#if>

<#-- Artikellagerdaten und Fehler der einzelnen Artikel auslesen -->
<#list xml["A:Envelope"]["A:Body"]["B:GetProductStockInfosResponse"]["B:GetProductStockInfosResult"]["B:ProductStockInfos"]["B:ProductStockInfo"] as item>
    <#if item["B:ResponseCode"]?has_content && item["B:ResponseCode"] == "ERROR">
        <#assign row = target.addRow()>

        ${row.addCol("ProductID", "")}
        ${row.addCol("ProductNumber", item["B:ProductNumber"]!)}
        ${row.addCol("StockQuantity", "")}
        ${row.addCol("ErrMsg", item["B:ErrMsg"]!)}
    <#else>
        <#assign row = target.addRow()>

        ${row.addCol("ProductID", "")}
        ${row.addCol("ProductNumber", item["B:ProductNumber"]!)}
        ${row.addCol("StockQuantity", item["B:StockQuantity"]!)}
        ${row.addCol("ErrMsg", "")}
    </#if>
</#list>

Ist meines Erachtens zwar nicht besonders schön aber sollte zumindest funktionieren.

Viele Grüße,
Patrick

1 Like