Creating a WSDL ater the fact, especially if you have complex structures (hashes of arrays of hashes of hashes) gets really, really messy. I'd highly recommend reading Which style of WSDL should I use? and Re: Starting on SOAP before you even start.
As you're using a WSDL file, you can drop the typing of each and every variable, and go with RPC/literal or doc/lit wrapped. (RPC/encoded, which is SOAP::Lite's default is useful if you don't have a firm specification, and the clients are flexible enough to deal with changes, but it causes no end of headaches with C and Java clients if something gets typed wrong)
There are also some absolutely awful SOAP services out there -- the strangest one that I have to deal with, the programmers obviously didn't understand SOAP, because they return a single value (an XML encoded string, that has multiple values encoded in it).