
Why is it you always find the answer to a problem after you ping the mailing list? For future reference, the deferred returned from the soap_method should "raise" the faultType in its callbacks, not "return" it as I was doing. Thanks, Charles Moad wrote:
I have a soap server that I am trying to make handle errors correctly. When there is an error I just return a SOAPpy.faultType instance. The client should correspondlingly raise a python exception when it gets this. Unfortunately it looks like twisted is returning the faultType instance as a valid response. Here is the returned SOAP:
*** Incoming SOAP ****************************************************** <?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"> <SOAP-ENV:Body> <pdbChainFileCompressedResponse SOAP-ENC:root="1"> <SOAP-ENV:Fault SOAP-ENC:root="1"> <faultcode>ArgumentError</faultcode> <faultstring>Invalid PDB Code</faultstring> </SOAP-ENV:Fault> </pdbChainFileCompressedResponse> </SOAP-ENV:Body> </SOAP-ENV:Envelope> ************************************************************************
and the python result literally is:
<SOAPpy.Types.structType Fault at -1213565780>: {'faultcode': 'ArgumentError', 'faultstring': 'Invalid PDB Code'}
So the soappy client is treating this as a valid return value, and not raising an exception like it should.
Any ideas?
Thanks, Charlie