Skip to main content

SOAP Component

Interact with a SOAP-based API

Component key: soap

Description

Simple Object Access Protocol (SOAP) is a messaging protocol specification for exchanging structured information with web services.

This component allows you to interact with a SOAP API. You can fetch WSDL definitions, describe the methods that a SOAP API supports, and make requests of the API's methods.

Connections

Basic Authentication

Actions

Describe Client

Description of services, ports and methods as a JavaScript object | key: describeClient

Output Example Payload

{
"data": {
"Calculator": {
"CalculatorSoap": {
"Add": {
"input": {
"intA": "s:int",
"intB": "s:int"
},
"output": {
"AddResult": "s:int"
}
},
"Subtract": {
"input": {
"intA": "s:int",
"intB": "s:int"
},
"output": {
"SubtractResult": "s:int"
}
},
"Multiply": {
"input": {
"intA": "s:int",
"intB": "s:int"
},
"output": {
"MultiplyResult": "s:int"
}
},
"Divide": {
"input": {
"intA": "s:int",
"intB": "s:int"
},
"output": {
"DivideResult": "s:int"
}
}
},
"CalculatorSoap12": {
"Add": {
"input": {
"intA": "s:int",
"intB": "s:int"
},
"output": {
"AddResult": "s:int"
}
},
"Subtract": {
"input": {
"intA": "s:int",
"intB": "s:int"
},
"output": {
"SubtractResult": "s:int"
}
},
"Multiply": {
"input": {
"intA": "s:int",
"intB": "s:int"
},
"output": {
"MultiplyResult": "s:int"
}
},
"Divide": {
"input": {
"intA": "s:int",
"intB": "s:int"
},
"output": {
"DivideResult": "s:int"
}
}
}
}
}
}

Get Authentication

Retrieve authentication data from a SOAP endpoint by calling the specified authentication method | key: getWSDLAuth

Output Example Payload

{
"data": [
{
"ExampleLoginToken": "abc-123",
"ExampleUsername": "example-user"
},
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns=\"urn:acme.com\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"><soapenv:Body><loginResponse><result><ExampleLoginToken>abc-123</ExampleLoginToken><ExampleUsername>example-user</ExampleUsername></result></loginResponse></soapenv:Body></soapenv:Envelope>",
null,
"<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:tns=\"urn:partner.soap.sforce.com\"><soap:Body><login xmlns=\"urn:login.acme.com\"><username>example-user</username><password>123</password></login></soap:Body></soap:Envelope>",
null
]
}

Get WSDL Definition

Retrieves a WSDL Definition from a given endpoint and returns the raw XML | key: getWSDLByURL

Output Example Payload

{
"data": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<wsdl:definitions xmlns:soap=\"http://schemas.xmlsoap.org/wsdl/soap/\" xmlns:tm=\"http://microsoft.com/wsdl/mime/textMatching/\" xmlns:soapenc=\"http://schemas.xmlsoap.org/soap/encoding/\" xmlns:mime=\"http://schemas.xmlsoap.org/wsdl/mime/\" xmlns:tns=\"http://tempuri.org/\" xmlns:s=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap12=\"http://schemas.xmlsoap.org/wsdl/soap12/\" xmlns:http=\"http://schemas.xmlsoap.org/wsdl/http/\" targetNamespace=\"http://tempuri.org/\" xmlns:wsdl=\"http://schemas.xmlsoap.org/wsdl/\">\n <wsdl:types>\n <s:schema elementFormDefault=\"qualified\" targetNamespace=\"http://tempuri.org/\">\n <s:element name=\"Add\">\n <s:complexType>\n <s:sequence>\n <s:element minOccurs=\"1\" maxOccurs=\"1\" name=\"intA\" type=\"s:int\" />\n <s:element minOccurs=\"1\" maxOccurs=\"1\" name=\"intB\" type=\"s:int\" />\n </s:sequence>\n </s:complexType>\n </s:element>\n <s:element name=\"AddResponse\">\n <s:complexType>\n <s:sequence>\n <s:element minOccurs=\"1\" maxOccurs=\"1\" name=\"AddResult\" type=\"s:int\" />\n </s:sequence>\n </s:complexType>\n </s:element>\n <s:element name=\"Subtract\">\n <s:complexType>\n <s:sequence>\n <s:element minOccurs=\"1\" maxOccurs=\"1\" name=\"intA\" type=\"s:int\" />\n <s:element minOccurs=\"1\" maxOccurs=\"1\" name=\"intB\" type=\"s:int\" />\n </s:sequence>\n </s:complexType>\n </s:element>\n <s:element name=\"SubtractResponse\">\n <s:complexType>\n <s:sequence>\n <s:element minOccurs=\"1\" maxOccurs=\"1\" name=\"SubtractResult\" type=\"s:int\" />\n </s:sequence>\n </s:complexType>\n </s:element>\n <s:element name=\"Multiply\">\n <s:complexType>\n <s:sequence>\n <s:element minOccurs=\"1\" maxOccurs=\"1\" name=\"intA\" type=\"s:int\" />\n <s:element minOccurs=\"1\" maxOccurs=\"1\" name=\"intB\" type=\"s:int\" />\n </s:sequence>\n </s:complexType>\n </s:element>\n <s:element name=\"MultiplyResponse\">\n <s:complexType>\n <s:sequence>\n <s:element minOccurs=\"1\" maxOccurs=\"1\" name=\"MultiplyResult\" type=\"s:int\" />\n </s:sequence>\n </s:complexType>\n </s:element>\n <s:element name=\"Divide\">\n <s:complexType>\n <s:sequence>\n <s:element minOccurs=\"1\" maxOccurs=\"1\" name=\"intA\" type=\"s:int\" />\n <s:element minOccurs=\"1\" maxOccurs=\"1\" name=\"intB\" type=\"s:int\" />\n </s:sequence>\n </s:complexType>\n </s:element>\n <s:element name=\"DivideResponse\">\n <s:complexType>\n <s:sequence>\n <s:element minOccurs=\"1\" maxOccurs=\"1\" name=\"DivideResult\" type=\"s:int\" />\n </s:sequence>\n </s:complexType>\n </s:element>\n </s:schema>\n </wsdl:types>\n <wsdl:message name=\"AddSoapIn\">\n <wsdl:part name=\"parameters\" element=\"tns:Add\" />\n </wsdl:message>\n <wsdl:message name=\"AddSoapOut\">\n <wsdl:part name=\"parameters\" element=\"tns:AddResponse\" />\n </wsdl:message>\n <wsdl:message name=\"SubtractSoapIn\">\n <wsdl:part name=\"parameters\" element=\"tns:Subtract\" />\n </wsdl:message>\n <wsdl:message name=\"SubtractSoapOut\">\n <wsdl:part name=\"parameters\" element=\"tns:SubtractResponse\" />\n </wsdl:message>\n <wsdl:message name=\"MultiplySoapIn\">\n <wsdl:part name=\"parameters\" element=\"tns:Multiply\" />\n </wsdl:message>\n <wsdl:message name=\"MultiplySoapOut\">\n <wsdl:part name=\"parameters\" element=\"tns:MultiplyResponse\" />\n </wsdl:message>\n <wsdl:message name=\"DivideSoapIn\">\n <wsdl:part name=\"parameters\" element=\"tns:Divide\" />\n </wsdl:message>\n <wsdl:message name=\"DivideSoapOut\">\n <wsdl:part name=\"parameters\" element=\"tns:DivideResponse\" />\n </wsdl:message>\n <wsdl:portType name=\"CalculatorSoap\">\n <wsdl:operation name=\"Add\">\n <wsdl:documentation xmlns:wsdl=\"http://schemas.xmlsoap.org/wsdl/\">Adds two integers. This is a test WebService. ©DNE Online</wsdl:documentation>\n <wsdl:input message=\"tns:AddSoapIn\" />\n <wsdl:output message=\"tns:AddSoapOut\" />\n </wsdl:operation>\n <wsdl:operation name=\"Subtract\">\n <wsdl:input message=\"tns:SubtractSoapIn\" />\n <wsdl:output message=\"tns:SubtractSoapOut\" />\n </wsdl:operation>\n <wsdl:operation name=\"Multiply\">\n <wsdl:input message=\"tns:MultiplySoapIn\" />\n <wsdl:output message=\"tns:MultiplySoapOut\" />\n </wsdl:operation>\n <wsdl:operation name=\"Divide\">\n <wsdl:input message=\"tns:DivideSoapIn\" />\n <wsdl:output message=\"tns:DivideSoapOut\" />\n </wsdl:operation>\n </wsdl:portType>\n <wsdl:binding name=\"CalculatorSoap\" type=\"tns:CalculatorSoap\">\n <soap:binding transport=\"http://schemas.xmlsoap.org/soap/http\" />\n <wsdl:operation name=\"Add\">\n <soap:operation soapAction=\"http://tempuri.org/Add\" style=\"document\" />\n <wsdl:input>\n <soap:body use=\"literal\" />\n </wsdl:input>\n <wsdl:output>\n <soap:body use=\"literal\" />\n </wsdl:output>\n </wsdl:operation>\n <wsdl:operation name=\"Subtract\">\n <soap:operation soapAction=\"http://tempuri.org/Subtract\" style=\"document\" />\n <wsdl:input>\n <soap:body use=\"literal\" />\n </wsdl:input>\n <wsdl:output>\n <soap:body use=\"literal\" />\n </wsdl:output>\n </wsdl:operation>\n <wsdl:operation name=\"Multiply\">\n <soap:operation soapAction=\"http://tempuri.org/Multiply\" style=\"document\" />\n <wsdl:input>\n <soap:body use=\"literal\" />\n </wsdl:input>\n <wsdl:output>\n <soap:body use=\"literal\" />\n </wsdl:output>\n </wsdl:operation>\n <wsdl:operation name=\"Divide\">\n <soap:operation soapAction=\"http://tempuri.org/Divide\" style=\"document\" />\n <wsdl:input>\n <soap:body use=\"literal\" />\n </wsdl:input>\n <wsdl:output>\n <soap:body use=\"literal\" />\n </wsdl:output>\n </wsdl:operation>\n </wsdl:binding>\n <wsdl:binding name=\"CalculatorSoap12\" type=\"tns:CalculatorSoap\">\n <soap12:binding transport=\"http://schemas.xmlsoap.org/soap/http\" />\n <wsdl:operation name=\"Add\">\n <soap12:operation soapAction=\"http://tempuri.org/Add\" style=\"document\" />\n <wsdl:input>\n <soap12:body use=\"literal\" />\n </wsdl:input>\n <wsdl:output>\n <soap12:body use=\"literal\" />\n </wsdl:output>\n </wsdl:operation>\n <wsdl:operation name=\"Subtract\">\n <soap12:operation soapAction=\"http://tempuri.org/Subtract\" style=\"document\" />\n <wsdl:input>\n <soap12:body use=\"literal\" />\n </wsdl:input>\n <wsdl:output>\n <soap12:body use=\"literal\" />\n </wsdl:output>\n </wsdl:operation>\n <wsdl:operation name=\"Multiply\">\n <soap12:operation soapAction=\"http://tempuri.org/Multiply\" style=\"document\" />\n <wsdl:input>\n <soap12:body use=\"literal\" />\n </wsdl:input>\n <wsdl:output>\n <soap12:body use=\"literal\" />\n </wsdl:output>\n </wsdl:operation>\n <wsdl:operation name=\"Divide\">\n <soap12:operation soapAction=\"http://tempuri.org/Divide\" style=\"document\" />\n <wsdl:input>\n <soap12:body use=\"literal\" />\n </wsdl:input>\n <wsdl:output>\n <soap12:body use=\"literal\" />\n </wsdl:output>\n </wsdl:operation>\n </wsdl:binding>\n <wsdl:service name=\"Calculator\">\n <wsdl:port name=\"CalculatorSoap\" binding=\"tns:CalculatorSoap\">\n <soap:address location=\"http://www.dneonline.com/calculator.asmx\" />\n </wsdl:port>\n <wsdl:port name=\"CalculatorSoap12\" binding=\"tns:CalculatorSoap12\">\n <soap12:address location=\"http://www.dneonline.com/calculator.asmx\" />\n </wsdl:port>\n </wsdl:service>\n</wsdl:definitions>"
}

Request

Makes a request to the SOAP webservice using the specified method | key: sendRequest

The Request action can take optional SOAP headers (which are different from HTTP headers). You can easily generate SOAP headers that reference config variables and other steps' results using input templates:

Simple SOAP Request

This example uses this generic calculator SOAP API, which presents methods to add, subtract, multiply, and divide two integers. The API's WSDL specifies a Multiply operation, which multiplies two integers, intA and intB, and returns a MultiplyResponse.

To use that method, first add a Get WSDL Definition step to fetch the API's WSDL definition. Then, reference that definition as the Request step's WSDL Definition input. Under Method, specify that you want to execute the Multiply operation. Finally, add two SOAP Parameters for intA and intB. Here, we multiply the integers 7 and 8:

The step's result will match the format that the SOAP API's WSDL specifies. In this case, it'll return a MultiplyResponse. The result will also include the XML that made up the request and response, in case you need to do additional work with the XML.

Output Example Payload

{
"data": [
{
"MultiplyResult": 56
},
"<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"><soap:Body><MultiplyResponse xmlns=\"http://tempuri.org/\"><MultiplyResult>56</MultiplyResult></MultiplyResponse></soap:Body></soap:Envelope>",
null,
"<?xml version=\"1.0\" encoding=\"utf-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:tm=\"http://microsoft.com/wsdl/mime/textMatching/\" xmlns:tns=\"http://tempuri.org/\"><soap:Body><Multiply xmlns=\"http://tempuri.org/\"><intA>7</intA><intB>8</intB></Multiply></soap:Body></soap:Envelope>",
null
]
}