Skip to main content
RapidDev - Software Development Agency
outsystems-tutorial

SOAP Web Services in OutSystems: When and How to Use Them

SOAP web services in OutSystems O11 are consumed via Logic tab → Integrations → SOAP → right-click → Consume SOAP Web Service, pointing to the WSDL URL or file. Service Studio generates typed actions and structures from the WSDL automatically. SOAP is O11-only — ODC does not support SOAP. When consuming SAP, legacy banking, or government services that only expose SOAP endpoints, this is your only native option in O11.

What you'll learn

  • Import a SOAP web service from a WSDL URL or file in Service Studio
  • Understand the structures and typed actions that OutSystems generates from WSDL definitions
  • Configure WS-Security (UsernameToken) for SOAP services that require it
  • Expose an OutSystems module as a SOAP service for legacy system consumers
  • Understand why SOAP is O11-only and how to plan for ODC migration
Book a free consultation
4.9Clutch rating
600+Happy partners
17+Countries served
190+Team members
Intermediate10 min read25-30 minOutSystems 11 only (SOAP not supported in ODC)March 2026RapidDev Engineering Team
TL;DR

SOAP web services in OutSystems O11 are consumed via Logic tab → Integrations → SOAP → right-click → Consume SOAP Web Service, pointing to the WSDL URL or file. Service Studio generates typed actions and structures from the WSDL automatically. SOAP is O11-only — ODC does not support SOAP. When consuming SAP, legacy banking, or government services that only expose SOAP endpoints, this is your only native option in O11.

SOAP in OutSystems: The Legacy Integration Layer

Despite REST dominating modern API design, SOAP (Simple Object Access Protocol) remains the standard in enterprise systems built before 2010: SAP ERP, legacy banking platforms, government APIs, insurance systems, and healthcare HL7 interfaces. When you need to integrate with these systems from OutSystems, SOAP consumption is the correct tool. Service Studio handles the heavy lifting: parse the WSDL, generate typed actions for each operation, create input/output structures, and handle XML envelope serialization. You call SOAP operations like regular Server Actions. This tutorial covers the full workflow including WS-Security, error handling, and the critical ODC migration consideration.

Prerequisites

  • OutSystems 11 environment (SOAP is not available in ODC)
  • WSDL URL or WSDL file from the SOAP service provider
  • Service Studio desktop application installed and connected to your O11 environment
  • Network access from your OutSystems platform server to the SOAP service endpoint (check with your infrastructure team for on-premises deployments)

Step-by-step guide

1

Consume a SOAP web service from a WSDL

In Service Studio, click the Logic tab on the right-hand panel. Expand Integrations. Right-click SOAP and select Consume SOAP Web Service. The Consume SOAP Web Service dialog opens with two import options: - Remote URL: paste the WSDL URL directly (e.g., https://service.example.com/service?wsdl) - Local File: browse to a downloaded .wsdl file — useful when the WSDL is behind authentication or on an internal network not reachable from Service Studio Click Next. Service Studio downloads and parses the WSDL. A tree view shows all available services, ports, and operations. Check the operations you want to import. Click Finish. Service Studio creates: a SOAP service node under Logic tab → Integrations → SOAP, one action per selected operation (callable as Server Actions), and Structures under Data tab → Structures for all WSDL-defined complex types.

Expected result: The SOAP service appears under Logic tab → Integrations → SOAP with all imported operations listed as callable actions.

2

Call a SOAP operation from a Server Action

Calling a generated SOAP action is identical to calling a Server Action. In any Server Action, drag the SOAP operation from the toolbox (or from Logic tab → Integrations → SOAP → [YourService] → [Operation]) into the action flow. The operation node has input and output parameters defined by the WSDL structures. Assign your data to the input parameters before the node and read from the output parameters after. Example action flow for an address validation SOAP service: Start → Assign (RequestAddress.Street = Input.Street, RequestAddress.City = Input.City, RequestAddress.PostalCode = Input.PostalCode) → ValidateAddress (SOAP operation, Request = RequestAddress) → Assign (IsValid = ValidateAddress.Response.IsValid, StandardizedAddress = ValidateAddress.Response.StandardizedAddress) → End The SOAP operation runs server-side — never drag it into a Client Action.

Expected result: The SOAP operation is called successfully and returns data from the external service.

3

Configure the SOAP endpoint URL per environment

SOAP services often have different endpoint URLs for test and production environments. Override the endpoint URL without redeploying: O11 approach: 1. Create a Site Property: Data tab → Site Properties → right-click → Add Site Property. Name: SoapServiceEndpointUrl, Type: Text, Default: (test endpoint URL) 2. In Service Studio, click the SOAP service node → Properties → Effective URL → set to GetValue(Site.SoapServiceEndpointUrl) expression 3. In Service Center, set the Site Property to the production URL in the production environment This allows the same published module to connect to different SOAP endpoints per environment without any code change. Note: If the WSDL changes (new version of the service), you must refresh the WSDL. Right-click the SOAP service node → Refresh SOAP Web Service → provide updated WSDL → review structural changes → resolve any TrueChange errors → republish.

Expected result: The SOAP service connects to the correct endpoint URL in each environment, driven by the Site Property value in Service Center.

4

Configure WS-Security with UsernameToken

Many enterprise SOAP services (especially SAP, banking) require WS-Security headers in the SOAP envelope. Service Studio has built-in WS-Security support. In Service Studio, click your SOAP service node under Logic tab → Integrations → SOAP. In the Properties panel: 1. Find Authentication property → select Username/Password 2. Set Username expression to Site.SoapUsername (a Site Property) 3. Set Password expression to Site.SoapPassword (a Site Property marked as Secret) For more advanced WS-Security configurations (X.509 certificates, signature algorithms, timestamp requirements), you need Integration Studio to create a C# extension. The extension calls the service using .NET's System.ServiceModel.BasicHttpBinding with WCF security configuration, then wraps it in OutSystems actions via Integration Studio's action mapping. Common WS-Security modes OutSystems handles natively: None, Username/Password (UsernameToken PasswordText). Other modes (PasswordDigest, X.509, SAML tokens) require Integration Studio extensions.

Expected result: The SOAP service accepts requests with the correct WS-Security UsernameToken header. Authentication errors (SOAP Fault with authentication message) are resolved.

5

Handle SOAP faults with exception handlers

SOAP services return errors as SOAP Fault XML responses, not HTTP error status codes. OutSystems translates SOAP Faults into Communication Exceptions automatically. To handle errors, right-click the Server Action flow after the SOAP operation → Add Exception Handler → Communication Exception. The CommException.Message contains the SOAP Fault string field. The CommException.ExceptionMessage contains the full fault detail. Action flow with error handling: Start → [SOAP Operation] → Assign (success output) → End [Communication Exception] → Assign (IsSuccess=False, ErrorMessage = "Service call failed: " + CommException.Message) → LogError (Module=YourModule, Message="SOAP fault: " + CommException.ExceptionMessage) → End For SOAP services that return business errors inside a successful SOAP response (not a Fault), inspect the response structure fields — the service documentation will define which fields indicate error conditions. Check them with If nodes after the operation call. Service Center → Monitoring → Integrations logs every SOAP request/response including the raw XML envelope — invaluable for debugging malformed requests or unexpected responses.

Expected result: SOAP Faults are caught and translated into user-friendly messages. Errors are logged to Service Center for investigation.

6

Expose an OutSystems module as a SOAP service

To expose OutSystems actions as a SOAP service for legacy consumers: 1. Logic tab → Integrations → SOAP → right-click → Expose SOAP Web Service 2. Name the service (e.g., LegacyIntegrationService) 3. Right-click the service → Add SOAP Web Service Method 4. Name the method (this becomes the SOAP operation name) 5. Add input/output parameters — these become the WSDL message types 6. Implement the method logic like any Server Action 7. 1-Click Publish After publishing, the WSDL is accessible at: https://<server>/<module>/SoapService.asmx?WSDL Provide this URL to the legacy system consumer to generate their client code. Note: Exposed SOAP services use the default OutSystems authentication unless you add custom validation in the method logic. For WS-Security on exposed services, check the HTTPRequestHandler for SOAPAction headers and implement token validation manually.

Expected result: The OutSystems WSDL is accessible and legacy consumers can generate client stubs from it. SOAP operations return correctly structured XML responses.

7

Plan for ODC migration when using SOAP

SOAP is a blocking factor for O11-to-ODC migration. Before beginning migration: 1. Audit all SOAP integrations: in Service Studio, Logic tab → Integrations → SOAP — list every consumed and exposed service 2. For each consumed SOAP service, check if the provider has a REST equivalent — most modern enterprise platforms now offer REST/OpenAPI alongside their SOAP endpoints 3. For SAP: use SAP OData APIs (REST-based) via Integration Builder (O11) or direct REST consumption (ODC compatible) 4. For custom legacy systems: work with the provider to expose a REST wrapper or implement a REST-to-SOAP adapter service 5. For exposed SOAP services: identify all SOAP consumers, migrate them to REST when feasible, or keep those specific modules in O11 as bridging services The O11 and ODC Conversion Assessment Tool (ODC Portal → Convert from O11) flags SOAP dependencies as migration blockers — resolve these before running the assessment.

Expected result: You have a complete inventory of SOAP dependencies and a migration plan that addresses each one before attempting ODC migration.

Complete working example

SOAP_CallPattern_With_ErrorHandling.txt
1/* Server Action: ValidateCustomerAddress
2 Calls external SOAP address validation service
3 Input: Street (Text), City (Text), PostalCode (Text)
4 Output: IsValid (Boolean), StandardizedStreet (Text), ErrorMessage (Text)
5*/
6
7Start
8 |
9 v
10[Assign] -- Build SOAP request structure
11 AddressRequest.Street = Street
12 AddressRequest.City = City
13 AddressRequest.PostalCode = PostalCode
14 |
15 v
16[ValidateAddress] -- SOAP operation (generated from WSDL)
17 Request = AddressRequest
18 |
19 v
20[If] ValidateAddress.Response.Status = "SUCCESS"
21 |
22 True -->
23 [Assign]
24 IsValid = True
25 StandardizedStreet = ValidateAddress.Response.StandardizedAddress.Street
26 ErrorMessage = ""
27 |
28 v
29 End
30 |
31 False --> (business error inside successful SOAP response)
32 [Assign]
33 IsValid = False
34 ErrorMessage = ValidateAddress.Response.ErrorDescription
35 |
36 v
37 End
38
39[Exception Handler: Communication Exception] -- SOAP Fault
40 |
41 v
42[LogError]
43 Module = "AddressModule"
44 Message = "SOAP Fault from AddressValidation service"
45 ErrorDetail = CommException.ExceptionMessage
46 |
47 v
48[Assign]
49 IsValid = False
50 ErrorMessage = "Address validation service is temporarily unavailable."
51 |
52 v
53End

Common mistakes

Why it's a problem: Trying to use SOAP services in ODC

How to avoid: SOAP is not supported in ODC at all — no consume, no expose. If your integration requires SOAP, the module must stay on O11. For ODC migration planning, identify REST alternatives for every SOAP service first, or implement a REST-to-SOAP adapter bridge running in O11.

Why it's a problem: Refreshing the WSDL without reviewing the generated structural changes

How to avoid: When a SOAP service provider updates their WSDL (new fields, renamed operations, changed types), right-clicking Refresh SOAP Web Service updates the structures but may break existing Assign nodes that reference renamed or removed fields. Always review TrueChange errors after a WSDL refresh and update all affected flows before republishing.

Why it's a problem: Placing SOAP operation calls directly in a Client Action

How to avoid: SOAP operations run on the OutSystems server and make network calls — they cannot be placed in Client Actions. TrueChange will show an error. Always call SOAP operations from Server Actions, which are then called from Client Actions or Data Actions if needed.

Why it's a problem: Not handling business error responses inside a successful SOAP Fault-free response

How to avoid: Some SOAP services return HTTP 200 with a valid SOAP response, but include error codes or status fields in the response structure. OutSystems will not raise an exception for these. Always inspect the response fields for error indicators and handle them with If nodes after the operation call.

Best practices

  • Always override the SOAP endpoint URL via Site Properties so you can point to test vs production endpoints without redeploying.
  • Download a local copy of the WSDL file and import from file rather than URL — WSDL URLs on enterprise systems can become temporarily unavailable, blocking your publish cycle.
  • Store WS-Security credentials in Site Properties marked as Secret — never in the SOAP service URL or hardcoded in method calls.
  • Add a Communication Exception handler to every Server Action that calls a SOAP operation — SOAP services are notorious for returning Fault responses for business errors, not just network failures.
  • Check Service Center → Monitoring → Integrations for the raw SOAP XML envelope when debugging — it shows the exact request that was sent and the exact response received.
  • Prefer REST over SOAP for any new integrations, even with enterprise systems that offer both — REST generates cleaner OutSystems structures and is ODC-compatible.
  • Keep SOAP-dependent modules isolated in their own OutSystems module/app so you can identify all SOAP dependencies quickly when planning ODC migration.

Still stuck?

Copy one of these prompts to get a personalized, step-by-step explanation.

ChatGPT Prompt

I need to consume a SOAP web service in OutSystems 11 for our legacy payment processor. The service uses WS-Security with UsernameToken PasswordText. The WSDL has 3 operations: SubmitPayment (input: Amount, CardToken, CurrencyCode; output: TransactionId, Status, ErrorCode), QueryPayment (input: TransactionId; output: Status, Amount), and VoidPayment (input: TransactionId; output: Status). Help me design: 1) the Site Properties to store WS-Security credentials and endpoint URL, 2) a Server Action for each operation with proper error handling, 3) how to interpret SOAP Fault vs business-level error responses.

OutSystems Prompt

I have a SOAP web service imported in my OutSystems 11 module. The service has an operation GetCustomerData that returns a complex nested structure: CustomerRecord with nested Address (Street, City, State, PostalCode, Country) and ContactList (array of Contact with Type and Value). Write the Server Action flow (using arrow notation) that: calls GetCustomerData with a CustomerId input, maps the nested response to flat local variables, handles the case where ContactList is empty, and handles Communication Exceptions.

Frequently asked questions

Why is SOAP not supported in OutSystems Developer Cloud (ODC)?

ODC is built on a cloud-native, containerized architecture using modern .NET that deliberately excludes legacy WCF-based SOAP infrastructure. OutSystems made the strategic decision to support only REST in ODC to reduce platform complexity, improve performance, and align with modern API standards. Existing O11 SOAP integrations must be replaced with REST equivalents (or kept in O11 as bridging modules) before migrating to ODC.

How do I handle a SOAP service that returns different response structures depending on the operation result?

Some SOAP services use polymorphic response types or xsi:type attributes for conditional structures. OutSystems generates base structures from the WSDL, but may not correctly handle derived types at runtime. In these cases, use Integration Studio (O11) to create a C# extension that calls the service with .NET's WCF client and maps the response to OutSystems-friendly structures. This gives you full control over XML deserialization.

Can I test a SOAP service call without publishing my OutSystems module?

Not directly from Service Studio. Unlike REST methods which have a built-in Test tab in the import dialog, SOAP operations have no in-IDE testing interface. Use Postman or SoapUI to test the SOAP service before importing it. After importing and building a Server Action, use the Service Studio Debugger (F6) with a breakpoint on the SOAP operation node to step through the call and inspect the response structure at runtime.

RapidDev

Talk to an Expert

Our team has built 600+ apps. Get personalized help with your project.

Book a free consultation

Need help with your project?

Our experts have built 600+ apps and can accelerate your development. Book a free consultation — no strings attached.

Book a free consultation

We put the rapid in RapidDev

Need a dedicated strategic tech and growth partner? Discover what RapidDev can do for your business! Book a call with our team to schedule a free, no-obligation consultation. We'll discuss your project and provide a custom quote at no cost.