php-soap/wsdl
php-soap/wsdl provides a modern PHP API for reading and navigating WSDL documents. Inspect services, bindings, ports, operations, and schemas, resolve imports, and power SOAP clients or code generation without manual XML parsing.
Architecture fit. php-soap/wsdl is a narrow, well-scoped library: it turns WSDL XML into a typed object graph (services, bindings, ports, operations) and resolves imports. It is not a SOAP client, not Laravel-aware, and carries no framework coupling — which is exactly what we want from an infrastructure dependency. It fits our architecture in two places: (1) a build/CI-time introspection layer for validating and diffing partner WSDL contracts, and (2) a runtime pre-flight layer for dynamic SOAP dispatch. Treat it as a parser primitive, not a solution. The real product value is what we build on top: generated client stubs, contract-drift detection, and admin-visible service catalogs for legacy/enterprise integrations.
Integration feasibility. Composer-only, MIT, PHP-native. Integration cost is low: a thin wrapper service, a container binding, and a cache decorator. No service provider is needed because it is standalone — we own the Laravel glue, which is both cheap and a governance point (we are adopting an unopinionated library, not a maintained Laravel package). Fit is best where we already have SOAP obligations (banking, payments, telecom, government, ERP/CRM bridges) and worst in greenfield APIs where REST/JSON is the right answer.
Technical risk. The dominant risk is not code quality but adoption and supply chain. 18 stars and an unverified repository signal a small maintainer pool, limited external scrutiny, and a real bus-factor exposure. The release metadata (2026-05-29) is anomalous against a typical review date and must be verified before we trust the version timeline. Unresolved at this stage: WSDL 2.0 support, depth of XSD type resolution (complex types, choice/all, nested import/include), error model (exceptions vs. result objects), and whether remote loading is PSR-18-injectable. Security review will want proof that remote fetch is allowlistable and that XML parsing disables external entities and entity expansion — remote WSDL loading is an SSRF and XXE surface if wired naively to user-supplied URLs.
Key questions. Does it resolve transitive XSD imports or only WSDL-level imports? What is the supported PHP version matrix and BC policy (pre-1.0 semver risk)? Does it integrate cleanly with the wider php-soap ecosystem (ext-soap engine, PSR-18 transport) or stand alone? Can we inject an HTTP client and a cache? What is the maintainer commitment and security disclosure process? How large a WSDL can it parse within our memory and latency budgets?
Stack fit. Laravel/PHP is a comfortable host: composer require php-soap/wsdl, bind a WsdlInspector interface in a service provider, and decorate it with a cache and an HTTP client. Keep it out of controllers — expose it through queued jobs and artisan commands. If we later need actual invocation, pair it with a PSR-18 transport rather than ext-soap, so we retain HTTP middleware, retries, and observability.
Migration path. Start by replacing hand-rolled DOMDocument/SimpleXML WSDL parsing — the highest-value, lowest-risk swap, since the behavior is already ours and only the internals change. Next, absorb any bespoke WSDL introspection embedded in generated client code. Finally, if we adopt runtime dynamic dispatch, route it through our wrapper so the parser remains a swappable implementation detail.
Compatibility. Verify PHP version alignment with our runtime before adoption and pin the version explicitly. Watch for divergence in PHP's ext-soap WSDL dialect quirks (some vendor WSDLs are non-conformant); plan for a compatibility shim or fixture suite of real partner documents, not synthetic ones. Validate that the object model is stable enough to persist or serialize if we cache parsed results.
Sequencing. (1) Timeboxed spike against three real partner WSDLs, including one ugly legacy document with imports. (2) Security review of remote loading and XML entity handling. (3) Build the wrapper, cache, and allowlist. (4) Ship CI contract-drift detection — visible value, no production risk. (5) Only then consider a runtime path, with the wrapper shielding us from replacement.
Maintenance. Low code churn expected for a parser, but maintenance burden shifts to us: we own the wrapper, the cache invalidation, and the upgrade testing. Pin versions and budget a quarterly dependency review. Absent a responsive upstream, expect to vendor or fork — price that in.
Support. Community-only, no SLA. Escalation for a broken WSDL parse lands on our team. Mitigate with a fixture corpus and a documented fallback to ext-soap or manual parsing for pathological documents.
Scaling. Parsing is CPU- and I/O-bound. Never parse per request — cache the object model keyed by WSDL URL plus content hash, with a TTL and a manual bust endpoint. Remote import resolution can fan out into many HTTP calls; bound concurrency and total fetch time. Memory pressure is real for very large enterprise WSDLs; enforce a size ceiling and fail fast.
Failure modes. Upstream WSDL unavailable or slow (partner outage becomes our outage — cache aggressively and degrade gracefully). Malformed or non-conformant XML. Unresolvable or cyclic imports. XXE and entity-expansion attacks if parsing flags are wrong. SSRF if URLs are user-supplied. Silent model drift when partners change contracts without notice — this is precisely what the drift-detection job should catch. Namespace collisions across imported documents.
Ramp-up. Modest for any PHP developer on the API surface; steep for the domain. The real cost is WSDL/XSD literacy — bindings, ports, message parts, schema imports — which most Laravel teams lack. Budget one engineer as the SOAP subject-matter owner, invest in a short internal primer and a fixture library, and keep the surface area small by routing all usage through the wrapper so the rest of the team never touches the parser directly.
How can I help you explore Laravel packages today?