SOAP-Webservice im RPC-Stil bereitstellen
Wie Sie mit der X4 BPMS einen Technical Process als SOAP-Webservice im RPC-Stil bereitstellen, der zudem eine automatisch aus der Service-Konfiguration erzeugte WSDL-Definition bereitstellt, wird im Folgenden beschrieben.
Voraussetzungen:
Sie verfügen über grundlegendes Wissen über den Aufbau von SOAP-Webservices im RPC-Stil.
Sie haben pro Webservice-Operation einen Technical Process erstellt, der die Verarbeitung der eingehenden Anfrage übernimmt. Der Technical Process wird dabei über seine
x4db:/-URL
referenziert.Sie verfügen über eine Teil-URL, über den der SOAP-Webservice via HTTP erreichbar sein soll, z.B. über
http://localhost:8080/X4/httpstarter/ReST/MyRPCWebservice
. Sie haben den entsprechenden URL-Part bereits typischerweise als Konstante innerhalb der Webservices-Konfiguration definiert.
Technical Process als SOAP-Webservice im RPC-Stil bereitstellen
Legen Sie unter der gewünschten URL-Ressource (definiert z.B. durch einen konstanten URL-Part) über den Eintrag Add SOAP Service im Kontextmenü einen neuen Service-Eintrag vom Typ
SOAP
an.Legen Sie die SOAP-Version fest (entweder SOAP 1.1, SOAP 1.2 oder Unterstützung für beide Standards).
Wählen Sie
WSDL-Modus
in WSDL Mode undZielpräfix
in Service Prefix.Hinterlegen Sie für jede Operation folgende Konfiguration:
Legen Sie einen gültigen Namen für die Operation fest.
Verknüpfen Sie den Technical Process, der die Webservice-Anfrage über den X4 Server verarbeitet, über die zugehörige
x4db:/-URL
.Definieren Sie einen Input Handler und Output Handler für den SOAP-Webservice.
Beispiel: Definieren Sie denSOAP-Content
, um das erste Element imsoap:Body
als Input zu verwenden sowie beim Output einsoap:Body
- undsoap:Envelope
-Element zu erzeugen.Geben Sie die erwartete Input-XML-Datenstruktur innerhalb des Elements
<Input>
an, optional mit XML-Schemadefinition.Geben Sie die zu erzeugende Ausgabe-Datenstruktur innerhalb des Elements
<Output>
an.
Hinweise:
SOAP-Webservices im RPC-Stil erfordern eindeutige
Localnames
für die Operationen.Im Webservice Configuration Editor können Sie Technical Processes per Drag & Drop aus dem Repository Navigator verknüpfen.
Klicken Sie auf
Speichern und wenden Sie die Webservice-Konfiguration an, indem Sie auf Reload on Server klicken.
✅ Der SOAP-Webservice im RPC-Stil ist ab sofort aktiv.
Generierte WSDL-Definitionen im RPC
Die automatisch generierte zugehörige WSDL-Definition verwendet den RPC
-Stil und wird bei einem HTTP-GET-Aufruf des SOAP-Webservice-URIs ausgeliefert.
Für den WSDL-Modus RPC
erzeugt der X4 Server eine WSDL-Definition aus der Service-Konfiguration. Die WSDL-Definition wird wie folgt erstellt:
Für jedes Namespace-Element mit
schemaLocation
-Attribut wird unterwsdl:types
einxsd:schema
mitxsd:include
für dieschemaLocation
erzeugt.Für jede Operation wird eine
wsdl:message
erzeugt, deren Name dem Localname der konfigurierten Operation entspricht. Innerhalb dieser Message wird für jedesInput
-Part ein entsprechendeswsdl:part
erstellt.Für jede Operation wird eine
wsdl:message
erzeugt, deren Name dem Localname der konfigurierten Operation, ergänzt umResponse
, entspricht. Innerhalb dieser Nachricht wird für jedes Output-Part ein entsprechendeswsdl:part
erstellt.Für jede Operation wird eine
wsdl:operation
und damit einwsdl:portTyp
erzeugt. Der Name derwsdl:operation
ist derLocalname der konfigurierten Operation. Als Input-/Output-Nachricht werden die oben erzeugten Nachrichten verwendet.Je nach SOAP-Version werden entsprechende
wsdl:binding
s erzeugt (ausschließlichliteral
Bindings). Es wird immer eine leere SOAP-Action definiert. Bei SOAP-Webservices mit RPC-Stil wird für jede Operation eintargetNamespace
deklariert, falls der Operationsname ein Qualifiedname ist (d.h. ein Name mit Doppelpunkt).
Beispiel: Konfiguration eines SOAP-Webservices im RPC-Modus
<Service type="Soap">
<SoapVersion>
<SOAP11/>
<SOAP12/>
</SoapVersion>
<Wsdl name="NameOfTheRpcService" targetPrefix="service" mode="RPC"/>
<Namespace prefix="service" namespace="http://example.org/serviceSpace"/>
<Namespace prefix="exampleSpace" namespace="http://example.org/namespace"
schemaLocation="http://localhost:8080/X4/httpstarter/ReST/soapService/xsd/namespace.xsd"/>
<Namespace prefix="anotherSpace" namespace="http://example.org/different/namespace"
schemaLocation="http://localhost:8080/X4/httpstarter/ReST/soapService/xsd/differentNamespace.xsd"/>
<!-- RPC requires unique localnames for the operations -->
<Operation name="exampleSpace:RpcOp1"
process="x4db:/1/RestExamples/soap/DirectOutput.wrf">
<InputHandler type="SOAP-Envelope"/>
<OutputHandler type="SOAP-Envelope"/>
<Input>
<Part name="firstPart" element="exampleSpace:Operation1"/>
</Input>
<Output>
<Part name="firstPart" element="exampleSpace:Operation1"/>
</Output>
</Operation>
<Operation name="anotherSpace:RpcOp2"
process="x4db:/1/RestExamples/soap/DirectOutput.wrf">
<InputHandler type="SOAP-Envelope"/>
<OutputHandler type="SOAP-Envelope"/>
<Input>
<Part name="firstPart" type="anotherSpace:SomeType"/>
</Input>
<Output>
<Part name="Output" type="anotherSpace:SomeType"/>
</Output>
</Operation>
<Operation name="RpcOp3"
process="x4db:/1/RestExamples/soap/DirectOutput.wrf">
<InputHandler type="SOAP-Envelope"/>
<OutputHandler type="SOAP-Envelope"/>
<Input>
<Part name="Value" type="xsd:integer"/>
</Input>
<Output>
<Part name="Value" type="xsd:String"/>
</Output>
</Operation>
</Service>