/**
  * Action returns array of the parameters the action method expects
  * @return array<KalturaParamInfo>
  */
 public function getActionParams()
 {
     if (is_null($this->_actionParams)) {
         // reflect the service
         $reflectionClass = new ReflectionClass($this->_actionClass);
         $reflectionMethod = $reflectionClass->getMethod($this->_actionMethodName);
         $docComment = $reflectionMethod->getDocComment();
         $reflectionParams = $reflectionMethod->getParameters();
         $this->_actionParams = array();
         foreach ($reflectionParams as $reflectionParam) {
             $name = $reflectionParam->getName();
             if (in_array($name, $this->_reservedKeys)) {
                 throw new Exception("Param [{$name}] in action [{$this->_actionMethodName}] is a reserved key");
             }
             $parsedDocComment = new KalturaDocCommentParser($docComment, array(KalturaDocCommentParser::DOCCOMMENT_REPLACENET_PARAM_NAME => $name));
             $paramClass = $reflectionParam->getClass();
             // type hinting for objects
             if ($paramClass) {
                 $type = $paramClass->getName();
             } else {
                 $result = null;
                 if ($parsedDocComment->param) {
                     $type = $parsedDocComment->param;
                 } else {
                     throw new Exception("Type not found in doc comment for param [" . $name . "] in action [" . $this->_actionMethodName . "] in service [" . $this->_serviceId . "]");
                 }
             }
             $paramInfo = new KalturaParamInfo($type, $name);
             $paramInfo->setDescription($parsedDocComment->paramDescription);
             if ($reflectionParam->isOptional()) {
                 $paramInfo->setDefaultValue($reflectionParam->getDefaultValue());
                 $paramInfo->setOptional(true);
             } else {
                 if ($reflectionParam->getClass() && $reflectionParam->allowsNull()) {
                     $paramInfo->setOptional(true);
                 }
             }
             if (array_key_exists($name, $parsedDocComment->validateConstraints)) {
                 $paramInfo->setConstraints($parsedDocComment->validateConstraints[$name]);
             }
             if (in_array($name, $parsedDocComment->disableRelativeTimeParams, true)) {
                 $paramInfo->setDisableRelativeTime(true);
             }
             $this->_actionParams[$name] = $paramInfo;
         }
     }
     return $this->_actionParams;
 }
 public function getActionParams($actionName)
 {
     if (!$this->isActionExists($actionName)) {
         throw new Exception("Action [{$actionName}] does not exists for service [{$this->_serviceId}]");
     }
     $actionId = strtolower($actionName);
     $methodName = $this->_actions[$actionId];
     // reflect the service
     $reflectionClass = new ReflectionClass($this->_serviceClass);
     $reflectionMethod = $reflectionClass->getMethod($methodName);
     $docComment = $reflectionMethod->getDocComment();
     $reflectionParams = $reflectionMethod->getParameters();
     $actionParams = array();
     foreach ($reflectionParams as $reflectionParam) {
         $name = $reflectionParam->getName();
         if (in_array($name, $this->_reservedKeys)) {
             throw new Exception("Param [{$name}] in action [{$actionName}] is a reserved key");
         }
         $parsedDocComment = new KalturaDocCommentParser($docComment, array(KalturaDocCommentParser::DOCCOMMENT_REPLACENET_PARAM_NAME => $name));
         $paramClass = $reflectionParam->getClass();
         // type hinting for objects
         if ($paramClass) {
             $type = $paramClass->getName();
         } else {
             $result = null;
             if ($parsedDocComment->param) {
                 $type = $parsedDocComment->param;
             } else {
                 throw new Exception("Type not found in doc comment for param [" . $name . "] in action [" . $actionName . "] in service [" . $this->_serviceId . "]");
             }
         }
         $paramInfo = new KalturaParamInfo($type, $name);
         $paramInfo->setDescription($parsedDocComment->paramDescription);
         if ($reflectionParam->isOptional()) {
             $paramInfo->setDefaultValue($reflectionParam->getDefaultValue());
             $paramInfo->setOptional(true);
         } else {
             if ($reflectionParam->getClass() && $reflectionParam->allowsNull()) {
                 $paramInfo->setOptional(true);
             }
         }
         $actionParams[] = $paramInfo;
     }
     return $actionParams;
 }