in reply to SOAP server must offer WSDL document too

I ran into the same problem and I don't see another way around the issue with CGI eating the input. The one difference is I found Pod::WSDL to generate my WSDL, so I have:
my $pod = Pod::WSDL->new( source => 'My::Module', location => 'http://my/soap.cgi' pretty => 1, withDocumentation => 1, ); print CGI::header('text/xml'); print $pod->WSDL;
in my wsdl block. Did you end up using the code in your post?