Der Mustercode 'Asynchronous Consumer' zeigt, wie Sie einen Web-Service mithilfe asynchroner Knoten aufrufen können. Der Web-Service 'Web Services Definition Language (WSDL)' wird in die Tools importiert und zur Konfiguration des SOAPAsyncRequest-Knotens verwendet, um Web-Service-Operationen aufzurufen. Dieser Mustercode veranschaulicht zudem, wie bestehende WebSphere MQ-Schnittstellen so erweitert werden können, dass Web-Service-Anforderungen gestellt werden können.
Der Mustercode verwendet zunächst einen HTTP-Transport, kann aber so geändert werden, dass er JMS verwendet (siehe Abschnitt Mustercode 'Asynchronous Consumer' für Verwendung eines JMS-Transports konfigurieren).
Bei dem Web-Service im Mustercode handelt es sich um einen vereinfachten Bestellservice mit nur einem Vorgang. Der Web-Service wird im Mustercode als Nachrichtenfluss bereitgestellt. Der Web-Service gibt immer eine Antwort zurück, die anzeigt, ob das bestellte Teil verfügbar ist. Optional kann zur Erweiterung des Web-Services ein Datenbankknoten zur Abfrage einer Bestandsdatenbank verwendet werden.
Im Mustercode 'Asynchroner Verbraucher' werden folgende Aufgaben veranschaulicht:
Das folgende Diagramm zeigt den Web-Client-Nachrichtenfluss:
Knotentyp | Knotenname |
---|---|
MQInput | MQWSInput |
MQOutput | MQWSOutput |
Rechnen | Compute Request (Rechenanforderung), Format Response (Formatantwort) |
SOAPAsyncRequest-Knoten | SOAP Asynchronous Request (Asynchrone SOAP-Anforderung) |
SOAPAsyncResponse-Knoten | SOAP Asynchronous Response (Asynchrone SOAP-Antwort) |
Eine Web-Service-Anforderung wird mithilfe des Knotens 'Compute Request' in der SOAP-Domäne aus
einer WebSphere MQ-Nachricht erstellt. Die Web-Service-Operation wird über den Knoten 'SOAP
Asynchronous Request' aufgerufen und der paarige Knoten 'SOAP Asynchronous Response' empfängt die
Antwort.
Abschließend formatiert der Knoten 'Format Response' die Antwort als WebSphere MQ-Nachricht.
Das folgende Diagramm zeigt den Web-Service-Nachrichtenfluss:
Knotentyp | Knotenname |
---|---|
SOAPInput | SOAP Input |
Knoten zur Weiterleitung an Zieladressen | Route WS Operation (WS-Operation weiterleiten) |
Label | submitPO (PO senden) |
Rechnen | Compute Response |
SOAPReply | SOAP Reply-Knoten |
Eine eingehende SOAP-Nachricht wird unter Verwendung des 'Route WS Operation'-Knotens an den 'submitPO'-Knoten weitergeleitet. In diesem Beispiel wird nur eine Operation vom Web-Service des Mustercodes angeboten. Mithilfe mehrerer Label-Knoten können Sie verschiedene Operationen bearbeiten, wenn Ihr Web-Service mehrere Operationen anbietet. Die SOAP-Antwort wird im Knoten 'Compute Response' generiert, bevor sie an den Web-Client zurückgesendet wird.
Der Web-Client-Nachrichtenfluss wird von einer WebSphere MQ-Nachricht gesteuert. Zum Ausführen des Mustercodes steht eine Testclientdatei zur Verfügung, die das im folgenden Screenshot gezeigte Nachrichtenformat verwendet:
Das gültige Format für eine Web-Service-Anforderungsnachricht und eine Antwortnachricht wird im folgenden bearbeiteten Schemaauszug gezeigt:
<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>
Nachdem Sie den Mustercode ausgeführt haben, können Sie ihn bei Bedarf erweitern, um eine nicht gültige Anforderungsnachricht zu senden. Um eine ungültige Anforderungsnachricht zu senden, müssen Sie den Knoten 'Compute Request' so bearbeiten, dass dem SOAP-Nachrichtenhauptteil fehlerhafte Elemente hinzugefügt werden. Es muss eine Verbindung zum Fehlerterminal im SOAPAsyncRequest-Knoten bestehen, da der Web-Service eine SOAP-Fehlernachricht generiert. Details zu SOAP-Fehlern finden Sie im Abschnitt SOAP-Fehler der Dokumentation zu WebSphere Message Broker.