docs: def do_POST(self):
          '''The POST command.  This is called by HTTPServer, not twisted.
          action -- SOAPAction(HTTP header) or wsa:Action(SOAP:Header)
          '''
          global _contexts
  
          soapAction = self.headers.getheader('SOAPAction')
          post = self.path
          if not post:
              raise PostNotSpecified, 'HTTP POST not specified in request'
          if soapAction:
              soapAction = soapAction.strip('\'"')
          post = post.strip('\'"')
          try:
              ct = self.headers['content-type']
              if ct.startswith('multipart/'):
                  cid = resolvers.MIMEResolver(ct, self.rfile)
                  xml = cid.GetSOAPPart()
                  ps = ParsedSoap(xml, resolver=cid.Resolve, readerclass=DomletteReader)
              else:
                  length = int(self.headers['content-length'])
                  ps = ParsedSoap(self.rfile.read(length), readerclass=DomletteReader)
          except ParseException, e:
              self.send_fault(FaultFromZSIException(e))
          except Exception, e:
              # Faulted while processing; assume it's in the header.
              self.send_fault(FaultFromException(e, 1, sys.exc_info()[2]))
          else:
              # Keep track of calls
              thread_id = thread.get_ident()
              _contexts[thread_id] = SOAPContext(self.server, xml, ps,
                                                 self.connection,
                                                 self.headers, soapAction)
  
              try:
                  _Dispatch(ps, self.server, self.send_xml, self.send_fault,
                      post=post, action=soapAction)
              except Exception, e:
                  self.send_fault(FaultFromException(e, 0, sys.exc_info()[2]))
  
              # Clean up after the call
              if _contexts.has_key(thread_id):
                  del _contexts[thread_id]