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
stringUnique identifier within the pipeline.
name
stringHuman-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
stringSOAP 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
stringSOAP action. SOAP 1.1 sends this as the SOAPAction header; SOAP 1.2 sends it as a Content-Type action parameter.
operationrequired
stringLogical SOAP operation name.
bodyrequired
stringRaw 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
integerRequest timeout in milliseconds. When omitted, each module applies its own runtime default.
schedule
stringOptional CRON expression for polling. Validated at runtime.
object
object
dataField
stringXML 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 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.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>{{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/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