Ejemplo n.º 1
0
 /**
  * Return services loaded from cache if enabled or from files merged previously
  *
  * @return array
  */
 public function getServices()
 {
     if (null === $this->services) {
         $services = $this->cache->load(self::CACHE_ID);
         if ($services && is_string($services)) {
             $this->services = unserialize($services);
         } else {
             $this->services = $this->configReader->read();
             $this->cache->save(serialize($this->services), self::CACHE_ID);
         }
     }
     return $this->services;
 }
Ejemplo n.º 2
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);
     $currentStore = $this->storeManager->getStore();
     $cacheId = self::WSDL_CACHE_ID . hash('md5', serialize($requestedServices) . $currentStore->getCode());
     $cachedWsdlContent = $this->_cache->load($cacheId);
     if ($cachedWsdlContent !== false) {
         return $cachedWsdlContent;
     }
     $services = [];
     foreach ($requestedServices as $serviceName) {
         $services[$serviceName] = $this->_apiConfig->getServiceMetadata($serviceName);
     }
     $wsdlContent = $this->_generate($services, $endPointUrl);
     $this->_cache->save($wsdlContent, $cacheId, [\Magento\Framework\App\Cache\Type\Webapi::CACHE_TAG]);
     return $wsdlContent;
 }
Ejemplo n.º 3
0
 protected function setUp()
 {
     $this->_soapConfigMock = $this->getMockBuilder('Magento\\Webapi\\Model\\Soap\\Config')->disableOriginalConstructor()->getMock();
     $_wsdlMock = $this->getMockBuilder('Magento\\Webapi\\Model\\Soap\\Wsdl')->disableOriginalConstructor()->setMethods(['addSchemaTypeSection', 'addService', 'addPortType', 'addBinding', 'addSoapBinding', 'addElement', 'addComplexType', 'addMessage', 'addPortOperation', 'addBindingOperation', 'addSoapOperation', 'toXML'])->getMock();
     $this->_wsdlFactoryMock = $this->getMockBuilder('Magento\\Webapi\\Model\\Soap\\WsdlFactory')->setMethods(['create'])->disableOriginalConstructor()->getMock();
     $this->_wsdlFactoryMock->expects($this->any())->method('create')->will($this->returnValue($_wsdlMock));
     $this->_cacheMock = $this->getMockBuilder('Magento\\Framework\\App\\Cache\\Type\\Webapi')->disableOriginalConstructor()->getMock();
     $this->_cacheMock->expects($this->any())->method('load')->will($this->returnValue(false));
     $this->_cacheMock->expects($this->any())->method('save')->will($this->returnValue(true));
     $this->_typeProcessor = $this->getMock('Magento\\Framework\\Reflection\\TypeProcessor', [], [], '', false);
     $this->storeManagerMock = $this->getMockBuilder('Magento\\Store\\Model\\StoreManagerInterface')->setMethods(['getStore'])->disableOriginalConstructor()->getMockForAbstractClass();
     $storeMock = $this->getMockBuilder('Magento\\Store\\Model\\Store')->setMethods(['getCode', '__wakeup'])->disableOriginalConstructor()->getMock();
     $this->storeManagerMock->expects($this->any())->method('getStore')->will($this->returnValue($storeMock));
     $storeMock->expects($this->any())->method('getCode')->will($this->returnValue('store_code'));
     $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
     $this->customAttributeTypeLocator = $objectManager->getObject('Magento\\Eav\\Model\\EavCustomAttributeTypeLocator');
     $this->_wsdlGenerator = $objectManager->getObject('Magento\\Webapi\\Model\\Soap\\Wsdl\\Generator', ['apiConfig' => $this->_soapConfigMock, 'wsdlFactory' => $this->_wsdlFactoryMock, 'cache' => $this->_cacheMock, 'typeProcessor' => $this->_typeProcessor, 'storeManagerMock' => $this->storeManagerMock, 'customAttributeTypeLocator' => $this->customAttributeTypeLocator]);
     parent::setUp();
 }
 /**
  * Generate schema based on requested services (uses cache)
  *
  * @param array $requestedServices
  * @param string $requestScheme
  * @param string $requestHost
  * @param string $endPointUrl
  * @return string
  */
 public function generate($requestedServices, $requestScheme, $requestHost, $endPointUrl)
 {
     /** Sort requested services by names to prevent caching of the same schema file more than once. */
     ksort($requestedServices);
     $currentStore = $this->storeManager->getStore();
     $cacheId = get_class($this) . hash('md5', serialize($requestedServices) . $currentStore->getCode());
     $cachedSchemaContent = $this->cache->load($cacheId);
     if ($cachedSchemaContent !== false) {
         return $cachedSchemaContent;
     }
     $requestedServiceMetadata = [];
     foreach ($requestedServices as $serviceName) {
         $requestedServiceMetadata[$serviceName] = $this->getServiceMetadata($serviceName);
     }
     $this->collectCallInfo($requestedServiceMetadata);
     $schemaContent = $this->generateSchema($requestedServiceMetadata, $requestScheme, $requestHost, $endPointUrl);
     $this->cache->save($schemaContent, $cacheId, [Webapi::CACHE_TAG]);
     return $schemaContent;
 }
Ejemplo n.º 5
0
 protected function setUp()
 {
     $this->serviceMetadataMock = $this->getMockBuilder('Magento\\Webapi\\Model\\ServiceMetadata')->disableOriginalConstructor()->getMock();
     $this->objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this);
     $swagger = $this->objectManager->getObject('Magento\\Webapi\\Model\\Rest\\Swagger');
     $this->swaggerFactoryMock = $this->getMockBuilder('Magento\\Webapi\\Model\\Rest\\SwaggerFactory')->setMethods(['create'])->disableOriginalConstructor()->getMock();
     $this->swaggerFactoryMock->expects($this->any())->method('create')->will($this->returnValue($swagger));
     $this->cacheMock = $this->getMockBuilder('Magento\\Framework\\App\\Cache\\Type\\Webapi')->disableOriginalConstructor()->getMock();
     $this->cacheMock->expects($this->any())->method('load')->will($this->returnValue(false));
     $this->cacheMock->expects($this->any())->method('save')->will($this->returnValue(true));
     $this->typeProcessorMock = $this->getMockBuilder('Magento\\Framework\\Reflection\\TypeProcessor')->disableOriginalConstructor()->getMock();
     $this->typeProcessorMock->expects($this->any())->method('getOperationName')->will($this->returnValue(self::OPERATION_NAME));
     $this->customAttributeTypeLocatorMock = $this->getMockBuilder('Magento\\Framework\\Webapi\\CustomAttributeTypeLocatorInterface')->disableOriginalConstructor()->getMock();
     $this->customAttributeTypeLocatorMock->expects($this->any())->method('getAllServiceDataInterfaces')->willReturn(['$customAttributeClass']);
     $this->storeManagerMock = $this->getMockBuilder('Magento\\Store\\Model\\StoreManagerInterface')->setMethods(['getStore'])->disableOriginalConstructor()->getMockForAbstractClass();
     $storeMock = $this->getMockBuilder('Magento\\Store\\Model\\Store')->disableOriginalConstructor()->getMock();
     $this->storeManagerMock->expects($this->any())->method('getStore')->will($this->returnValue($storeMock));
     $storeMock->expects($this->any())->method('getCode')->will($this->returnValue('store_code'));
     $this->generator = $this->objectManager->getObject('Magento\\Webapi\\Model\\Rest\\Swagger\\Generator', ['swaggerFactory' => $this->swaggerFactoryMock, 'cache' => $this->cacheMock, 'typeProcessor' => $this->typeProcessorMock, 'storeManager' => $this->storeManagerMock, 'serviceMetadata' => $this->serviceMetadataMock, 'customAttributeTypeLocator' => $this->customAttributeTypeLocatorMock]);
 }
Ejemplo n.º 6
0
 /**
  * Return services loaded from cache if enabled or from files merged previously
  *
  * @return array
  */
 protected function getSoapServicesConfig()
 {
     if (null === $this->soapServices) {
         $soapServicesConfig = $this->cache->load(self::CACHE_ID);
         if ($soapServicesConfig && is_string($soapServicesConfig)) {
             $this->soapServices = unserialize($soapServicesConfig);
         } else {
             $this->soapServices = $this->initServicesMetadata();
             $this->cache->save(serialize($this->soapServices), self::CACHE_ID);
         }
     }
     return $this->soapServices;
 }
Ejemplo n.º 7
0
 /**
  * Return routes loaded from cache if enabled or from files merged previously
  *
  * @return array
  */
 public function getRoutesConfig()
 {
     if (null === $this->routes) {
         $routesConfig = $this->cache->load(self::ROUTES_CONFIG_CACHE_ID);
         $typesData = $this->cache->load(self::REFLECTED_TYPES_CACHE_ID);
         if ($routesConfig && is_string($routesConfig) && $typesData && is_string($typesData)) {
             $this->routes = unserialize($routesConfig);
             $this->typeProcessor->setTypesData(unserialize($typesData));
         } else {
             $this->routes = $this->initRoutesMetadata();
             $this->cache->save(serialize($this->routes), self::ROUTES_CONFIG_CACHE_ID);
             $this->cache->save(serialize($this->typeProcessor->getTypesData()), self::REFLECTED_TYPES_CACHE_ID);
         }
     }
     return $this->routes;
 }
Ejemplo n.º 8
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, [WebapiCache::CACHE_TAG]);
     return $params;
 }