Parametrieren HTTP-Connector/Adapter

,

Hallo,

ich möchte einen HTTP-Call mit dem X4-Adapter durchführen.

Über Postmen konnte ich den Zielservice korrekt aufrufen und habe ihn zusätzlich auch ans X4 an einen dort erstellten Serviceendpunkt geschickt, um die Struktur (HTTP-Meta-XML) zu prüfen. Dort stehen die für den Zielservice notwendigen „Parameter“ im „Query“-Tag der Struktur:
grafik

Wenn ich nun den Adapter direkt über das „query“ Feld parametriere funktioniert der Aufruf.

Möchte ich jedoch über ein vorgeschaltetes Mapping das „query“ Feld dynamisch setzen funktioniert der Aufruf nicht. Muss ich theoretisch „fromXML“ aktivieren und ein „“ Tag in das „“ packen oder wird das über ein DynamicParameter „query=PARAMETER“ gesetzt?

Hi Patrick,

„fromXML“ braucht es nur, wenn der HTTP-Adapter eine INPUT-XML-Struktur bekommt, die z.B. spezielle Header enthält.
Unabhängig davon ist das DynamicParameter-Mapping, um z.B. den Parameter „query“ zu setzen. Ich habe es bei mir gerade durchgespielt und folgendes festgestellt: Bei mehr als einem query-Parameter ist der „Trenner“ ja das &-Zeichen: Wenn man das im DynamicParameter-Mapping setzt muss man das als „&“ schreiben, denn sonst ist es ja ein XML-Steuerzeichen. Hast du das versucht?

Hier der Schnipsel aus meinem Test-Mapping, damit hat es bei mir geklappt, alle Query-Parameter zu übergeben:

<xsl:processing-instruction name="DynamicParameter">
      <xsl:text>query="test1=hallo&amp;test2=welt</xsl:text>
      <xsl:text>"</xsl:text>
    </xsl:processing-instruction>

Der Request des empfangenden Prozesses erhält damit dann diese Daten:

<Reqeust>
    ...
    <Query>
		<QueryString>test1=hallo&amp;test2=welt</QueryString>
		<Parameter name="test2">welt</Parameter>
		<Parameter name="test1">hallo</Parameter>
	</Query>
	<Body encoding="base64" />
</Request>

Mit DynamicParameter query="PARAMETER=Wert“ funktioniert das mit Sicherheit mit den üblichen Formatierungen für dynamische Parameter.

Im Input-Dokument per fromXML=„true“ habe ich bisher nur Header übergeben, anhand des Beispiels in der Online Hilfe finden sich im Input (Expertenmodus) - Beispiel keine Query und Parameter Tags daher gehe ich eher davon aus, dass das nur bei der Ausgabe so angewendet bzw. verwendet wird (HTTP-Adapter toXML=true).

Hi Stefan,

die „&“ Verknüpfung hatte ich im DynParam schon entsprechend getestet, genauso wie auch <![CDATA[]], beides bisher erfolglos.

Hast du den „query“-Parameter im Adapterfenster wieder gelöscht bevor du den DynamicParameter getestet hast (siehe Screenshot unten - der Inhalt muss raus)? Eigentlich sollten die DynParam ja die Werte direkt im Adapter überschreiben, das passiert aber bei mir nicht. Steht der Werte im Adapter drin funktioniert es, nehme ich ihn aus, funktioniert es nicht mehr. Daher habe ich auch die Befürchtung dass der DynParam für die „query“ garnicht funktioniert.

Bin mir noch nicht ganz sicher ob das funktioniert. Es wäre ja leider auch nicht das erste Mal das die Doku nicht vollständig ist :smiley:

Also folgendes Beispiel haben wir in einem System produktiv im Einsatz, hier werden alle wichtigen Parameter für die Adressierung eines Webservices dynamisch gesetzt, die im Adapter hinterlegten Werte werden überschrieben, diese haben die niedrigste Prio wenn es um gleichzeitige Verwendung verschiedener Parameter Quellen geht. Quelle für die Parametrisierung sind hier CustomPlaceholder sowie Konfigurations-Werte die wir aus einer Datenbank entnehmen, die hier dann als XML einfliesen und als Dynamische Parameter übergeben werden:


Gesamtlänge der erzeugten URL und die Codierung der Parameter bzw. Werte und der Steuerzeichen sind die verbreitetsten Stolpersteine dabei.
Ein entsprechendes Mapping für den spezifischen Anwendungsfall können wir gerne auch im Rahmen eines Bugtickets oder Beratung tiefer analysieren oder aufbauen.

Hi Patrick,

grundsätzlich überschreiben dynamische Parameter IMMER die am Adapter gesetzten Werte.
Zur Sicherheit hatte ich es gerade lokal getestet, mit und ohne query im Adapter (aber immer mit Mapping davor) funktioniert es beides.
Wie lang ist denn der Inhalt der Query, sprich wie viele Zeichen hat die? Der Verdacht von Michael ist ja die Länge oder die enthaltenen Zeichen. Wenn hier nämlich etwas schiefläuft und im Adapter noch die query gefüllt ist, wird im Zweifelsfall doch die genommen.

Hay ihr beiden, vielen Dank für eure Unterstützung! Mit Gerhard konnte ich das Problem heute lösen, ich musste die Parameter zuerst als plain/text ausgeben, manuell Base64 codieren und dann in den Request in den Body packen. So hat es nun funktioniert, keine Ahnung warum es aber auch im „query“ Parameter direkt im Adapter funktioniert hat.
grafik

VG
Patrick