Der Mustercode 'SOAP Nodes' veranschaulicht, wie mithilfe der SOAPInput-, SOAPReply- und SOAPRequest-Knoten über ein HTTP- oder JMS-Transportprotokoll ein Web-Service bereitgestellt und genutzt werden kann.
Ausgangspunkt für den Mustercode ist eine WSDL-Datei (WSDL = Web Services Description Language), die einen vereinfachten Bestellservice definiert. Weitere Informationen dazu finden Sie im Abschnitt WSDL-Datei. Die WSDL-Datei, die sowohl eine HTTP- als auch eine JMS-Bindung enthält, verweist auf die Operationen, die in der WSDL definiert sind. Der Web-Service gibt stets eine Antwort zurück, die die Verfügbarkeit des bestellten Artikels anzeigt. Optional könnte zur Erweiterung des Web-Services ein Datenbankknoten zur Abfrage einer Bestandsdatenbank verwendet werden.
Mit dem Assistenten "Von WSDL- und/oder XSD-Dateien ausgehen" und der WSDL-Datei werden der Nachrichtensatz sowie zwei Nachrichtenflüsse erstellt, die zusammen diesen Mustercode bilden.
Mit dem Mustercode 'SOAP Nodes' werden folgende Tasks veranschaulicht:
In dem Mustercode kommen zwei Nachrichtenflüsse zum Einsatz. Der eine Nachrichtenfluss stellt einen Web-Service bereit, der andere nutzt einen Web-Service. Die Anforderungs- und Antwortnachrichten sind bei HTTP- und JMS-Web-Services gleich. Eine Beschreibung der Nachrichtenflüsse finden Sie im vorliegenden Abschnitt.
In der folgenden Abbildung ist der Nachrichtenfluss für den Web-Service-Provider dargestellt:
In der folgenden Tabelle sind die Knoten im Nachrichtenfluss für den Web-Service-Provider aufgeführt:
Knotentyp | Knotenname |
---|---|
SOAPInput | Input |
Untergeordneter Fluss | OrderService_Extract |
Rechnen | Compute Response |
SOAPReply | Reply |
Der SOAPInput-Knoten empfängt eingehende SOAP-Nachrichten und übergibt diese, sofern sie gültig sind, über den Nachrichtenfluss an den untergeordneten Nachrichtenfluss 'OrderService_Extract'. Der untergeordnete Nachrichtenfluss 'OrderService_Extract' wird über den Assistenten "Von WSDL- und/oder XSD-Dateien ausgehen" erstellt. In der folgenden Abbildung ist der untergeordnete Nachrichtenfluss für den Web-Service-Provider dargestellt:
In der folgenden Tabelle sind die Knoten im untergeordneten Nachrichtenfluss für den Web-Service-Provider aufgeführt:
Knotentyp | Knotenname |
---|---|
Eingabeterminal | in |
SOAPExtract | Extract |
Ausgabeterminal | Failure |
Label | ws_submitPORequest |
Ausgabeterminal | submitPORequest |
Der SOAPExtract-Knoten entfernt die SOAP-Rahmenanweisung aus einer SOAP-Nachricht. In diesem Mustercode bleibt nach Entfernen der SOAP-Rahmenanweisung eine XML-Nachricht in der XMLNSC-Domäne übrig, die auf Knoten wie dem Mapping- oder Rechenknoten verwendet werden kann. Die Nachricht wird nun vom SOAPExtract-Knoten basierend auf der aufgerufenen Web-Service-Operation an eine Zieladresse weitergeleitet. In diesem Mustercode wird nur eine Operation verwendet. Falls die als Ausgangspunkt verwendete WSDL-Datei mehrere Operationen umfasst, bietet der Assistent "Von WSDL- und/oder XSD-Dateien ausgehen" die Möglichkeit, mehrere Operationen zu implementieren. Bei Auswahl mehrerer Operationen verfügt der untergeordnete Nachrichtenfluss über mehrere Zieladressen, was wiederum zur Folge hat, dass der übergeordnete Nachrichtenfluss mehrere Ausgabeterminals enthält.
Wenn die XMLNSC-Nachricht den untergeordneten Nachrichtenfluss verlässt und zum Hauptnachrichtenfluss für den Provider zurückkehrt, gelangt sie an einen Rechenknoten. Über den Rechenknoten kann der ursprüngliche SOAP-Hauptteil nun als XML-Daten angegeben werden, und mit den Daten in der Nachricht können ESQL-Operationen ausgeführt werden. In dem Mustercode werden die Nachrichtendaten ignoriert, gültige XML-Daten werden komplett neu erstellt. Diese Daten werden dann an den SOAPReply-Knoten gesendet. Dieser erstellt eine SOAP-Nachricht, die an den Web-Service-Konsumenten zurückgegeben wird, der den Web-Service-Aufruf eingeleitet hat.
In der folgenden Abbildung ist der Nachrichtenfluss für den Web-Service-Konsumenten dargestellt:
In der folgenden Tabelle sind die Knoten im Nachrichtenfluss für den Web-Service-Konsumenten aufgeführt:
Knotentyp | Knotenname |
---|---|
MQInput | SOAPSample_IN |
Rechnen | Compute Request (Rechenanforderung) |
Untergeordneter Fluss | Invoke_submitPO |
Rechnen | Compute Response |
MQOutput | SOAPSample_OUT |
MQOutput | SOAPSample_FAULT |
Der Nachrichtenfluss für den Web-Service-Konsumenten wird über eine WebSphere MQ-Nachricht eingeleitet, die in der von dem MQInput-Knoten überwachten Warteschlange ankommt. Bei der Nachricht handelt es sich um eine XML-Nachricht in der XMLNSC-Domäne. Die Nachricht gelangt an einen Rechenknoten, wo aus den eingehenden Daten XML-Daten erstellt werden, die an den Web-Service gesendet werden. Anschließend wird die Nachricht im Nachrichtenfluss weiter bis zum untergeordneten Nachrichtenfluss 'Invoke_submitPO' übergeben. Der untergeordnete Nachrichtenfluss 'Invoke_submitPO' wird über den Assistenten "Von WSDL- und/oder XSD-Dateien ausgehen" erstellt.
In der folgenden Abbildung ist der untergeordnete Nachrichtenfluss für den Web-Service-Konsumenten dargestellt:
In der folgenden Tabelle sind die Knoten im untergeordneten Nachrichtenfluss für den Web-Service-Konsumenten aufgeführt:
Knotentyp | Knotenname |
---|---|
Eingabeterminal | in |
SOAPRequest | Request |
Ausgabeterminal | fault |
SOAPExtract | Extract |
Ausgabeterminal | Failure |
Label | ws_submitPOResponse |
Ausgabeterminal | submitPOResponse |
Der SOAPRequest-Knoten erstellt anhand der eingehenden XML-Daten eine gültige SOAP-Nachricht, die an den durch die Knoteneigenschaften definierten Web-Service gesendet werden kann. Falls eine gültige Antwort empfangen wird, wird diese an einen SOAPExtract-Knoten übergeben, der die SOAP-Rahmenanweisung der Antwort entfernt und die Nachricht an die XMLNSC-Domäne zurückgibt. Die Nachricht wird dann an den Kennsatzknoten 'ws_submitPOResponse' weitergeleitet und verlässt den untergeordneten Nachrichtenfluss.
Im Hauptnachrichtenfluss für den Konsumenten wird die Ausgabenachricht an einen MQOutput-Knoten gesendet, der die XML-Daten in die angegebene WebSphere MQ-Warteschlange schreibt. Eine Fehlernachricht wird an einen MQOutput-Knoten gesendet, der die SOAP Fault-Daten in die angegebene WebSphere MQ-Warteschlange schreibt.
Der Nachrichtenfluss des Web-Clients wird von einer WebSphere MQ-Nachricht gesteuert. Zum Ausführen des Mustercodes steht eine Testclientdatei zur Verfügung. In dieser Datei wird die folgende XML-Nachricht verwendet:
<OrderMessage> <localElement> <FirstName>Message</FirstName> <LastName>Broker</LastName> <Street>IBM</Street> <City>IBM</City> <ZipCode>IBM</ZipCode> <PartNumber>Some Part</PartNumber> <Quantity>1</Quantity> </localElement> </OrderMessage>
Das gültige Format für eine Web-Service-Anforderungsnachricht und eine Antwortnachricht wird in einem bearbeiteten Schemaauszug dargestellt:
<xsd:element name="submitPORequest"> ... <xsd:complexType> <xsd:sequence> <xsd:element name="partNo" type="xsd:string"/> <xsd:element name="partQuantity" type="xsd:int"/> <xsd:element name="personName"> <xsd:complexType> <xsd:sequence> <xsd:element name="firstName" type="xsd:string"/> <xsd:element name="lastName" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> <xsd:element name="address"> <xsd:complexType> <xsd:sequence> <xsd:element name="street" type="xsd:string"/> <xsd:element name="city" type="xsd:string"/> <xsd:element name="zipCode" type="xsd:string"/> </xsd:sequence> </xsd:complexType> </xsd:element> </xsd:sequence> </xsd:complexType> </xsd:element>
<xsd:element name="submitPOResponse"> ... <xsd:complexType> <xsd:sequence> <xsd:element name="orderStatus" type="xsd:string"/> <xsd:element name="orderAmt" type="xsd:int"/> <xsd:element name="partNo" type="xsd:string"/> <xsd:element name="partQuantity" type="xsd:int"/> </xsd:sequence> </xsd:complexType> </xsd:element>