Here is the solution.  Incidentally, the client is Cold Fusion.

import re
import logging
import logging.config
import os
import SimpleXMLRPCServer

logging.config.fileConfig("logging.ini")

########################################################################
class
LoggingXMLRPCRequestHandler(SimpleXMLRPCServer.CGIXMLRPCRequestHandler):
    def __dereference(self, request_text):
        entityRe = re.compile("((?P<er>&#x)(?P<code>..)(?P<semi>;))")
        for m in re.finditer(entityRe, request_text):
            hexref = int(m.group(3),16)
            charref = chr(hexref)
            request_text = request_text.replace(m.group(1), charref)

        return request_text


#-------------------------------------------------------------------
    def handle_xmlrpc(self, request_text):
        logger = logging.getLogger()
        #logger.debug("************************************")
        #logger.debug(request_text)
        try:
            #logger.debug("-------------------------------------")
            request_text = self.__dereference(request_text)
            #logger.debug(request_text)
            request_text = request_text.decode("latin-1").encode('utf-8')
            #logger.debug("************************************")
        except Exception, e:
            logger.error(request_text)
            logger.error("had a problem dereferencing")
            logger.error(e)

        SimpleXMLRPCServer.CGIXMLRPCRequestHandler.handle_xmlrpc(self,
request_text)
########################################################################
class Foo:
    def settings(self):
        return os.environ
    def echo(self, something):
        logger = logging.getLogger()
        logger.debug(something)
        return something
    def greeting(self, name):
        return "hello, " + name

# these are used to run as a CGI
handler = LoggingXMLRPCRequestHandler()
handler.register_instance(Foo())
handler.handle_request()

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to