Daniel Rubin
dlrubin at yahoo.com
Thu Jul 3 11:41:10 EST 2003
Here's the xmlrpc.py code. My client code is calling the "evaluate" function via a call like this: server = xmlrpclib.ServerProxy(myURI) server.evaluate(data) If I put the "return data" statement right before the "model=Model()" statement, then things work fine. If I put the return statement after it, then I get the stack dump I showed you earlier. The code never jupmps to the except: clause, and no errors are being written to the apache logs (and my conf file is set to record everything with no virtual hosts). from mod_python import apache import xmlrpclib def evaluate(data): import MyTools import Model try: model = Model() <--an error happens here return data except: open("/tmp/test_xmlrpc01", 'w').write("RUNNING ON %s" % findings) import traceback traceback.print_exc(file=open("/tmp/test_xmlrpc03", 'w')) raise def handler(req): import sys module = sys.modules[__name__] # Load the method and arguments from the client. content = req.read() # xmlrpclib fails if there are characters with ASCII code >= 128. # Thus, change anything greater than that to a space. table = ''.join(map(chr, range(128))) + " "*128 content = content.translate(table) args, method_name = xmlrpclib.loads(content) # Call the method. if hasattr(module, method_name): try: retval = getattr(module, method_name)(*args) except Exception, x: retval = xmlrpclib.Fault( 0, "Exception (%s) raised: %s" % (Exception.__name__, str(x))) except x: retval = xmlrpclib.Fault( 0, "General exception raised: %s" % str(x)) else: retval = xmlrpclib.Fault( 0, "This server does not provide: '%s'" % method_name) # Marshal the return value and write the results back to the # client. req.content_type = "text/xml" marshalled = xmlrpclib.dumps((retval,), methodresponse=1) req.write(marshalled) return apache.OK --- "Gregory (Grisha) Trubetskoy" <grisha at modpython.org> wrote: > > > On Thu, 3 Jul 2003, Daniel Rubin wrote: > > > An error is happening in the xmlrpc.py program, > and this isn't making > > it's own stack dump or errors written to the > apache logs on the server. > > So I can't debug what the nature of the error that > is happening in the > > remotely called function. > > So, tell me if I understand this correctly (I'm not > familiar with > xmlrpc.py) - > > Xmlrpc.py is a CGI script which reports its errors > by writing them to > stderr. Something happens when you run it under > mod_python, and you don't > know what it is because stderr goes nowhere. > > As far as I know, stderr output may end up in your > error log, but I don't > think that's guaranteed and may be dependent on how > your httpd was > compiled. I think there is really no solution to > this other than to tweak > xmlrpc into raising its exception or using > mod_python's log_error to > report it. > > HTH, > > Grisha __________________________________ Do you Yahoo!? SBC Yahoo! DSL - Now only $29.95 per month! http://sbc.yahoo.com
|