Informationen zum Mustercode 'Address Book'

Der Mustercode 'Address Book' zeigt, wie Sie die SOAPInput-Knoten, SOAPReply-Knoten und SOAPRequest-Knoten verwenden, um einen Web-Service über einen HTTP- oder JMS-Transport sowohl anzubieten als auch zu nutzen.

Ausgangspunkt für den Mustercode ist eine WSDL-Datei, die ein Adressbuch definiert (siehe 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 führt zwei Operationen aus: er speichert und sucht Adressen. Wenn Sie Zugriff auf WebSphere Application Server haben, können Sie den Provider und den Nutzer, die in diesem Mustercode enthalten sind, gegen den Provider und Nutzer austauschen, die im Mustercode 'Address Book' in WebSphere Application Server für SOAP über HTTP bereitgestellt werden. Der mit WebSphere Application Server bereitgestellte Mustercode 'Address Book' unterstützt keinen SOAP über JMS-Transport. Zur Unterstützung des SOAP über JMS-Transports müssen Sie den Mustercode 'Web Service' neu generieren, indem Sie eine JMS-Bindung und einen Port zum WSDL-Code hinzufügen, um mit WebSphere Application Server zusammenzuarbeiten; siehe WSDL-Datei in diesem Beispiel.

Verwenden Sie zum Erstellen der Nachrichtengruppe und eines leeren Nachrichtenflusses für den Provider den Assistenten "Von WSDL- und/oder XSD-Dateien ausgehen" zusammen mit der WSDL-Datei. Danach können Sie manuell einen Nutzernachrichtenfluss erstellen.

Im Mustercode 'Address Book' werden folgende Aufgaben veranschaulicht:

  1. Bereitstellung eines Web-Services über die SOAPInput- und SOAPReply-Knoten
  2. Nutzung eines Web-Service über einen SOAPRequest-Knoten

Nachrichtenflüsse

Der Mustercode 'Address Book' verwendet zwei Nachrichtenflüsse. Der erste Nachrichtenfluss stellt einen Web-Service bereit, der andere nutzt einen Web-Service.

Provider-Nachrichtenfluss

Im folgenden Diagramm wird der Nachrichtenfluss für den Web-Service-Provider dargestellt:

Nachrichtenfluss für Web-Service-Provider

In der folgenden Tabelle sind die Knoten im Nachrichtenfluss für den Web-Service-Provider aufgeführt.

Knotentyp Knotenname
SOAPInput SOAP Input
Knoten zur Weiterleitung an Zieladressen Knoten zur Weiterleitung an Zieladressen
Label saveAddress
Rechnen SaveCompute
Label findAddress
Rechnen FindCompute
SOAPReply SOAP Reply-Knoten

Der Nachrichtenfluss wird mithilfe eines SOAPInput- und SOAPReply-Knotens erstellt. Um automatisch alle Eigenschaften für den SOAPInput-Knoten einzugeben, ziehen Sie die WSDL-Datei in den SOAPInput-Knoten. (Die WSDL-Datei befindet sich nur dann im Nachrichtensatzprojekt, wenn Sie den Assistenten "Von WSDL- und/oder XSD-Dateien ausgehen" verwendet haben.)

Der SOAPInput-Knoten empfängt eingehende SOAP-Nachrichten und übergibt diese, sofern sie gültig sind, über den Nachrichtenfluss bis zum RouteToLabel-Knoten. Der RouteToLabel-Knoten leitet die Nachricht zum Kennsatzknoten weiter, dessen Name sich in der lokalen Umgebung (OutputLocalEnvironment.Destination.RouterList.DestinationData[1].labelname) befindet. Sie müssen diesen Pfad nicht explizit festlegen, wenn Sie mit eingehenden SOAP-Nachrichten arbeiten, da der SOAPInput-Knoten den Pfad zum Namen der aufgerufenen Operation automatisch festlegt. Sie müssen jedoch den SOAPInput-Knoten mit einem RouteToLabel-Knoten verbinden und für jede Operation einen Label-Knoten erstellen.

Wenn die aufgerufene Operation saveAddress ist, wird die Nachricht an den 'SaveCompute'-Knoten gesendet, bei dem die Adresse in einer gemeinsamen ESQL-Variablen gespeichert wird. Gemeinsame Variablen bestehen für den Bereich des Nachrichtenflusses; wenn Sie den Nachrichtenfluss erneut implementieren, verlieren Sie gespeicherte Adressen.

Wenn die aufgerufene Operation findAddress ist, wird die Nachricht an den 'FindCompute'-Knoten gesendet, bei dem die gemeinsame Variable nach der Adresse der Person abgefragt wird, deren Name in der Eingabenachricht angegeben wird. Wenn die Adresse gefunden wird, wird sie zurückgegeben; befindet sich die Adresse nicht in der gemeinsamen Variablen, wird ein SOAP-Fehler erstellt.

Nutzer-Nachrichtenfluss

In der folgenden Abbildung ist der Nachrichtenfluss für den Web-Service-Nutzer dargestellt:

Nachrichtenfluss für Web-Service-Nutzer

In der folgenden Tabelle werden die Knoten im Nachrichtenfluss für den Web-Service-Nutzer aufgeführt:

Knotentyp Knotenname
MQInput AddressBook_IN
Rechnen RoutingCompute
Knoten zur Weiterleitung an Zieladressen Knoten zur Weiterleitung an Zieladressen
Label findAddress
Rechnen FindCompute
SOAPRequest findAddress
Label saveAddress
Rechnen SaveCompute
SOAPRequest saveAddress
Rechnen ComputeResponse
MQOutput AddressBook_OUT
MQOutput AddressBook_FAULT

Der Nachrichtenfluss für den Web-Service-Nutzer 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. Um den RouteToLabel-Knoten zu verwenden, müssen Sie den Wert in 'local' explizit für diesen Nachrichtenfluss festlegen, indem Sie den RoutingCompute-Knoten verwenden:

OutputLocalEnvironment.Destination.RouterList.DestinationData[1].labelname = InputRoot.XMLNSC.request.operation 

Die Nachricht wird dann an den korrekten Kennsatzknoten weitergeleitet. Der Kennsatzknoten leitet die Nachricht an einen Rechenknoten weiter, der eine ausgehende Anforderungsnachricht in der SOAP-Domäne erstellt, indem er die Eingabenachricht verwendet. Die Nachricht wird an den korrekten SOAPRequest-Knoten weitergeleitet, der den Provider-Nachrichtenfluss aufruft. Die Antwortnachricht wird an einen MQOutput-Knoten gesendet, der die XML-Daten in die angegebene WebSphere MQ-Warteschlange schreibt.

Nachrichten

Der Nachrichtenfluss des Web-Service-Nutzers wird von einer WebSphere MQ-Nachricht gesteuert. Es wird eine Testclientdatei zur Verfügung gestellt, um den Mustercode unter Verwendung der folgenden XML-Nachricht auszuführen. Die erste Nachricht speichert eine Adresse und die zweite Nachricht sucht nach dieser. Das erste Element gibt die Operation an, die aufgerufen werden soll; der Rest der Nachricht wird verwendet, um die SOAP-Nachricht zu erstellen, die an den Provider-Nachrichtenfluss gesendet wird.

<request>
  <operation>saveAddress</operation>
  <Name>Dave</Name>
  <City>Carlisle</City>
  <Street>Welton</Street>
  <Province>Cumbria</Province>
  <PostalCode>NE2 3HP</PostalCode>
  <Area>1</Area>
  <Prefix>2</Prefix>
  <Local>3</Local>
</request> 

Die zweite Eingabenachricht sucht dann nach dieser Adresse:

<request>
  <operation>findAddress</operation>
  <Name>Dave</Name>
</request>

Es werden auch SOAP-Nachrichten bereitgestellt, um den Provider direkt aufzurufen. Diese Nachrichten entsprechen denen, die der Nutzernachrichtenfluss erstellt und von den beiden SOAPRequest-Knoten sendet. Die erste SOAP-Nachricht speichert die Adresse:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns3="http://addressbook.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Body>
    <ns3:Person>
      <ns3:Name>Dave</ns3:Name>
      <ns3:Address>
        <ns3:City>Carlisle</ns3:City>
        <ns3:Street>Welton</ns3:Street>
        <ns3:Province>Cumbria</ns3:Province>
        <ns3:PostalCode>NE2 3HP</ns3:PostalCode>
        <ns3:PhoneNumber>
          <ns3:Area>1</ns3:Area>
          <ns3:Prefix>2</ns3:Prefix>
          <ns3:Local>3</ns3:Local>
        </ns3:PhoneNumber>
      </ns3:Address>
    </ns3:Person>
  </soapenv:Body>
</soapenv:Envelope>

Die zweite Eingabenachricht sucht nach der Adresse:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="http://addressbook.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Body>
    <tns:Name>Dave</tns:Name>
  </soapenv:Body>
</soapenv:Envelope>

Zurück zum Beginn des Mustercodes