Altova MapForce 2025 Enterprise Edition

Behandlung der HTTP Response auf Basis von Bedingungen

Zur Startseite Zurück Nach oben Weiter

In diesem Kapitel wird beschrieben, wie Sie HTTP Responses auf Basis von Bedingungen behandeln. In dem in diesem Kapitel beschriebenen Szenario wird angenommen, dass im Response Body abhängig vom Wert des Accept HTTP Request Headers entweder ein JSON- oder ein XML-Inhaltstyp zurückgegeben wird. Zusätzlich dazu gibt der Webservice im Fall eines Fehlers (Fehlercode > 299) einen nicht definierten Inhaltstyp zurück.

 

Das in diesem Kapitel beschriebene Szenario eignet sich, um die Response bedingt auf Basis des HTTP-Statuscodes und Inhaltstyps zu behandeln.

 

Implementierung

Um JSON und XML Responses des Webservice im selben Mapping zu behandeln, können Sie mehrere Body-Elemente erstellen. Gehen Sie dazu folgendermaßen vor: Klicken Sie mit der rechten Maustaste in der Webservice-Komponente auf das Body-Element und wählen Sie im Kontextmenü den Befehl Body-Node hinzufügen nach.

 

In der Abbildung unten sehen Sie ein Mapping, in dem die Webservice-Komponente zwei Input-Parameter und drei Response Body-Elemente hat. Außerdem enthält das Mapping drei Ausgabekomponenten.

mf_ws_conditional_body_04

Input-Parameter

Das oben gezeigte Mapping erhält zwei Input-Parameter. Der erste Parameter liefert den Inhaltstyp. Sein Wert kann application/json oder application/xml sein. Der zweite Parameter liefert die numerische ID des abzurufenden Produkts.

 

Wenn Sie den Wert application/json als Input-Parameter bereitstellen, klicken Sie auf die Schaltfläche ic-preview-buttondown Vorschau der JSON-Zielkomponente. Wenn der Wert des Input-Parameters hingegen application/xml ist, klicken Sie auf die Schaltfläche ic-preview-buttondown Vorschau der XML-Zielkomponente. Je nachdem, welche Zielkomponente ausgewählt ist, wird bei erfolgreich durchgeführtem Webservice-Aufruf eine JSON-Datei bzw. eine XML-Datei generiert.

 

Wenn der Webservice-Aufruf einen Statuscode größer als 300 (Fehler) zurückgibt, gelangt die HTTP Response zum dritten Body-Datenelement. Da wir den genauen Inhaltstyp nicht kennen, werden wir ihn mit Hilfe der Funktion decode-mime-entity dekodieren. Der Wert des Zeichensatzes wird vom Webservice im Response Header nicht bereitgestellt, daher wurde der Konstantenwert utf-8 mit der Dekodierungsfunktion verbunden.

 

Response-Strukturen

Jedes der drei Response Body-Datenelemente kann über die dazugehörige excel1-compicon-Schaltfläche konfiguriert werden. Bei Klick auf diese Schaltfläche wird das Dialogfeld Response-Struktur geöffnet (Abbildung unten).

 

application/json

Im ersten Body-Element wird als application/json zurückgegebener Inhalt behandelt, wenn der Statuscode zwischen 200 und 299 liegt. In der Abbildung unten sehen Sie, wie die JSON Response-Struktur konfiguriert ist.

mf_ws_conditional_body_01

 

application/xml

Im zweiten Body-Element wird als application/xml zurückgegebener Inhalt behandelt, wenn der Statuscode zwischen 200 und 299 liegt. Außerdem wurde das Schema der erwarteten XML Response-Struktur definiert.

mf_ws_conditional_body_02

 

error

Im dritten Body-Element wird als */* zurückgegebener Inhalt behandelt, wenn der Webservice einen Fehler-Statuscode (zwischen 300 und 599) zurückgibt.

mf_ws_conditional_body_03

 

Achtung

Beachten Sie bitte, dass für jede konfigurierte HTTP Response ein Webservice-Aufruf durchgeführt wird. Um unnötige Webservice-Aufrufe zu vermeiden, wird empfohlen, eine Zwischendatei (und nicht eine Variable) zu erstellen, alle Ausgaben (Body-Datenelemente) auf diese Zwischenkomponente zu mappen, und diese Zwischenkomponente anschließend in die entsprechende Anzahl von Ausgaben aufzuteilen. In den folgenden Tutorials wird in erläutert, wie Sie mehrere Quelldateien zu einer Zieldatei zusammenführen und wie Sie eine (oder mehrere) Quelldatei(en) auf mehrere Zieldateien aufteilen:

 

Tutorial: Mehrere Quellkomponenten auf eine Zielkomponente

Tutorial: Mehrere Quellkomponenten auf mehrere Zielkomponenten

Video-Demo: Mappen einer Komponente auf mehrere andere

 

Bedenken Sie außerdem Folgendes: Wenn der Parent-Node einer Ausgabestruktur nicht mit dem Response-Node einer Webservice-Komponente verbunden ist, wird für jeden Child-Node ein separater Webservice-Aufruf durchgeführt. Um zu vermeiden, dass mehrere Webservice-Aufrufe durchgeführt werden, müssen Sie den Parent-Kontext angeben, indem Sie den Parent-Node mit dem Response-Node verbinden. Nähere Informationen dazu finden Sie unter Parent-Kontext in Webservices.

 

© 2018-2024 Altova GmbH