Shipping meaningful data from one company's IT systems to another company's IT systems is one of those problems that's been solved a billion times, with entirely new failure modes each time. EDI alone has a dozen subspecifications and allows data transfer via everything ranging from FTP to email.
When XML made its valiant attempt to take over the world, XML schemas, SOAP and their associated related specifications were going to solve all these problems. If you needed to communicate how to interact with a service, you could publish a WSDL file. Anyone who needed to talk to your service could scrape the WSDL and automatically "learn" how to send properly formatted messages. The WSDL is, in practice, a contract offered by a web service.
But the WSDL is just one mechanism to provide a specification for software. Which brings us to Patrick.
Patrick needed to be able to transmit financial transactions from one of their internal systems to a vendor in France. Both parties discussed the requirements, what specific fields needed to be sent, how, what they actually meant, and hammered out a specification document that confirmed their understanding. It would be a SOAP-based web service, and the French team would be implementing it on their end.
"Great," Patrick said in one of their meetings. "Once you've got the interface defined according to our specification, you should send us the WSDL file."
The next day, they received a WSDL file. It was a "hello world" file, autogenerated for a stub service with one method- helloWorld
.
"That isn't what we're expecting," Patrick emailed back. "Could you please send us a WSDL which implements the spec?"
The next day, Patrick got a fresh WSDL. This one looked vaguely like the specification, in that some of the methods and fields were named correctly, but half of them were missing.
"We don't need to rush this," Patrick said, "so please review the specification and ensure that the WSDL complies with the specification we agreed to."
Two days later, Patrick got a "hello world" WSDL again, followed by a WSDL for a completely unrelated web service.
Over the next few weeks, the vendor team produced a steady stream of WSDL files. Each was incorrect, sometimes wildly off target, sometimes simply missing a few fields. One Thursday, seemingly by accident, the vendor team sent a correct WSDL, and immediately followed up with another one missing half the key fields.
Eventually, they send a WSDL that more-or-less matched the spec, and stopped trying to "fix" it. Development on both sides progressed, at the glacial pace that any enterprise integration project goes. Development happened less often than meetings, and milestones slid by at an absolutely glacial pace.
But even glaciers move. So the day came for the first end-to-end test. Patrick's team sent a SOAP request containing a valid transaction.
They got no response back.
Patrick got his opposite number in France, Jean, on the phone, and explained what he was seeing.
"No," Jean said. "I can see that you are sending requests, but your requests are empty."
"We are not sending empty requests," Patrick said.
"Apologies, but yes, you are."
Patrick's team set up logging and tracked every outgoing request, and its payload. They manually validated it against the WSDL. They programatically validated it against the WSDL.
Patrick went back to Jean with his evidence.
"No, the problem must be on your side."
"Well, I've provided my logs," Patrick said. "What logging are you getting on your side? Maybe something in the middle is messing things up?"
"One moment," Jean said. Patrick listened to him typing for a bit, and then some puzzled mumbling. Then a long stretch of silence.
"Uh, Jean?"
The silence stretched longer.
"You still there?"
"Oui," Jean said, distantly. "I… ah, I cannot find the logs. Well, I can find logs, just not, the logs for this service. It appears it is not installed on our test server."
"You… didn't install it? The thing we're explicitly testing? It's not installed."
"Yes. I do not have permissions to release that code. I'll have to set up a meeting."
They aborted the test that day, and for many days thereafter. When they did finally test, the vendor team deployed an old version, with a "hello world" WSDL. Eventually, the customer that requested this integration got frustrated with waiting, and switched to a different set of vendors that could actually communicate with each other. To this day, that test server is still probably running with a "hello world" WSDL.