Jeder SOAP Webservice wird über einen Knoten <Services/> innerhalb der Webservices-Konfiguration definiert. Dessen Attribute und Kindelemente variieren z.T. je nach Webservice-Typ.
Folgende Arten von SOAP Webservices stehen im Kindelement <Wsdl> in Attribut mode zur Auswahl:
-
RPC: Es wird vom X4 Server eine WSDL-Definition nach RPC-Stil aus den Konfigurationsdaten erzeugt, siehe SOAP-Webservice im RPC-Stil bereitstellen -
DOCUMENT: Es wird vom X4 Server eine WSDL-Definition nach Document-Stil aus den Konfigurationsdaten erzeugt, SOAP-Webservice im Document-Modus bereitstellen -
EXTERNAL: Externe WSDL-Definition für den SOAP Webservice verwenden, siehe SOAP-Webservice mit externer WSDL-Definition bereitstellen -
NONE: Es wird keine WSDL-Definition verwendet/bereitgestellt, siehe SOAP-Webservice ohne WSDL-Definition bereitstellen -
PROCESS: Prozess wählen, der die WSDL erzeugt und als HTTP-Content an den Aufrufer zurückgibt. Das Ergebnis des Prozesses wird dabei 1:1 zurückgegeben.
<Service type="Soap">
<SoapVersion>
<SOAP11/> <!-- für SOAP 1.1-Unterstützung -->
<SOAP12/> <!-- für SOAP 1.2-Unterstützung -->
</SoapVersion>
<Wsdl mode="WSDL-Modus"/>
<Namespace prefix="" namespace="" schemaLocation="URL zu einem XSD-Dokument"/>
<Operation name="Operationsname" process="Pfad zum X4-Prozess als x4db:/-URL">
<InputHandler type="Input-Modus"/>
<OutputHandler type="Output-Modus"/>
<Input>
<Part name="Bezeichnung für einen Teil" type="Typ (optional)" element="Elementname (optional)" />
</Input>
<Output>
<Part name="Bezeichnung für einen Teil" type="Typ (optional)" element="Elementname (optional)" />
</Output>
</Operation>
</Service>
Erläuterungen:
-
Knoten
<Services type="Soap">definiert einen HTTP-Webservice vom Typ SOAP. -
Knoten
<Wsdl>definiert über dessen Attributmodeden gewünschten WSDL-Modus (z.B.EXTERNAL, siehe oben). -
Knoten
<SOAP11/>und<SOAP12/>ermöglichen zu definieren, welche SOAP-Versionen der Webservice nutzt (entweder eine oder beide parallel). -
In beliebig vielen Knoten
<Namespace>lassen sich jeweils ein Namespace für die Definition von Webservices verwenden. -
In beliebig vielen Knoten
<Operation>lassen sich jeweils eine Operation für den Webservice definieren (siehe unten).
Folgende Namespaces werden vom System definiert:
-
xmlns:xsd="http://www.w3.org/2001/XMLSchema" -
xmlns:soap11="http://schemas.xmlsoap.org/wsdl/soap/" -
xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" -
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
Request Routing für SOAP-Services
-
GET-Requests: EinGET-Request wird beim WSDL-ModusNONEmit dem HTTP-Status405(Method not allowed) beantwortet. Im WSDL-ModusEXTERNALwird mit einem HTTP redirect auf die konfigurierte WSDL-URL geantwortet. Bei den WSDL-ModiRPCundDOCUMENTgeneriert der X4 Server aus der Service-Konfiguration eine WSDL als Antwort. -
POST-Requests: Bei einemPOST-Request wird der komplette Request-Body in den Speicher geladen, damit das Routing auf die Operation erfolgen kann.Zunächst wird nach dem SOAP-Dokument gesucht.Handelt es sich nicht um ein Multipart-Request, wird angenommen, dass der Request-Body das SOAP-Dokument enthält.Handelt es sich um ein Multipart-Request (MTOM), wird nach dem Start-Part des MTOM-Pakets gesucht.Das gefundene Dokument wird als XML gelesen und die SOAP-Version aus dem Namespace des Wurzelelements ermittelt. Falls es sich dabei nicht um eine akzeptierte SOAP-Versionen handelt, wird mit einem entsprechenden SOAP-Fault geantwortet.Aus dem XML-Dokument wird der Namespace und Localname des ersten Kindelements des SOAP-Body herangezogen, um die Operation im Service zu ermitteln.Bei den WSDL-Modi NONE, RPC und EXTERNAL wird mit dem konfigurierten Namespace und Localname der Operation verglichen. Für den WSDL-Modus DOCUMENT wird die Konfiguration des jeweils ersten Input-Parts verwendet. Wenn es sich um einenElement-Part handelt (d.h. das Attribut element enthält einen Wert) so wird der Qualifiedname des konfigurierten Elementes verwendet. Für Type-Parts (d.h. das Attribut type enthält einen Wert) wird der Name des Parts (Attribut name) verwendet.Anschließend wird gemäß Input-Modus der Request aufbereitet und an den konfigurierten Prozess für die Operation übergeben.Es können keine SOAP-Requests mit leerem Body-Element verarbeitet werden.