SOAP-Webservices: Input- und Output-XML
Zu jedem SOAP-Webservice lässt sich in der Webservice-Konfiguration ein Input-/Output-Handler (in den Knoten <InputHandler/>
und <OutputHandler/>
) definieren. Diese steuern, welche XML-Datenstruktur erwartet bzw. bei der Übergabe an Webservices erzeugt wird.
Modus SOAP-Envelope: Input-Handler
Wenn als Input-Handler der Modus SOAP-Envelope
gewählt wurde (XML-Speicherformat: <InputHandler type="SOAP-Envelope"/>
), so wird das komplette XML des SOAP-Requests inklusive Header-Informationen und Inhalt im Body übergeben, beispielsweise:
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<soapenv:Header/>
<soapenv:Body>
<GetEntry>
<id>?</id>
</GetEntry>
</soapenv:Body>
</soapenv:Envelope>
Modus SOAP-Envelope-Validated: Input-Handler
Wenn als Input-Handler der Modus SOAP-Envelope-Validated
gewählt wurde, so wird das komplette XML-Dokument des SOAP-Requests inklusive Header-Informationen und Inhalt im Body übergeben. Zusätzlich wird jedoch der Input gegen die verknüpfte WSDL-Definition und die darin enthaltenen XML-Schemata validiert.
Bei Validierungsfehlern wird im Ergebnisdokument ein SOAP Fault (z.B. in einem Element <SOAP-ENV:Fault>
) zurückgegeben, das die entsprechenden Fehlermeldungen enthält.
Dieser Modus funktioniert nur, wenn bei der Service-Konfiguration das Feld WSDL URL ausgefüllt und die WSDL mit Load Configuration from WSDL verfügbar gemacht wurde. Siehe auch SOAP-Webservice mit externer WSDL-Definition bereitstellen.
Modus SOAP-Envelope: Output-Handler
Analog zum Input-Handler gilt, wenn als Output-Handler der Modus SOAP-Envelope gewählt wurde (XML-Speicherformat: <OutputHandler type="SOAP-Envelope"/>
), so ist der Technical Process für die Erstellung des vollständigen SOAP-Dokuments verantwortlich, d.h. der Technical Process muss sich selber um die Erstellung von SOAP-Envelope
, SOAP-Header
und SOAP-Body
kümmern.
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<SomeHeader />
</soap:Header>
<soap:Body>
<SomeData />
</soap:Body>
</soap:Envelope/>
Modus SOAP-Content: Input-Handler
Wenn als Input-Handler der Modus SOAP-Content
gewählt wurde (XML-Speicherformat: <InputHandler type="SOAP-Envelope"/>
), so wird der erste Knoten des Bodys innerhalb des SOAP-Requests übergeben, beispielsweise:
Beispiel: SOAP-Request
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<SomeHeader />
</soap:Header>
<soap:Body>
<GetEntry>
<id>101</id>
</GetEntry>
</soap:Body>
</soap:Envelope/>
Beispiel: Prozess-Input
<?xml version="1.0" encoding="UTF-8"?>
<GetEntry>
<id>101</id>
</GetEntry>
Modus SOAP-Content-Validated: Input-Handler
Wenn als Input-Handler der Modus SOAP-Content-Validated
gewählt wurde, so wird der erste Knoten des Bodys innerhalb des SOAP-Requests übergeben. Zusätzlich wird jedoch der Input gegen die verknüpfte WSDL-Definition und die darin enthaltenen XML-Schemata validiert.
Bei Validierungsfehlern wird im Ergebnisdokument ein SOAP Fault (z.B. in einem Element <SOAP-ENV:Fault>
) zurückgegeben, das die entsprechenden Fehlermeldungen enthält.
Dieser Modus funktioniert nur, wenn bei der Service-Konfiguration das Feld WSDL URL ausgefüllt und die WSDL mit Load Configuration from WSDL verfügbar gemacht wurde. Siehe auch SOAP-Webservice mit externer WSDL-Definition bereitstellen.
Modus SOAP-Content: Output-Handler
Analog zum Input-Handler gilt, wenn als Output-Handler der Modus SOAP-Content
gewählt wurde (XML-Speicherformat: <OutputHandler type="SOAP-Content"/>
), so wird das Ergebnis des Technical Process als Inhalt des SOAP-Bodys für die SOAP-Response genommen.
<?xml version="1.0" encoding="UTF-8"?>
<GetEntryResponse>
<Data>
<customer>
<customerid>101</customerid>
<companyname>SoftProject GmbH</companyname>
<address>Am Erlengraben 3</address>
<city>Ettlingen</city>
<postalcode>76275</postalcode>
<country>Germany</country>
<phone>+49 (0)7243 | 561 75-0</phone>
</customer>
</Data>
</GetEntryResponse>
Transformation des Prozessergebnisses in den Response-Body
Ist das Prozessergebnis <SomeData/>
und handelt es sich um ein SOAP 1.1 Request, wird folgende Antwort gesendet:
<SOAP11:Envelope xmlns:SOAP11="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP11:Body>
<SomeData/>
</SOAP11:Body>
</SOAP11:Envelope/>
Ist das Prozessergebnis <SomeData/>
und handelt es sich um ein SOAP 1.2 Request, wird folgende Antwort gesendet:
<SOAP12:Envelope xmlns:SOAP12="http://www.w3.org/2003/05/soap-envelope">
<SOAP12:Body>
<SomeData/>
</SOAP12:Body>
</SOAP12:Envelope/>