Auch wenn es nicht häufig vorkommt, gibt es gelegentlich Integrationen, die mit Standard-Mediatoren nur schwer umzusetzen sind. Doch keine Sorge, WSO2’s ESB unterstützt Sie dabei.
Es besteht immer die Möglichkeit, Ihren eigenen benutzerdefinierten Mediator zu erstellen. Dies ist ein Java-Programm, das Ihnen fast vollständige Kontrolle gibt, aber es gibt vielleicht einfachere Wege, die Aufgabe zu erledigen. Wie wir oft sagen: „Mit WSO2 gibt es oft einen anderen Weg, es zu tun“.
Geben Sie den Skript-Mediator ein
Der Skript-Mediator ist ein hilfreiches Hilfsmittel, das die Möglichkeiten des WSO2 ESB deutlich erweitert, aber es kann schwierig sein, mit ihm zu arbeiten, da er nicht immer einfach zu debuggen ist.
Im Folgenden zeige ich ein kleines Beispiel für die String-Manipulation mit WSO2 ESB und dem Script Mediator, gefolgt von einer schrittweisen Erklärung.
String-Manipulation
Da wir Zugang zum Nachrichtenkontext haben, ist es einfach, mit Variablen zu arbeiten, die die Nachricht untersuchen und möglicherweise ändern.
Im vorliegenden Beispiel wird eine String-Manipulation verwendet, um eine Kopfzeile einzufügen, die eine „Version“ enthalten kann oder auch nicht, die auf der Grundlage einer zuvor abgerufenen „Version“ ersetzt werden muss. Wird eine Version angegeben, wird der {version}-Teil der URL durch die aktuelle Version ersetzt (dies ist ein sehr spezielles Beispiel.
Normalerweise gibt es sinnvollere Möglichkeiten, dies zu tun. Wenn keine Version angegeben wird, wird der /{version}-Teil der URL entfernt.
<script language="js">
var toheader = mc.getProperty('retrieved_url');
var log = mc.getServiceLog();
log.info(toheader);
var back = mc.getProperty('version');
var res = "";
if( toheader.indexOf("/{version}") != -1 )
{
if(version == "")
var res = toheader.replace('/{version}', "");
else
var res = toheader.replace('{version}', back)
log.info(res);
}
mc.setTo(res);
</script>
Anmeldung beim Skript-Mediator
Es gibt verschiedene Beispiele dafür, wie man Werte und Protokolle in wso2carbon.log ausgibt. Viele dieser Beispiele funktionieren jedoch nicht (mehr). Was jedoch funktioniert, ist die Verwendung des Servicelogs.
Legen Sie ein Log-Objekt mit ‚mc.getServiceLog();‘ an und verwenden Sie log.[loglevel]([value/var]), um auf der Konsole zu drucken. Um eine Variable im Log auf Loglevel ‚info‘ zu drucken, verwenden Sie ‚log.info(variable)
Ersetzen von Strings im Skript-Mediator
Das Ersetzen von Strings ist im ESB schwierig zu bewerkstelligen. Man könnte die xpath 2.0-Funktionalität aktivieren, aber dies könnte sich auf aktuelle Integrationen auswirken. Mit Hilfe des Skript-Mediators ist es ziemlich trivial, da es in Javascript wäre.
Im Beispiel prüft das Skript, ob die angegebene URL (dynamisch generiert) eine {Version} enthält. Ein Beispiel wäre: https://customer.yenlo.com/soapservice/{version}/testcall mit
if( toheader.indexOf(„/{Version}“) != -1 )
Secondly I check if the requestor cares about the version (already placed in a property earlier in the flow). If this is not the case the version part including leading slash needs to be removed so the result becomes: https://customer.yenlo.com/soapservice/testcall
if(version == „“)
var res = toheader.replace(‚/{version}‘, „“);
Wenn der Kunde sich für eine Version interessiert, wird {version} in der URL ersetzt:
sonst
var res = toheader.replace(‚{version}‘, back)
Verwenden Sie nicht den Skript-Mediator
kript-Mediatoren sind der letzte Ausweg (abgesehen von einem benutzerdefinierten Mediator) und sollten nur verwendet werden, wenn es keine einfachere Alternative gibt.
Es gibt wenig Fälle, in denen WSO2 ESB keine Lösung bieten kann. In Fällen, in denen es offenbar nur in einem Skript-Mediator oder sogar einem benutzerdefinierten Mediator eine Lösung gibt:
- Gibt es keine Lösung mit einem der anderen WSO2 ESB-Mediatoren?
- Ist ESB wirklich der richtige Ort für diese Funktion?
Die zweite Frage bezieht sich auf die Rolle des ESB. Dieser ist gut für Mediation und Transformation, aber zum Beispiel nicht für große transaktionale Verarbeitungen innerhalb eines Proxys, einer API oder einer Sequenz gedacht.
Wenn es keine einfache Alternative gibt und sie in den ESB gehört, dann ist der Script Mediator eine sehr leistungsfähige Lösung.
Bei Fragen zu diesem Blogpost kontaktieren Sie uns bitte über den Kommentarbereich dieses Blogs. Besuchen Sie auch unsere WSO2 Tutorials, Webinare oder White Papers für weitere technische Informationen. Benötigen Sie Unterstützung? Wir bieten WSO2-Produktsupport, WSO2-Entwicklungssupport, WSO2-Betriebssupport und WSO2-Trainingsprogramme.
Vielen Dank an Rob Blaauboer für seinen Beitrag zu diesem Blogpost.