'Handles the HTTP POST request.
Attempts to interpret all HTTP POST requests as XML-RPC calls,
which are forwarded to the server\'s _dispatch method for handling.
Most code taken from SimpleXMLRPCServer with modifications for wsgi and my custom dispatcher.'

def handle_POST(self, environ, start_response):

    try:
        length = int(environ['CONTENT_LENGTH'])
        data = environ['wsgi.input'].read(length)
        response = self.dispatcher._marshaled_dispatch(data, getattr(self.dispatcher, '_dispatch', None))
        response += '\n'
    except Exception as e:
        logger.exception(e)
        start_response('500    Server    error', [('Content-Type', 'text/plain')])
        return []
    else:
        start_response('200    OK', [('Content-Type', 'text/xml'), ('Content-Length', str(len(response)))])
        return [response]
