Legacy SOAP- & WSDL-basierte XML-Webdienste mit API-Gateways
Software hat vielleicht kein Verfallsdatum, aber ältere Systeme und Protokolle bleiben oft über viele Jahre im Einsatz. Das gilt besonders für XML-basierte Protokolle und Webdienste. Auch wenn diese Formate heutzutage meist nicht mehr bevorzugt werden, existieren sie weiterhin und müssen manchmal in moderne APIs integriert werden.
Dieser Text zeigt, wie man solche Legacy-Dienste in ein modernes API-Gateway integriert. Doch zuerst ein Blick auf die Gateways aus der SOA-Ära.
Frühe API-Gateways
Die erste Generation von API-Gateways basierte auf Tools aus der serviceorientierten Architektur (SOA) und bot hervorragende Unterstützung für Webdienste und XML. Allerdings benötigten diese Gateways oft Hunderte Gigabyte an Speicher und wurden schließlich durch schlankere, moderne Lösungen ersetzt.
Moderne API-Gateways
Moderne Gateways – oft in nginx, Go oder C++ implementiert – haben einen deutlich kleineren Ressourcenverbrauch. Sie bieten gute Unterstützung für JSON und YAML (häufig via Lua-Plugins), jedoch fehlt es meist an robuster XML- oder WSDL-Unterstützung. Dennoch können sie SOAP/WSDL-Nachrichten weiterleiten, solange diese über HTTP laufen.
Legacy-Unterstützung im Membrane API Gateway
Das Open-Source-Tool Membrane API Gateway basiert auf Java und bringt alle nötigen Bibliotheken für Legacy-SOA mit. Es benötigt ca. 150–200 MB Speicher pro Instanz – vertretbar, selbst in großen Service Meshes. Die folgenden Beispiele zeigen, wie sich Legacy-Systeme integrieren lassen.
Bereitstellung eines Webdienstes aus einer WSDL
Mit der WSDL-Unterstützung von Membrane lässt sich ein SOAP-Dienst schnell deployen:
<soapProxy port="443" wsdl="city.wsdl"/>
Die WSDL wird beim Abruf automatisch angepasst, sodass der Dienst über das Gateway erreichbar ist.
Bild: Umschreiben der WSDL-Adressen am API-Gateway

Zusätzlich validiert soapProxy
Ein- und Ausgaben anhand der XSDs. Der Web Services Explorer unterstützt beim Testen:

Bild: Web Services Explorer
Mocking eines Webdienstes mit SOAP-Body-Template
Membrane erlaubt es, SOAP-Antworten einfach über <soapBody> zu mocken:
<api port="2000">
<path>/mock-service</path>
<response>
<soapBody pretty="true">
<getCityResponse xmlns="https://predic8.de/cities">
<country>England</country>
<population>8980000</population>
</getCityResponse>
</soapBody>
</response>
<return/>
</api>
Der Payload wird automatisch in ein vollständiges SOAP-Dokument eingebettet.
SOAP-Webdienste als REST-APIs bereitstellen
Legacy-Dienste können als REST-Endpunkte exponiert werden. Beispiel:
<api port="2000" method=”GET”>
<path>/cities/{city}</path>
<request>
<soapBody>
<getCity xmlns="https://predic8.de/cities">
<name>${pathParam['city']}</name>
</getCity>
</soapBody>
</request>
<response>
<template contentType="application/json">
{
"country": "${property.country}",
"population": "${property.population}"
}
</template>
<setProperty name="country" value="${//country}" language="xpath"/>
<setProperty name="population" value="${//population}" language="xpath"/>
</response>
<log/>
<target method="POST" url="https://www.predic8.de/city-service"/>
</api>
XPath-Unterstützung
Membrane unterstützt XPath zusätzlich zu JsonPath. Dadurch können XML-Werte gezielt ausgelesen und z. B. für Rate Limiting oder Authentifizierung verwendet werden:
<setProperty name="population" value="${//population}" language="xpath"/>
Fazit
Membrane API Gateway schließt die Lücke zwischen modernen APIs und Legacy-Systemen. Es bietet automatische WSDL-Bereitstellung, SOAP-Body-Templates und die Möglichkeit, SOAP-Dienste als REST bereitzustellen – mit vertretbarem Ressourcenbedarf.
Wie geht's los?
Sieh dir die Beispiele im Ordner examples/web-services-soap
der Distribution
an.