/** * @param string $wsdlFile * @param string $originalClassName * @param array $methods * @return array */ public static function generateClassFromWsdl($wsdlFile, $originalClassName, array $methods = array()) { if (self::$soapLoaded === NULL) { self::$soapLoaded = extension_loaded('soap'); } if (self::$soapLoaded) { $client = new SOAPClient($wsdlFile); $_methods = array_unique($client->__getFunctions()); unset($client); $templateDir = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'Generator' . DIRECTORY_SEPARATOR; $methodTemplate = new Text_Template($templateDir . 'wsdl_method.tpl'); $methodsBuffer = ''; foreach ($_methods as $method) { $nameStart = strpos($method, ' ') + 1; $nameEnd = strpos($method, '('); $name = substr($method, $nameStart, $nameEnd - $nameStart); if (empty($methods) || in_array($name, $methods)) { $args = explode(',', substr($method, $nameEnd + 1, strpos($method, ')') - $nameEnd - 1)); $numArgs = count($args); for ($i = 0; $i < $numArgs; $i++) { $args[$i] = substr($args[$i], strpos($args[$i], '$')); } $methodTemplate->setVar(array('method_name' => $name, 'arguments' => join(', ', $args))); $methodsBuffer .= $methodTemplate->render(); } } $classTemplate = new Text_Template($templateDir . 'wsdl_class.tpl'); $classTemplate->setVar(array('class_name' => $originalClassName, 'wsdl' => $wsdlFile, 'methods' => $methodsBuffer)); return $classTemplate->render(); } else { throw new PHPUnit_Framework_Exception('The SOAP extension is required to generate a mock object ' . 'from WSDL.'); } }