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.