String aus APICall speichern

Hallo zusammen,

ich bekomme aus einem APICall (SOAP API) folgende Response:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <soap:Body>
        <gsLoginResponse xmlns="http://www.apidomain.de/">
            <gsLoginResult>ClientID</gsLoginResult>
        </gsLoginResponse>
    </soap:Body>
</soap:Envelope>

Wie bekomme ich die ‚ClientID‘ aus der Response und kann diese speichern um sie in nachfolgenden Steps wieder zu verwenden?

Hallo @abc_design,

dafür kannst du den XMLReaderVisual Step verweden. Einfach den Output des APICalls als Input des Step verknüpfen und in die Konfiguration gehen. Anschließend deinen gewünschten Knoten auswählen, in dem Fall gsLoginResult, und danach kannst du den Output des Steps weiterverwenden.

Viele Grüße
Lukas

Hallo @synesty-Lukas ,

danke für deine Antwort.
Das mit dem XMLReaderVisual funktioniert leider nicht. Da kommt mir immer eine Fehlermeldung mit „DefaultError“.
Ich habe jetzt im APICall Step es mit dem response parsing script versucht:

<#ftl ns_prefixes={"A":"http://schemas.xmlsoap.org/soap/envelope/",
                   "B":"http://www.meineapidomain.de/"}>
                   
<#assign clientid = xml["A:Envelope"]["A:Body"]["B:gsLoginResponse"]["B:gsLoginResult"] />

 ${setVariable('MfClientID',clientid)}

Wenn ich testweise versuche die Variable im nächsten APICall Step einzubinden klappt das aber leider auch nicht:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <gbLogoff xmlns="http://www.meineapidomain.de/">
      <sClientID>${getVariable('MfClientID')}</sClientID>
    </gbLogoff>
  </soap:Body>
</soap:Envelope>

Viele Grüße,
Patrick

Ich habe es jetzt wie folgt gelöst:

  1. Mit dem response parsing script wird die ClientID in ein Spreadsheet geschrieben:
<#ftl ns_prefixes={"A":"http://schemas.xmlsoap.org/soap/envelope/",
                   "B":"http://www.meineapidomain.de/"}>
                   
<#assign row = target.addRow()>                  
<#list xml["A:Envelope"]["A:Body"]["B:gsLoginResponse"]["B:gsLoginResult"] as item>
    <#assign row = target.addRow()>
    ${addColumns(row, item, "", {"autoExpand": "asColumns"})}
</#list>
  1. Im nächsten Step wird mit dem TextHTMLWriter die ClientID ausgegeben:
<#list output@APICall_1.getRows() as row>
<#list row.getCols() as col> 
${col.get()!}
</#list>
</#list>
  1. Im nächsten APICall Step kann die ClientID wieder in den RequestBody eingebunden werden:
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
  <soap:Body>
    <gbLogoff xmlns="http://www.meineapidomain.de/">
      <sClientID>${TEMPLATE_OUTPUT_STRING@TextHTMLWriter_15!}</sClientID>
    </gbLogoff>
  </soap:Body>
</soap:Envelope>

Vielleicht gibt es da noch eine elegantere/bessere Lösung, aber zumindest funktioniert es so.