SOAPBuilder.dump uses the code "meth = getattr(self, "dump_" + type(obj).__name__)" to determine what method to call.
The exception faultType is descended from the Python Exception class. In Python 2.5 Exception was changed to the new style class. In prior Python versions the code above would return "instance" and dump_instance would be called. In Python 2.5 the code returns "faultType" and silently defaults to not sending the fault to the client.
This may needs some thought as any new style class returned from the server would have the same problem.
proposed patch:
--- SOAPBuilder.py.orig 2009-01-07 20:16:49.000000000 +0100
+++ SOAPBuilder.py 2009-01-07 20:17:02.000000000 +0100
@@ -525,6 +525,18 @@
dump_dict = dump_dictionary # For Python 2.2+
+ def dump_faultType(self, obj, tag, typed=1, ns_map={}):
+ cns, cdecl = self.genns(ns_map, NS.ENC)
+ vns, vdecl = self.genns(ns_map, NS.ENV)
+ self.out.append('''<%sFault %sroot="1"%s%s>
+<faultcode>%s</faultcode>
+<faultstring>%s</faultstring>
+''' % (vns, cns, vdecl, cdecl, obj.faultcode, obj.faultstring))
+ if hasattr(obj, "detail"):
+ self.dump(obj.detail, "detail", typed, ns_map)
+ self.out.append("</%sFault>\n" % vns)
+ return
+
def dump_instance(self, obj, tag, typed = 1, ns_map = {}):
if Config.debug: print "In dump_instance.", "obj=", obj, "tag=", tag
if not tag: