docs: def fromWSDL(self, wsdl):
          '''setup the service description from WSDL,
          should not need to override.
          '''
          assert isinstance(wsdl, WSDLTools.WSDL), 'expecting WSDL instance'
  
          if len(wsdl.services) == 0:
              raise WsdlGeneratorError, 'No service defined'
              
          self.reset() 
          self.wsdl = wsdl
          self.setUpHeader()
          self.setUpImports()
                  
          for service in wsdl.services:
              sd = self._service_class(service.name)
              self._services[service.name] = sd
  
              for port in service.ports:
                  desc = BindingDescription(wsdl=wsdl)
                  try:
                      desc.setUp(port.getBinding())
                  except Wsdl2PythonError, ex:
                      continue
                  
                  for soc in desc.operations:
                      if not soc.hasInput(): continue
                      
                      self.messages.append(MessageWriter())
                      self.messages[-1].setUp(soc, port, input=True)
                      if soc.hasOutput():
                          self.messages.append(MessageWriter())
                          self.messages[-1].setUp(soc, port, input=False)
                  
                  for e in port.extensions:
                      if isinstance(e, WSDLTools.SoapAddressBinding):
                          sd.location = e.location
  
                  self.setUpMethods(port)
  
              self.setUpClassDef(service)
              self.setUpInitDef(service)