SOAP-Webservices bereitstellen
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 bereitstellenDOCUMENT
: Es wird vom X4 Server eine WSDL-Definition nach Document-Stil aus den Konfigurationsdaten erzeugt, SOAP-Webservice im Document-Modus bereitstellenEXTERNAL
: Externe WSDL-Definition für den SOAP Webservice verwenden, siehe SOAP-Webservice mit externer WSDL-Definition bereitstellenNONE
: Es wird keine WSDL-Definition verwendet/bereitgestellt, siehe SOAP-Webservice ohne WSDL-Definition bereitstellenPROCESS
: 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.
Schematischer Aufbau einer SOAP Webservice-Konfiguration (XML-Speicherformat)
<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 Attributmode
den 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-ModusNONE
mit dem HTTP-Status405
(Method not allowed) beantwortet. Im WSDL-ModusEXTERNAL
wird mit einem HTTP redirect auf die konfigurierte WSDL-URL geantwortet. Bei den WSDL-ModiRPC
undDOCUMENT
generiert 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
undLocalname
des ersten Kindelements des SOAP-Body herangezogen, um die Operation im Service zu ermitteln.- Bei den WSDL-Modi
NONE
,RPC
undEXTERNAL
wird mit dem konfiguriertenNamespace
undLocalname
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 Attributelement
enthält einen Wert) so wird der Qualifiedname des konfigurierten Elementes verwendet. Für Type-Parts (d.h. das Attributtype
enthält einen Wert) wird der Name des Parts (Attributname
) verwendet.
- Bei den WSDL-Modi
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.
- Zunächst wird nach dem SOAP-Dokument gesucht.