示例#1
0
 /**
  * Generate WSDL file based on requested services (uses cache)
  *
  * @param array $requestedServices
  * @param string $endPointUrl
  * @return string
  * @throws \Exception
  */
 public function generate($requestedServices, $endPointUrl)
 {
     /** Sort requested services by names to prevent caching of the same wsdl file more than once. */
     ksort($requestedServices);
     $cacheId = self::WSDL_CACHE_ID . hash('md5', serialize($requestedServices));
     $cachedWsdlContent = $this->_cache->load($cacheId);
     if ($cachedWsdlContent !== false) {
         return $cachedWsdlContent;
     }
     $services = array();
     foreach ($requestedServices as $serviceName) {
         $services[$serviceName] = $this->_apiConfig->getServiceMetadata($serviceName);
     }
     $wsdlContent = $this->_generate($services, $endPointUrl);
     $this->_cache->save($wsdlContent, $cacheId, array(\Magento\Webapi\Model\Cache\Type::CACHE_TAG));
     return $wsdlContent;
 }
示例#2
0
 /**
  * Retrieve requested service method params metadata.
  *
  * @param string $serviceClassName
  * @param string $serviceMethodName
  * @return array
  */
 protected function getMethodParams($serviceClassName, $serviceMethodName)
 {
     $cacheId = self::CACHE_ID_PREFIX . hash('md5', $serviceClassName . $serviceMethodName);
     $params = $this->cache->load($cacheId);
     if ($params !== false) {
         return unserialize($params);
     }
     $serviceClass = new ClassReflection($serviceClassName);
     /** @var MethodReflection $serviceMethod */
     $serviceMethod = $serviceClass->getMethod($serviceMethodName);
     $params = [];
     /** @var ParameterReflection $paramReflection */
     foreach ($serviceMethod->getParameters() as $paramReflection) {
         $isDefaultValueAvailable = $paramReflection->isDefaultValueAvailable();
         $params[] = ['name' => $paramReflection->getName(), 'type' => $this->typeProcessor->getParamType($paramReflection), 'isDefaultValueAvailable' => $isDefaultValueAvailable, 'defaultValue' => $isDefaultValueAvailable ? $paramReflection->getDefaultValue() : null];
     }
     $this->cache->save(serialize($params), $cacheId, [\Magento\Webapi\Model\Cache\Type::CACHE_TAG]);
     return $params;
 }