This is the patch required for ZSI to return error codes properly, You can track the version I submitted here: https://sourceforge.net/tracker/?func=detail&atid=387667&aid=1697819&group_id=26590 David Fraser 2007-05-03 --- ZSI/dispatch.py 2007-01-26 22:01:10.000000000 +0200 +++ ZSI/dispatch.py 2007-04-10 18:36:43.220125000 +0200 @@ -73,8 +73,7 @@ try: arg = tc.parse(ps.body_root, ps) except EvaluateException, ex: - SendFault(FaultFromZSIException(ex), **kw) - return + return SendFault(FaultFromZSIException(ex), **kw) try: result = handler(arg) @@ -97,8 +96,7 @@ try: kwargs[str(e.localName)] = tc.parse(e, ps) except EvaluateException, ex: - SendFault(FaultFromZSIException(ex), **kw) - return + return SendFault(FaultFromZSIException(ex), **kw) result = handler(**kwargs) aslist = False @@ -125,15 +123,13 @@ try: arg = [ tc.parse(e, ps) for e in data ] except EvaluateException, e: #SendFault(FaultFromZSIException(e), **kw) - SendFault(RuntimeError("THIS IS AN ARRAY: %s" %isarray)) - return + return SendFault(RuntimeError("THIS IS AN ARRAY: %s" %isarray)) result = handler(*arg) else: try: kwarg = dict([ (str(e.localName),tc.parse(e, ps)) for e in data ]) except EvaluateException, e: - SendFault(FaultFromZSIException(e), **kw) - return + return SendFault(FaultFromZSIException(e), **kw) result = handler(**kwarg)