Comparing REST and SOAP approaches for supplier data integration with Windchill

We’re designing a new integration to sync supplier data between our ERP system and Windchill 11.2 for sourcing management. The debate in our team is whether to use REST or SOAP for this integration.

REST seems simpler and more modern - easier to consume, better documentation in Windchill, and our developers prefer working with JSON. However, SOAP offers stronger schema enforcement through WSDL, which could catch data validation issues earlier. We’re also dealing with complex transactional scenarios where we need to create suppliers, link them to parts, and update approval workflows in a single atomic operation.

The integration will handle about 500 supplier records daily with associated part relationships and compliance documents. We need reliable error handling and the ability to rollback partial updates. Some team members argue that REST’s stateless nature makes transaction management harder, while others say modern REST frameworks handle this fine.

What have been your experiences with REST vs SOAP for complex Windchill integrations? Are there specific scenarios where one clearly outperforms the other?

For Windchill 11.2, REST vs SOAP isn’t purely a preference debate — the two approaches have structurally different capabilities that map differently to your atomic transaction requirement.

Where Each Approach Breaks Down

Windchill’s REST API (via ThingWorx Navigate or the native Windchill RESTful Services layer) is stateless by design. Multi-object operations — create supplier, link to Part, trigger workflow — require separate HTTP calls. There’s no native distributed transaction coordinator. If step 2 fails, step 1 has already committed.

Windchill SOAP (via PTC Web Services / WindchillDS) exposes service operations that run within the Windchill method server context, giving you access to Windchill’s internal transaction management (WTTransaction). A single SOAP call can execute multiple Windchill manager operations under one transaction boundary, with server-side rollback on failure.

For your atomic create-link-workflow scenario, SOAP has a structural advantage — not because it’s “older” but because it runs inside the Windchill JVM transaction context.

Recommended Pattern: SOAP for Transactional Core, REST for Query/Status

Use SOAP to wrap your composite operation in a custom service delegator. Dev paradigm: Windchill Java server-side customization exposed via SOAP.

// Custom WindchillService method — runs in Windchill method server transaction
public void syncSupplier(SupplierPayload payload) throws WTException {
    Transaction tx = new Transaction();
    try {
        tx.start();

        // Step 1: Create or update WTPart-linked supplier object
        WTPart part = PartHelper.service.getPartByNumber(payload.getPartNumber());
        SupplierOrg supplier = createOrUpdateSupplier(payload);

        // Step 2: Link supplier to part via Windchill Link manager
        SupplierPartLink link = SupplierPartLink.newSupplierPartLink(supplier, part);
        PersistenceHelper.manager.save(link);

        // Step 3: Initiate approval workflow
        WorkflowHelper.service.startProcess(
            "SupplierApproval", supplier, payload.getWorkflowTemplate()
        );

        tx.commit();
    } catch (Exception e) {
        tx.rollback();
        throw new WTException("Supplier sync failed: " + e.getMessage(), e);
    }
}

Rollback: tx.rollback() in the catch block reverts all three operations atomically. No compensating transactions needed.

Debug Approach

  • Enable Windchill method server logging via xconf properties (wt.log.level=DEBUG) for the service class package — verify in your version for exact property names.
  • Use Windchill Log Viewer or tail MethodServer.log during testing.
  • For SOAP envelope inspection, proxy through SoapUI and validate against the WSDL before promoting to production.
  • Test partial-failure scenarios by deliberately throwing exceptions after step 1 to verify tx.rollback() behavior in your environment.

On REST for 500 Daily Records

REST is appropriate for the read/polling side — fetching supplier status, checking workflow state, exporting compliance doc metadata. For idempotent bulk reads, REST’s simplicity and JSON tooling are genuine advantages.

For write operations requiring atomicity, REST requires you to implement saga/compensating transaction patterns in your integration middleware — that’s additional failure surface you don’t need to own when SOAP can delegate that responsibility into Windchill’s transaction manager.

Verify the specific WTTransaction API signatures and available workflow helpers against your 11.2 build — PTC has adjusted method server APIs across minor releases.


This draft is based on general Windchill knowledge. It has not been verified against your specific version and environment. Practitioners: verify the steps and share your experience below.

REST’s simplicity is its biggest advantage for most integrations. The Windchill REST API is well-documented and easier to debug - you can test endpoints directly in a browser or Postman. JSON payloads are human-readable and lighter than XML. For supplier data sync, REST should handle your volume easily. The stateless nature isn’t really a limitation - you can implement transactional logic in your integration layer using compensating transactions if needed.

Don’t underestimate SOAP’s schema enforcement benefits. With WSDL, both systems have a contract that defines exactly what data is expected. If your ERP sends a malformed supplier record, SOAP will reject it at the service boundary rather than letting bad data propagate into Windchill. For complex supplier objects with nested relationships, this validation is invaluable. We’ve caught countless integration bugs during development because SOAP enforced the schema strictly.

The schema validation point is compelling. But can’t we achieve similar validation with JSON Schema in REST? We could define schemas for our supplier payloads and validate them before sending to Windchill. Would that give us the best of both worlds - REST’s simplicity with SOAP-like validation?

JSON Schema validation is possible but not natively enforced by REST services like WSDL is with SOAP. You’d need to implement it yourself in your integration middleware. That said, for complex transactional scenarios, SOAP’s built-in WS-Transaction support is more robust than trying to coordinate REST calls. If you’re doing multi-step operations (create supplier → link to parts → trigger workflow), SOAP can handle this as a single transactional unit with proper rollback. With REST, you’re managing state across multiple stateless calls.

Consider your long-term architecture too. REST aligns better with modern cloud services, microservices patterns, and mobile applications. If you might expose supplier data to mobile apps or external partners later, REST is the way to go. SOAP is increasingly legacy - fewer developers know it well, and tooling support is declining. We migrated from SOAP to REST last year and haven’t looked back, even for complex scenarios.

Here’s a pragmatic middle ground: use REST for standard CRUD operations on supplier data, but implement your complex transactional logic in a custom Windchill service that REST calls. This gives you REST’s simplicity for the integration interface while handling transaction complexity server-side where it belongs. Your integration calls a single REST endpoint that internally manages the multi-step supplier creation process atomically. This approach combines REST’s developer-friendly interface with proper transaction handling.

Having implemented both approaches extensively with Windchill, here’s my analysis of the REST vs SOAP decision for your supplier integration:

REST Simplicity: REST’s advantages are significant for developer productivity and maintainability. The Windchill REST API provides excellent coverage for sourcing objects including suppliers, manufacturer parts, and supplier agreements. JSON payloads are easier to work with than XML, debugging is straightforward with standard HTTP tools, and the learning curve is minimal. For your 500 daily records, performance will be excellent with REST - the overhead difference between JSON and XML is negligible at that scale. REST also aligns with modern integration patterns and will be easier to extend if you add mobile or partner portal access later.

SOAP Schema Enforcement: The schema validation argument for SOAP is valid but can be addressed with REST. While SOAP’s WSDL provides automatic schema enforcement, you can achieve similar rigor with REST by implementing JSON Schema validation in your integration middleware or ESB layer. Define schemas for your supplier objects and validate payloads before sending to Windchill. This catches data quality issues early without requiring SOAP’s complexity. Modern API gateways support JSON Schema validation natively.

Complex Transaction Support: This is where the discussion gets nuanced. SOAP’s WS-Transaction and WS-Coordination specifications provide built-in distributed transaction support, which sounds ideal for your multi-step supplier creation process. However, in practice, these features are rarely used correctly and add significant complexity. Most organizations implement compensating transactions instead - even with SOAP.

For REST, the recommended pattern is to design your integration as idempotent operations with a custom orchestration service in Windchill. Create a single REST endpoint that accepts a complete supplier package (supplier data + part relationships + workflow triggers) and handles the entire operation atomically within Windchill’s transaction context. If any step fails, the service rolls back the entire operation. This moves transaction complexity to the server side where it’s easier to manage and test.

Example pattern: POST to /suppliers/complete with a comprehensive payload. The service internally uses Windchill’s PersistenceHelper.manager.startTransaction() to ensure atomicity. Your integration makes one REST call and gets a definitive success or failure response.

Recommendation: Choose REST with these implementation guidelines:

  • Implement JSON Schema validation in your middleware for data quality enforcement
  • Design a custom Windchill service that handles multi-step supplier operations atomically
  • Use idempotent operation design so retries don’t cause duplicate data
  • Implement comprehensive error handling with clear error codes in REST responses
  • Use HTTP status codes properly (201 for creation, 409 for conflicts, etc.)

The combination of REST’s simplicity with proper server-side transaction handling gives you the best of both worlds. SOAP’s theoretical advantages in schema enforcement and transactions don’t outweigh REST’s practical benefits in developer productivity, maintainability, and future extensibility. The key is not choosing REST and hoping transactions work out - it’s architecting your integration to handle complex operations correctly regardless of the protocol.