After reading all of the other good answers, I thought it might be helpful to provide a "super laymans" version. I hope it helps.
SOAP is like the computer version using the postal service. A message (like a letter) is placed in an envelope and sent off to the person it is intended for.
Primarily, SOAP is an XML vocabulary. It defines a language, using the XML specification, for how to address and send send messages.
Specifically, it standardizes what we refer to as:
- "an envelope" (actually called a SOAP envelope)
- "the letter" (called "the body")
- various annotations (called "headers" - think of these like stamps, signature request, sender information, etc - which the post-office uses to route the message)
In addition, SOAP defines a type-system
, much like the type definitions you find in .Net, Java or XSD. I won't elaborate on this - as there is plenty of documentation out there as mentioned in previous answers.
The primary design focus of this language/vocabulary was to allow interoperability across platforms. So, Java calling COM, calling .Net, calling J2EE and the rest while remaining extendable for the foreseeable future. Instead of building yet another bridge between a COM object and a Java class, we can simply use SOAP to expose the functionality of our object so that other platforms can use them without the need for bridges. Or, to put it differently - SOAP was one last bridge, designed to replace all of the previous bridges.
By now, all major development toolkits have some form of SOAP support. This has made interoperability more and more available - but in most environments, a certain level of configuration is still necessary in order to make communication truly seamless.
I should note also that SOAP no longer stands for what its original intent was. At some point, I think some important person will (re)name it: Service Oriented Access Protocol
.
I hope this helps!