/** * Reformat request data to be compatible with method specified interface: <br/> * - sort arguments in correct order <br/> * - set default values for omitted arguments * - instantiate objects of necessary classes * * @param string|object $classOrObject Resource class name * @param string $methodName Resource method name * @param array $requestData Data to be passed to method * @param Mage_Webapi_Model_ConfigAbstract $apiConfig * @return array Array of prepared method arguments * @throws Mage_Webapi_Exception */ public function prepareMethodParams($classOrObject, $methodName, $requestData, Mage_Webapi_Model_ConfigAbstract $apiConfig) { $methodReflection = self::createMethodReflection($classOrObject, $methodName); $methodData = $apiConfig->getMethodMetadata($methodReflection); $methodArguments = array(); if (isset($methodData['interface']['in']['parameters']) && is_array($methodData['interface']['in']['parameters'])) { foreach ($methodData['interface']['in']['parameters'] as $paramName => $paramData) { if (isset($requestData[$paramName])) { $methodArguments[$paramName] = $this->_formatParamData($requestData[$paramName], $paramData['type'], $apiConfig); } elseif (!$paramData['required']) { $methodArguments[$paramName] = $paramData['default']; } else { throw new Mage_Webapi_Exception($this->__('Required parameter "%s" is missing.', $paramName), Mage_Webapi_Exception::HTTP_BAD_REQUEST); } } } return $methodArguments; }