- Dieses Thema hat 2 Antworten und 2 Teilnehmer, und wurde zuletzt aktualisiert vor 3 Jahren von Torsten Uhr.
- Beitrag
-
- 19. März 2021 um 13:03 Uhr
In manchen Projekten kann es erforderlich sein, dass bestimmte Daten an verschiedenen Stellen benötigt werden. Idealerweise möchte ich diese Daten aber nur einmal an zentraler Stelle pflegen.Ich möchte hier an einem kleinen Beispiel zeigen, wie das umgesetzt werden kann.
Beispiel: Aufruf einer REST-API mit je einem fixen Token für Produktiv- und Testsystem
Ein Rest-API bietet verschiedene Services an, die alle mit einem Token im Header aufgerufen werden sollen. Es existieren zwei Instanzen zum Test und zur Produktion. Jedes System benötigt einen eigenen Token.
Pflege der Daten
Zuerst legt man eine XML-Ressource an. In dieser Ressource werden alle Konstanten gepflegt. Die Struktur kann frei gewählt werden.
<ROOT> <Current-Environment>Dev</Current-Environment> <API-Acces-Token-Dev >w879f89f80ßd8diebfwle8ef08wefxs</API-Acces-Token-Dev> <API-Acces-Token-Prod>dhfweiofwlbfwiebfwle88uef08wefs</API-Acces-Token-Prod> </ROOT>
Erstellen der Adapter
Es werden zwei Adapter erstellt, ein Adapter für das Testsystem und ein Adapter für die Produktion.
Modellierung des Prozesses
Im Prozess wird die XML-Datei als Parameter eingebunden.
Verwendung von Werten im Prozess
Eine Möglichkeit ist, einen einfachen Wert in eine Variable auszulesen:
In der Alternative könnte man auch direkt per XPath auf die Werte in der Konfiguration zugreifen:
Verwendung von Werten in Transformationen
Der jeweilige Token muss in der Transformation, welche die XML-Struktur für die Ausführung der Interaktion zusammenstellt, in den Header eingefügt werden.
Zuerst wird der jeweilige Token aus der Konfigurations ausgelesen:
In beiden Transformationen wird der Token als Parameter übergeben:
In der Transformation wird der Parameter deklariert und benutzt:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:param name="API-Acces-Token" select="'unknown'" /> <!-- default value will point to missing parameter value --> <xsl:template match="/"> <ROOT> <REQUEST OPERATION="GET" URL="getList"> <HEADER> <Authorization>Bearer: <xsl:value-of select="$API-Acces-Token" /></Authorization> </HEADER> </REQUEST> </ROOT> </xsl:template> </xsl:stylesheet>
Verwendung von komplexen Daten
Benötigt die REST-API gleich einen ganzen Satz an Header-Parametern, die in allen Aufrufen gleich sein sollen, dann ist es einfacher, die Werte direkt in der Transformation aus der Konfiguration auszulesen.
Definition der Header in der Konfiguration
<ROOT> <Current-Environment>Dev</Current-Environment> <API-Acces-Token-Dev >w879f89f80ßd8diebfwle8ef08wefxs</API-Acces-Token-Dev> <API-Acces-Token-Prod>dhfweiofwlbfwiebfwle88uef08wefs</API-Acces-Token-Prod> <API-Header> <X-Client-ID>1234</X-Client-ID> <X-App-ID>TRANSCONNECT</X-App-ID> </API-Header> </ROOT>
Auslesen der Konfiguration in der Transformation
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:param name="API-Acces-Token" select="'unknown'" /> <!-- default value will point to missing parameter value --> <xsl:variable name="configuration" select="document( 'configuration.xml' )" /> <xsl:template match="/"> <ROOT> <REQUEST OPERATION="GET" URL="getList"> <HEADER> <Authorization>Bearer: <xsl:value-of select="$API-Acces-Token" /></Authorization> <xsl:copy-of select="$configuration//API-Header/*" /> </HEADER> </REQUEST> </ROOT> </xsl:template> </xsl:stylesheet>
Beispieldaten
Das komplette Beispiel können Sie als TRANSCONNECT Repository hier herunterladen (nicht auspacken, einfach ZIP im Manager als Repository-Datei auswählen).
10
- Antworten
-
- 28. September 2021 um 9:13 Uhr
Hallo Herr Uhr,vielen Dank für das gute Beispiel bzgl. einer XML Datei mit Environment Konstanten und deren Nutzung an mehreren Stellen.
Meine Frage dazu wäre, wie man so eine Konstante evlt. auch als Routingbedingung mit Hilfe von XPath auslesen/verwenden könnte? Haben Sie da Beispiele?
Besten Dank und Grüße
00- 29. September 2021 um 10:00 Uhr
Hallo,in den Routingbedingungen kann man nur auf den Inhalt und die Attribute einer Nachricht zugreifen. Auf weitere Ressourcen kann man dort nicht zugreifen.
Aber man kann man im Prozess die Konstante einlesen und dann in einer Alternative den Prozess vorzeitig beenden, wenn die Bedingung nicht erfüllt ist. Im Ende-Event kann auch eine individuelle Statusnachricht (z.B.: “Bedingung XYZ nicht erfüllt”) hinterlegt werden.
Ihr TRANSCONNECT-Team
00
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.