Im Mustercode wird die Operation aus der SOAP-Anforderungsnachricht extrahiert und die URL des Web-Service-Providers über einen benutzerdefinierten, konfigurierbaren Service abgerufen.
Der Mustercodeassistent überschreibt die URL für die SOAPRequest-Knoten in den BAR-Dateien des Nutzernachrichtenflusses. Wenn Sie die BAR-Dateien neu erstellen, werden diese Einstellungen möglicherweise gelöscht und der Gateway-Nachrichtenfluss nicht aufgerufen.
Der Mustercode 'Web Services Gateway' veranschaulicht folgende Aufgaben:
Machen Sie sich zunächst mit den vorhandenen Mustercodes vertraut, auf denen dieser Mustercode aufbaut.
Das folgende Diagramm zeigt den Nachrichtenfluss 'Web Services Gateway':
In der folgenden Tabelle werden die Knoten im Nachrichtenfluss aufgeführt:
Knotentyp | Knotenname |
---|---|
SOAPInput | GatewayInput |
JavaCompute-Knoten | ComputeURL |
SOAPRequest | SOAP Request |
SOAPReply | GatewayReply |
Der SOAPInput-Knoten wird im Gateway-Modus ausgeführt und akzeptiert Anforderungen der Nutzernachrichtenflüsse des Mustercodes 'Address Book' oder des Mustercodes 'SOAP Node'.
Der JavaCompute-Knoten entnimmt der eingehenden Anforderungsnachricht den Operationsnamen und speichert ihn in 'csName'. Der Konfigurationsassistent dieses Mustercodes erstellt einen benutzerdefinierten, konfigurierbaren Service mit dem Namen 'Gateway' sowie eine Eigenschaft, die mit den Operationsnamen für zwei Nutzernachrichtenflüsse aus den vorhandenen Mustercodes übereinstimmt. Über den Broker-Proxy wird der Wert des konfigurierbaren Service abgerufen und die URL für die Anforderung in der lokalen Umgebung festgelegt.
List nodeset = (List)message.getRootElement().evaluateXPath("SOAP/Body/*[1]"); String csName=((MbElement)(nodeset.get(0))).getName(); String URL = null; try { //Get the broker proxy BrokerProxy bp = BrokerProxy.getLocalInstance(); //Find the URL from a configurable service URL = bp.getConfigurableServiceProperty("UserDefined/Gateway/"+csName); } catch (Exception e) { URL="/"; } //Set the WebServiceURL creating the path if it doesn't exist le.getRootElement().evaluateXPath("?Destination/?SOAP/?Request/?Transport/?HTTP/?WebServiceURL[set-value('"+URL+"')]");
Der SOAPRequest-Knoten sendet die Anforderung an den geeigneten Providernachrichtenfluss.
Der SOAPReply-Knoten gibt die Antwort an den aufrufenden Nutzernachrichtenfluss zurück.
Die SOAP-Nachrichten werden von den vorhandenen Nutzer- und Providernachrichtenflüssen generiert. Der Gateway-Nachrichtenfluss verwendet den Operationsnamen, um die Nachricht an den richtigen Provider weiterzuleiten.
Nachdem Sie den Mustercode ausgeführt haben, können Sie ihn bei Bedarf erweitern, indem Sie einen weiteren Web-Service-Provider hinzufügen. Da zum Speichern der URL für den Provider ein konfigurierbarer Service verwendet wird, müssen Sie lediglich eine Eigenschaft mit dem Namen einer bestehenden Serviceoperation und den Wert, auf den die URL gesetzt ist, hinzufügen.