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:

  • Grundlegendes Wissen über den Aufbau von SOAP-Webservices im RPC-Stil
  • Ein Technical Process pro Webservice-Operation, der die Verarbeitung der eingehenden Anfrage übernimmt. Der Tehnical Process wird dabei über seine x4db:/-URL referenziert.
  • Ein URL-Part, über den der SOAP-Webservice via HTTP erreichbar sein soll, z.B. über http://localhost:8080/X4/httpstarter/ReST/MyRPCWebservice. Diesen URL-Part haben Sie bereits typischerweise als Konstante innerhalb der Webservices-Konfiguration definiert.


Um einen Technical Process als SOAP-Webservice im RPC-Stil bereitzustellen, gehen Sie wie folgt vor:

  1. Unter der gewünschten URL-Ressource (definiert z.B. durch einen konstanten URL-Part) über das Kontextmenü Add SOAP Service einen neuen Service-Eintrag vom Typ SOAPanlegen.

  2. SOAP-Version festlegen (entweder SOAP 1.1SOAP 1.2 oder Unterstützung für beide Standards).

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

  4. Für jede Operation folgende Konfiguration hinterlegen:

    • Einen gültigen Namen für die Operation hinterlegen.
      (info) SOAP-Webservices im RPC-Stil erfordern eindeutige Localnames für die Operationen.
    • Technical Process, der die Webservice-Anfrage über den X4 Server verarbeitet, über dessen x4db:/-URL verknüpfen.
      (info) Im Webservice Configuration Editor ist dies per Drag & Drop aus dem Repository Navigator möglich.

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

    • Erwartete Input-XML-Datenstruktur innerhalb von Element <Input>angeben, optional mit XML-Schemadefinition.

    • Zu erzeugende Ausgabe-Datenstruktur innerhalb von Element <Output> angeben.

  5. Speichern und Webservice-Konfiguration mit Reload on Server anwenden.
    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.