The endpoint replacement technique in ServiceContainer.py makes a lot of assumptions about the XML formatting of the original WSDL document. It uses regular expressions instead of a DOM/XPath-based approach, and it hardcodes the "soap" prefix in "soap:address". It relies on an internal assignment to _wsdl, instead of a function which handles include/import dependencies and rewriting the WSDL, which means that externally imported schemas are not found at runtime. Furthermore, it fails when the tag has an end tag as in: <soap:address location="..."></soap:address>. This seems to be the format generated by Axis. In general, the endpoint replacement logic is extremely brittle and cannot be used as it is for most real-world scenarios.
The attached patch somehow takes on this last issue of closing end tag but doesn't solve the general problem. My suggestion is to handle the replacement logic more carefully, based on XML, and to document its weaknesses.
For the rewriting and merging of multiple WSDLs into one, I've got some code somewhere for doing this but would rather like to see such functionality into a general WSDL handling library. Once WSDL 2 comes in, ZSI will probably need this anyway.
Patch to work around endpoint replacement logic