
Early Access
To create an inbound SOAP web service in Qntrl:
True
Only the configured request and response parameters are allowed. Any extra parameters in the incoming request will be rejected.
Non-configured output parameters will be excluded from the response.
The operation name in the request must exactly match the one defined in the WSDL — otherwise, the request will fail.
False
The system accepts any external request, even if it contains parameters not defined in the WSDL.
However, it still applies validation rules to the parameters you have configured.
Qntrl automatically generates the WSDL based on the endpoint URL, operation name, and the configured request/response parameters. Any changes made to these configurations will automatically update the WSDL.
The script can access and process operation name, request params, request headers, complete soap payload, endpoint URL.
You can define response params, response header params, fault code, fault message or you can define complete XML response.
In case of an error, you can define error codes and messages, which will be communicated back to the client.
Qntrl supports the following languages for building Function resources in Inbound SOAP APIs:
JavaScript (Native or Codex engine)
Other cloud functions – Python, Java, and Node.js are supported.
Example (Java script): Reading input parameters and writing response
/*** @param {SOAPRequest} soapRequest* @param {SOAPResponse} soapResponse*/function execute(soapRequest, soapResponse) {try {const operationName = soapRequest.getOperationName();const endpointUri = soapRequest.getEndpointUri();const requestParams = soapRequest.getRequestParams();const requestHeaders = soapRequest.getHeaderParams();console.log("SOAP Request Received:");console.log("Operation:", operationName);console.log("Endpoint URI:", endpointUri);console.log("Request Params:", JSON.stringify(requestParams));console.log("Request Headers:", JSON.stringify(requestHeaders));// === Business logic here ===// (For now we're mocking processing)const processedParam1 = "processed_value_1";const processedParam2 = "processed_value_2";// Add response headerssoapResponse.addResponseHeaderParam("server", "InternalGateway");soapResponse.addResponseHeaderParam("request-id", requestHeaders?.["request-id"] || "N/A");soapResponse.addResponseHeaderParam("timestamp", new Date().toISOString());// Add response paramssoapResponse.addResponseParam("result_code", "SUCCESS");soapResponse.addResponseParam("processed_param1", processedParam1);soapResponse.addResponseParam("processed_param2", processedParam2);} catch (e) {console.error("Error while processing SOAP request", e);soapResponse.setFaultCode(500);soapResponse.setFaultMessage(e.message);}}
Example (Java): Reading input parameters and writing response
import com.zoho.cloud.function.Context;import com.zoho.cloud.function.basic.*;import org.json.JSONObject;public class SampleSOAPFunction implements ZCFunction {@Overridepublic void runner(Context context, BasicIO basicIO) throws Exception {// Read incoming request parametersString operationName = basicIO.getParameter("operation_name").toString();String requestParams = basicIO.getParameter("request_params").toString();String requestHeaders = basicIO.getParameter("request_headers").toString();String endpointURI = basicIO.getParameter("endpoint_uri").toString();// Prepare ResponseJSONObject responseJSON = new JSONObject();try {JSONObject responseParams = new JSONObject();responseParams.put("customer_id", "CUST12345");responseParams.put("order_id", "ORD78910");responseJSON.put("response_params", responseParams);JSONObject responseHeaders = new JSONObject();responseHeaders.put("client-id", "WEBPORTAL-001");responseHeaders.put("request-id", "REQ-20251105-ALPHA99");responseJSON.put("response_header_params", responseHeaders);} catch (Exception e) {// The final XML response will have only fault code and fault message.responseJSON.put("fault_code", "500");responseJSON.put("fault_message", e.getMessage());}// From above constructed response parameter and response header, final response XML will be automatically constructed and written to client.basicIO.write(responseJSON.toString());context.log("Response Sent: " + responseJSON.toString());}}
Method: Any HTTP method (e.g., GET)
URL: https://core.qntrl.com/webservice/soap/<org-id>/<source_endpoint>?WSDL
Authentication (must be added in the request header):
Method: Any HTTP method (e.g., POST)
URL: https://core.qntrl.com/webservice/soap/<org-id>/<source_endpoint>
Authentication (must be added in the request header):
OAuth Token
Header Format: Authorization: Zoho-oauthtoken <access_token>
Required OAuth Scopes: ws_soapinbound.UPDATE
API Key
Header Format: Authorization: Bearer <api_key>
Basic Authentication
Authorization: Basic <base64-encoded username:password>
Body: The body should contain the raw XML request data.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ord="https://98173384.core.localqntrlhost.com/webservice/98173384/orderManagement"> <soapenv:Header> <ord:AuthHeader> <ord:companyName>Zoho Corp</ord:companyName> </ord:AuthHeader> </soapenv:Header> <soapenv:Body> <ord:PlaceOrder> <ord:OrderID>12345</ord:OrderID> <ord:CustomerID>98765</ord:CustomerID> <ord:ProductID>10111</ord:ProductID> <ord:Quantity>3</ord:Quantity> <ord:OrderDate>2025-03-28</ord:OrderDate> </ord:PlaceOrder> </soapenv:Body> </soapenv:Envelope>
You can control the activation of individual SOAP requests from the configuration panel:
Navigate to(settings) >> WEB SERVICES >> Inbound >> Select SOAP.
Under the Resources section on the left panel, locate the SOAP message.
Use the toggle button next to the message name to enable or disable it.
To remove a SOAP request:
Navigate to(settings) >> WEB SERVICES >> Inbound >> Select SOAP.
Select the message you want to delete.
Click the delete icon at the top right of the message details page.
You are currently viewing the help articles of Qntrl 3.0. If you are still using our older version and require guidance with it, Click here.