Erstellen eines SOAP-Webservice-Projekts
In diesem Kapitel wird der im Kapitel SOAP-Webservice-Konfiguration beschriebene Schritt 1 behandelt und erläutert, wie Sie einen SOAP-Webservice in MapForce erstellen. Alle in diesem Beispiel beschriebenen Dateien stehen im Ordner Tutorial zur Verfügung. Die Aufgabe dieses SOAP-Webservice ist es, Author-Datensätze, die bestimmten Kriterien entsprechen, aus einer XML-Datei abzurufen.
Wichtige Punkte
Beachten Sie die folgenden Punkte:
•Die Erstellung eines Webservice in MapForce ist unabhängig von der Ziel-Programmiersprache. Die Unterschiede entstehen erst beim Kompilieren und Bereitstellen des Webservice auf einem Webserver.
•Sie können für einen Webservice Java- oder C#-Code generieren.
•In unserem Beispiel verwenden wir zum Generieren von SOAP-Beispiel-Requests, mit Hilfe derer wir eine Vorschau auf die Ausgabe anzeigen können, Altova XMLSpy. Webservices können auch in MapForce erstellt werden. In diesem Fall benötigen Sie jedoch einen SOAP-Client, der in der Lage ist, SOAP-Requests anhand von WSDL-Dateien zu generieren.
Erstellen eines Webservice-Projekts: Grundlegende Schritte
Um ein SOAP-Webservice-Projekt in MapForce zu erstellen, müssen folgende Schritte durchgeführt werden:
1.Zuerst muss eine WSDL (Web Services Description Language)-Datei erstellt werden, in der die Struktur des Service, die Operationen, Input/Output-Parameter und das Protokoll für die Kommunikation beschrieben sind. In diesem Beispiel wurde die WSDL-Datei mit Hilfe von Altova XMLSpy erstellt. Nähere Informationen zu WSDL-Dokumenten finden Sie in der WSDL-Spezifikation.
2.Im zweiten Schritt muss in MapForce ein neues Webservice-Projekt basierend auf der WSDL-Datei erstellt werden. In diesem Schritt importieren wir die WSDL-Datei in MapForce und geben unserem Projekt einen Namen. Das Projekt erscheint dann mit seinem Inhalt im Projektfenster.
3.Im nächsten Schritt wird die Operation getAuthor erstellt. Dabei wird eine XML-Datei, aus der Author-Datensätze abgerufen werden, hinzugefügt, und es wird ein Filter definiert, damit nur die relevanten Daten auf die Response-Struktur gemappt werden.
4.Im letzten Schritt der Webservice-Konfiguration können wir eine Vorschau auf die Ausgabe des Webservice anzeigen, bevor wir den Service auf dem Server bereitstellen. Um eine Ausgabevorschau anzeigen zu können, stellen wir einen SOAP-Beispiel-Request bereit, der eine Suchabfrage enthält und der später an den Server gesendet wird, auf dem der Webservice bereitgestellt wurde.
Schritt 1: Vorbereiten einer WSDL-Datei
In der Abbildung unten sehen Sie die Struktur des WSDL-Dokuments getAuthor.wsdl (WSDL-Ansicht von XMLSpy). Es wurde eine einzige Operation namens getAuthor definiert. Nähere Informationen zur Struktur einer WSDL-Datei finden Sie unter WSDL-Dokumentstruktur. Eine Anleitung, wie Sie ein WSDL-Dokument in Altova XMLSpy erstellen, finden Sie im Abschnitt WSDL-Tutorial.
Beachten Sie, dass Sie eine gültige WSDL-Datei bereitstellen müssen, um ein MapForce Werbservice-Projekt erstellen zu können.
Response-Struktur
Beachten Sie, dass wir die WSDL-Datei in der Textansicht von XMLSpy geändert haben, um folgende Struktur in die Response Message zu inkludieren:
<xsd:complexType name="Author">
<xsd:sequence>
<xsd:element name="Name" type="xsd:string"/>
<xsd:element name="Country" type="xsd:string"/>
<xsd:element name="Website" type="xsd:string"/>
<xsd:element name="Publication" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Title" type="xsd:string"/>
<xsd:element name="ISBN" type="xsd:string"/>
<xsd:element name="Publisher" type="xsd:string"/>
<xsd:element name="PrintLength" type="xsd:integer"/>
<xsd:element name="Year" type="xsd:integer"/>
<xsd:element name="Genre" type="xsd:string"/>
<xsd:element name="Price" type="xsd:integer"/>
</xsd:sequence>
<xsd:attribute name="ID" use="required"/>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="ID" use="required"/>
</xsd:complexType>
Diese Struktur wird in der Webservice-Zielkomponente (siehe Schritt 2 unten) angezeigt und das Ergebnis der Abfrage wird auf diese Struktur gemappt.
Schritt 2: Erstellen eines Webservice-Projekts
Um in MapForce ein Webservice-Projekt zu erstellen, gehen Sie folgendermaßen vor:
1.Wählen Sie im Menü Datei den Befehl Neu oder klicken Sie auf die Symbolleisten-Schaltfläche und wählen Sie Webservice-Projekt aus.
2.Navigieren Sie zur Datei getAuthor.wsdl. Nach Auswahl der WSDL-Datei werden die restlichen Felder automatisch ausgefüllt (Abbildung unten).
3.Klicken Sie auf OK.
4.Geben Sie den Namen des neuen WSDL-Projekts ein, wenn Sie dazu aufgefordert werden (in unserem Beispiel getAuthor) und klicken Sie auf Speichern.
Im Projektfenster sehen Sie nun das Projekt, das die WSDL-Datei, den Port, die Operationen und ein mit diesem Service verknüpftes Mapping enthält (Abbildung unten)
Schritt 3: Erstellen einer getAuthor-Operation
Nachdem Sie das Projekt erstellt haben, steht im Projektfenster ein neues Mapping namens getAuthor.mfd zur Verfügung. Doppelklicken Sie auf dieses Mapping, um es zum Mapping-Bereich hinzuzufügen. Das Mapping enthält zu diesem Zeitpunkt zwei Webservice-Komponenten: getAuthor (Input) und getAuthor (Output) (Abbildung unten).
Die getAuthor (Input)-Komponente enthält den Abfrageteil, mit Hilfe dessen eine XML-Datei über den Webservice abgefragt wird. Die getAuthor (Output)-Komponente enthält die in der WSDL-Datei definierte Author-Struktur (Response-Struktur oben). Zu diesem Zeitpunkt sind keine weiteren Komponenten oder Verbindungen vorhanden.
Hinzufügen von Authors.xml
Im nächsten Schritt wird nun eine XML-Datei namens Authors.xml, aus der Daten abgerufen werden, hinzugefügt. Fügen Sie Authors.xml zum Mapping hinzu und verbinden Sie die Nodes, wie in der Abbildung unten gezeigt.
Die Verbindung zwischen den Nodes part:Query und part:Result stellt den Webservice-Aufruf dar. Die Daten in Authors.xml werden an das Element Author der getAuthor-Output-Komponente übergeben.
Definieren eines Filters
Im nächsten Schritt wird ein Filter für die Verbindung zwischen den Author-Elementen definiert. Um einen Filter zu definieren, klicken Sie mit der rechten Maustaste auf die Verbindung zwischen den Author-Elementen und wählen Sie im Kontextmenü den Befehl Filter einfügen. Zusätzlich dazu benötigen wir die Funktionen add und equal, deren Ergebnisse an den Parameter Boolean des Filters geliefert werden (Abbildung unten). Die Funktion equal vergleicht den Abfragestring mit dem Wert des Elements Website der einzelnen Autoren. Wenn der Wert des Elements Website eines Author-Datensatzes mit dem Abfragestring übereinstimmt, wird dieser Author-Datensatz auf die Webservice-Zielkomponente gemappt.
Ausgabevorschau
Sie können in MapForce eine Vorschau von Mappings, die anhand von WSDL-Dateien erstellt wurden, anzeigen, bevor Sie den Service auf einem Webserver bereitstellen. Zur Anzeige einer Vorschau auf ein solches Mapping müssen Sie einen SOAP-Beispiel-Request (im XML-Format), der der WSDL-Datei entspricht, bereitstellen. Sie können mit Altova XMLSpy oder einem anderen SOAP-Client Ihrer Wahl für jede Operation einen SOAP-Beispiel-Request erstellen.
Wenn Sie XMLSpy verwenden, öffnen Sie getAuthor.wsdl und klicken Sie auf den Menübefehl SOAP | Neuen SOAP Request erzeugen. Im nächsten Schritt wird nun die SOAP-Request-Datei zum Mapping hinzugefügt. Gehen Sie folgendermaßen vor:
1.Doppelklicken Sie auf die Überschrift der getAuthor (Input)-Komponente. Daraufhin wird das Dialogfeld Komponenteneinstellungen geöffnet (Abbildung unten).
2.Wenn Sie bereits eine SOAP-Beispiel-Request-Datei haben, klicken Sie auf Durchsuchen und wählen Sie die gewünschte Datei aus. Wenn neben MapForce auch XMLSpy installiert ist, können Sie direkt von MapForce aus einen Beispiel-Request generieren, indem Sie auf Erstellen klicken. Bei Klick auf Erstellen werden Sie aufgefordert, der neuen Request-Datei einen Namen zu geben und einen Ordner für diese Datei auszuwählen. Anschließend werden Sie an XMLSpy weitergeleitet, wo Sie einen Beispiel-Abfragestring eingeben und Ihre Request-Datei speichern müssen.
3.Klicken Sie in den Komponenteneinstellungen auf OK.
getAuthorRequest.xml
Wir haben für dieses Beispiel in XMLSpy eine Request-Datei namens getAuthorRequest.xml erstellt (Codefragment unten). Diese Request-Datei wird in das Mapping importiert, wodurch Sie eine Vorschau auf die Ausgabe anzeigen können. Die Request-Datei enthält den Suchstring Iceland. Der Filter läuft über alle Autoren. Falls Autoren aus Island (Iceland) in Authors.xml vorhanden sind, werden diese Autorendatensätze auf die Response-Struktur gemappt.
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<SOAP-ENV:Body>
<Query xsi:type="xsd:string">Iceland</Query>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
Ausgabevorschau
Um die Response Message zu sehen, öffnen Sie das Ausgabefenster. Im Codefragment unten sehen Sie einen Auszug aus der Response Message. Es wurden zwei Autoren aus Island gemappt (die Länder sind unten gelb markiert).
<?xml version="1.0" encoding="UTF-8"?>
<soap-env:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/">
<soap-env:Body>
<Result>
<Author ID="2">
<Name>Ragnar Jonasson</Name>
<Country>Iceland</Country>
<Website>ragnarjonasson.com</Website>
<Publication ID="2">...</Publication>
<Publication ID="3">...</Publication>
<Publication ID="28">...</Publication>
<Publication ID="29">...</Publication>
</Author>
<Author ID="27">
<Name>Arnaldur Indridason</Name>
<Country>Iceland</Country>
<Website>n/a</Website>
<Publication ID="34">
<Title>The Darkness Knows</Title>
<ISBN>125076548X</ISBN>
<Publisher>Minotaur Books</Publisher>
<PrintLength>346</PrintLength>
<Year>2021</Year>
<Genre>Crime & Mystery</Genre>
<Price>14.36</Price>
</Publication>
</Author>
</Result>
</soap-env:Body>
</soap-env:Envelope>
Nächste Schritte
Sie sind nun bereit, Code zu generieren, der den Webservice (Java oder C#) implementiert, den Code zu erzeugen und den Service auf einem Server bereitzustellen. Nähere Informationen dazu finden Sie unter Generieren eines SOAP Webservice (Java).