Skip to main content
Skip table of contents

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

  1. 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 SOAPan.

  2. Legen Sie die SOAP-Version fest (entweder SOAP 1.1SOAP 1.2 oder Unterstützung für beide Standards).

  3. Wählen Sie WSDL-Modus in WSDL Mode und Zielpräfix in Service Prefix.

  4. Hinterlegen Sie für jede Operation folgende Konfiguration:

    1. Legen Sie einen gültigen Namen für die Operation fest.

    2. Verknüpfen Sie den Technical Process, der die Webservice-Anfrage über den X4 Server verarbeitet, über die zugehörige x4db:/-URL.

    3. Definieren Sie einen Input Handler und Output Handler für den SOAP-Webservice.
      Beispiel: Definieren Sie den SOAP-Content, um das erste Element im soap:Body als Input zu verwenden sowie beim Output ein soap:Body- und soap:Envelope-Element zu erzeugen.

    4. Geben Sie die erwartete Input-XML-Datenstruktur innerhalb des Elements <Input>an, optional mit XML-Schemadefinition.

    5. 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.

  1. Klicken Sie auf image-20250117-094927.pngSpeichern 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 unter wsdl:types ein xsd:schema mit xsd: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 jedes Input-Part ein entsprechendes wsdl:parterstellt.

  • Für jede Operation wird eine wsdl:message erzeugt, deren Name dem Localname der konfigurierten Operation, ergänzt um Response, entspricht. Innerhalb dieser Nachricht wird für jedes Output-Part ein entsprechendes wsdl:part erstellt.

  • Für jede Operation wird eine wsdl:operation und damit ein wsdl:portTyp erzeugt. Der Name der wsdl:operation ist derLocalname der konfigurierten Operation. Als Input-/Output-Nachricht werden die oben erzeugten Nachrichten verwendet.

  • Je nach SOAP-Version werden entsprechende wsdl:bindings erzeugt (ausschließlich literal 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

XML
<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> 
JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.