I thought I would be sensible and not go down the reinventing road to SOAP services so using SOAP::Lite is a no-brainer.
Lots of handy tutorials on the very basic stuff, unfortunately both the API and the Documentation let you down as soon as you reach the nontrivial level.
Even a relatively simple ebXML request becomes a lot of trouble - the basic header and body tags in an ebXML request are more than enough to show that SOAP::Data and SOAP::Header soon become cumbersome.
Fortunately I figured I could wrap that, so I wrote SOAP::Data::Builder which provides a handy wrapper with a nice API to generate complex SOAP requests.
This still leaves me with the problem of how in the world I modify the envelope and body attributes.
Although there is a SOAP::Transport object referred to in the SOAP::Lite perldoc, there is no explaination of what it does or what you can use it for and it has no pod itself.
There doesn't appear to be any way of manipulating the envelope in a client, which just the kind of thing that would make it SOAP::Lite useful.
Despite its claims not to be a crippled API, in its attempts to make SOAP easy for beginners it really holds back any serious work.
I mean why the hell is building a request formed like this so hard :