/**
  * Invoke method call
  *
  * @param   string method name
  * @param   var vars
  * @return  var answer
  * @throws  lang.IllegalArgumentException
  * @throws  webservices.soap.SOAPFaultException
  */
 public function invoke()
 {
     if (!$this->transport instanceof SOAPHTTPTransport) {
         throw new IllegalArgumentException('Transport must be a webservices.soap.transport.SOAPHTTPTransport');
     }
     $args = func_get_args();
     $message = new XPSoapMessage();
     $message->setEncoding($this->encoding);
     $message->createCall($this->action, array_shift($args), $this->targetNamespace, $this->headers);
     $message->setMapping($this->mapping);
     $message->setData($args);
     // Send
     if (FALSE == ($response = $this->transport->send($message))) {
         return FALSE;
     }
     // Response
     if (FALSE == ($answer = $this->transport->retrieve($response))) {
         return FALSE;
     }
     $answer->setMapping($this->mapping);
     $data = $answer->getData();
     if (sizeof($data) == 1) {
         return current($data);
     }
     if (sizeof($data) == 0) {
         return NULL;
     }
     return $data;
 }