cannectors

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.Order

Options

propertytypedefaultdescription
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
booleantrueWhether 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.Order

If 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 current page and the persisted watermark are top-level template variables in the SOAP body, named as in every other module: {{ pagination.cursor }}, {{ pagination.page }}, {{ pagination.offset }}, {{ state.lastTimestamp }} and {{ state.lastId }}. The timestamp defaults to the epoch on a first run; see reading the state yourself.

body: |
  <m:ListOrdersPage xmlns:m="urn:orders">
    <m:Cursor>{{ pagination.cursor | default('') }}</m:Cursor>
    <m:Limit>100</m:Limit>
  </m:ListOrdersPage>
pagination:
  type: cursor
  param: cursor
  nextCursorField: Envelope.Body.ListOrdersPageResponse.NextCursor

MTOM 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

examples/40-soap-polling-basic-v11.yamlview source ↗
40-soap-polling-basic-v11.yaml
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/json
examples/40b-soap-polling-basic-v12.yamlview source ↗
40b-soap-polling-basic-v12.yaml
name: 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/json
examples/41-soap-polling-cursor.yamlview source ↗
41-soap-polling-cursor.yaml
name: 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>{{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/json
examples/44b-soap-input-mtom-reception.yamlview source ↗
44b-soap-input-mtom-reception.yaml
name: 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.

Cross-references