March 18, 2018
Evaluate WSDL Change Impact at a Glance
Upload the old and the updated WSDLs to WSDL Diff and see what’s impacted.
A WSDL Has Got Updated
A vendor has just sent you an updated WSDL. What’s going to break because of the changes in it?
This question is very common for any system that is built on top of SOA. You typically have a few consumers for a WSDL, or a few services that use the same WSDL, and now that WSDL needs to be updated.
- Do we have to update all clients and server at the same time (that is expensive!)
- If we do a staged deployment, what operations in the WSDL are affected (broken) if the updated client calls a non-updated service?
- And other way around, can some clients be updated later?
- How the XML structure changes? Can those changes be tolerated by some parsers (for example, some parsers do not break if they find a new element in the end of the sequence, but do break if it is found in the middle).
In addition to schema changes, WSDL can change the way the payload is structured in body/header, encoding/qualification, SOAP Action, binding properties - any of which can cause the loss of interoperability.
To make things even more tricky, some types of changes made in input break the “updated to old” scenario, while in the output they should be considered non-breaking. For instance, a new optional element in request would break the old service if passed, but the same element in response will not be generated by the old service (because it doesn’t know about it), and the element lack will be tolerated by the updated client because the element is optional.
No, neither text diff for WSDL nor text diff for generated XML can help reliably.
My team faces these tasks roughty once a week. Up until recently we did a manual diff of the WSDL/schema files and tried to figure out the impact. Sometimes it is obvious, but sometimes our approach led to mistakes.
Membrane SOA was some help. Unfortunately, in some occasions it fails to detect the changes in schema, erroneously reporting an operation as not impacted, while in fact it is broken. It is also not immediately clear from the output what scenario (“old to updated” or “updated to old”) is reported.
So after a couple of years of pain I had to write my own code that answers the questions above in a way I can directly provide to our BAs/PMs as supporting documentation for the impact assessment.
WSDL Diff & Impact Tool
Meet MockMotor WSDLDiff.
Upload Old and New WSDLs:
Review the Impact Summary. The reporting is done for “Updated client calls old server” and “Old client calls the updated server” separately:
Check what port, binding or operation are impacted and how:
Dig into a breaking change details, if required:
Please let me know if you have any comments or (oh no!) bug reports.
I'm building SOA enterprise systems for clients large and small for almost 20 years. Most of that time I've been working with BEA (later Oracle) Weblogic platform, including OSB and other SOA systems.
Feel free to contact me if you have a SOA project to design and implement. See my profile on LinkedIn.
I live in Toronto, Ontario, Canada. Email me at firstname.lastname@example.org