soapPolling
Poll a SOAP operation, parse the XML response, and emit records.
soapPolling is the SOAP counterpart to httpPolling. It sends a SOAP request,
parses the XML response into a map, extracts records with dataField, and then
hands those records to the filter chain. With a schedule, it runs on CRON.
Without one, it runs once.
Minimal example
input:
type: soapPolling
endpoint: https://soap.example.com/orders/v11
soapVersion: "1.1"
soapAction: urn:ListOrders
operation: ListOrders
body: |
<m:ListOrders xmlns:m="urn:orders">
<m:Status>ready</m:Status>
</m:ListOrders>
dataField: Envelope.Body.ListOrdersResponse.Orders.OrderOptions
| property | type | default | description |
|---|---|---|---|
typerequired | "soapPolling" | — | Module type discriminator. Must be `soapPolling` for this module. |
id | string | — | Unique identifier within the pipeline. |
name | string | — | Human-readable name. |
description | string | — | — |
enabled | boolean | true | Whether module is active. |
tags | array<string> | — | — |
onError | string | "fail" | Default error action. Case-insensitive; normalized to lowercase by the runtime. |
endpointrequired | string | — | SOAP endpoint URL. Templates are accepted; the final URL is validated at runtime after template resolution. |
soapVersion | string | "1.1" | SOAP envelope and HTTP binding version. 1.11.2 |
soapAction | string | — | SOAP action. SOAP 1.1 sends this as the SOAPAction header; SOAP 1.2 sends it as a Content-Type action parameter. |
operationrequired | string | — | Logical SOAP operation name. |
bodyrequired | string | — | Raw XML body fragment. Templates ({{record.field}}) are XML-escaped at runtime. |
| array<object> | — | Raw SOAP header XML fragments. | |
| union (4 variants) | — | HTTP transport authentication. | |
| object | — | — | |
| object | — | — | |
httpHeaders | map<string, string> | — | Additional HTTP headers. Content-Type and SOAPAction are controlled by the SOAP version. |
timeoutMs | integer | — | Request timeout in milliseconds. When omitted, each module applies its own runtime default. |
schedule | string | — | Optional CRON expression for polling. Validated at runtime. |
| object | — | — | |
| object | — | — | |
dataField | string | — | XML map field path containing the array of records to extract from the SOAP response. |
| object | — | — |
Record extraction
dataField points into the parsed SOAP response map. For a response shaped like
Envelope.Body.ListOrdersResponse.Orders.Order, configure that exact path:
dataField: Envelope.Body.ListOrdersResponse.Orders.OrderIf the selected value is an array, each item becomes one record. If it is a single object, one record is emitted.
Pagination and state
SOAP pagination is configured with the same pagination and
statePersistence blocks as HTTP polling. The cursor, page, or offset values
are exposed through the synthetic record used to render the SOAP body.
body: |
<m:ListOrdersPage xmlns:m="urn:orders">
<m:Cursor>{{record.pagination.cursor | default: ""}}</m:Cursor>
<m:Limit>100</m:Limit>
</m:ListOrdersPage>
pagination:
type: cursor
param: cursor
nextCursorField: Envelope.Body.ListOrdersPageResponse.NextCursorMTOM responses
When the SOAP response is multipart/related, records include received
attachments under _soapAttachments. Each entry is keyed by Content-ID and
contains contentId, contentType, and data.
Examples
name: soap-polling-basic-v11
version: 1.0.0
description: Poll a SOAP 1.1 operation and forward extracted records as an HTTP batch.
tags:
- soap
- soap-polling
input:
type: soapPolling
endpoint: https://soap.example.com/orders/v11
soapVersion: "1.1"
soapAction: urn:ListOrders
operation: ListOrders
body: |
<m:ListOrders xmlns:m="urn:orders">
<m:Status>ready</m:Status>
</m:ListOrders>
dataField: Envelope.Body.ListOrdersResponse.Orders.Order
filters: []
output:
type: httpRequest
endpoint: https://destination.example.com/api/orders/import
method: POST
requestMode: batch
headers:
Content-Type: application/jsonname: soap-polling-basic-v12
version: 1.0.0
description: Poll a SOAP 1.2 operation. The SOAP action is sent as a content-type parameter.
tags:
- soap
- soap12
input:
type: soapPolling
endpoint: https://soap.example.com/orders/v12
soapVersion: "1.2"
soapAction: urn:ListOrders
operation: ListOrders
body: |
<m:ListOrders xmlns:m="urn:orders">
<m:Status>ready</m:Status>
</m:ListOrders>
dataField: Envelope.Body.ListOrdersResponse.Orders.Order
filters: []
output:
type: httpRequest
endpoint: https://destination.example.com/api/orders/import
method: POST
requestMode: batch
headers:
Content-Type: application/jsonname: soap-polling-cursor
version: 1.0.0
description: Poll a cursor-paginated SOAP operation by injecting the cursor into the XML body.
tags:
- soap
- pagination
input:
type: soapPolling
endpoint: https://soap.example.com/orders/cursor
soapAction: urn:ListOrdersPage
operation: ListOrdersPage
body: |
<m:ListOrdersPage xmlns:m="urn:orders">
<m:Cursor>{{record.pagination.cursor | default: ""}}</m:Cursor>
<m:Limit>100</m:Limit>
</m:ListOrdersPage>
dataField: Envelope.Body.ListOrdersPageResponse.Orders.Order
pagination:
type: cursor
param: cursor
nextCursorField: Envelope.Body.ListOrdersPageResponse.NextCursor
filters: []
output:
type: httpRequest
endpoint: https://destination.example.com/api/orders/import
method: POST
requestMode: batch
headers:
Content-Type: application/jsonname: soap-input-mtom-reception
version: 1.0.0
description: Poll a SOAP operation whose response may be multipart/related MTOM; parsed attachments are exposed under each record's _soapAttachments map.
tags:
- soap
- mtom
input:
type: soapPolling
endpoint: https://soap.example.com/documents/download
soapAction: urn:ListDocuments
operation: ListDocuments
body: |
<m:ListDocuments xmlns:m="urn:documents">
<m:Folder>inbox</m:Folder>
</m:ListDocuments>
dataField: Envelope.Body.ListDocumentsResponse.Documents.Document
filters: []
output:
type: httpRequest
endpoint: https://destination.example.com/api/documents
method: POST
requestMode: batch
headers:
Content-Type: application/json
# Runtime convention for received MTOM parts:
# each returned record includes _soapAttachments[contentId] with contentId,
# contentType, and data ([]byte). Phase 5 docs show mapping patterns for
# copying these values into domain-specific fields.