protected function prepareAdditionalParameters(OperationInterface $operation, CommandInterface $command, RequestInterface $request, Parameter $additional)
 {
     if (!($location = $additional->getLocation())) {
         return;
     }
     $visitor = $this->factory->getRequestVisitor($location);
     $hidden = $command[$command::HIDDEN_PARAMS];
     foreach ($command->toArray() as $key => $value) {
         if ($value !== null && !in_array($key, $hidden) && !$operation->hasParam($key)) {
             $additional->setName($key);
             $visitor->visit($command, $request, $additional, $value);
         }
     }
     return $visitor;
 }
 /**
  * Serialize additional parameters
  *
  * @param OperationInterface $operation  Operation that owns the command
  * @param CommandInterface   $command    Command to prepare
  * @param RequestInterface   $request    Request to serialize
  * @param Parameter          $additional Additional parameters
  *
  * @return null|RequestVisitorInterface
  */
 protected function prepareAdditionalParameters(OperationInterface $operation, CommandInterface $command, RequestInterface $request, Parameter $additional)
 {
     if (!($location = $additional->getLocation())) {
         return;
     }
     $visitor = $this->factory->getRequestVisitor($location);
     foreach ($command->getAll() as $key => $value) {
         // Ignore values that are null or built-in command options
         if ($value !== null && $key != 'command.headers' && $key != 'command.response_processing' && !$operation->hasParam($key)) {
             $additional->setName($key);
             $visitor->visit($command, $request, $additional, $value);
         }
     }
     return $visitor;
 }
 /**
  * Add a operation to the service description
  *
  * @param OperationInterface $operation Operation to add
  *
  * @return self
  */
 public function addOperation(OperationInterface $operation)
 {
     $this->operations[$operation->getName()] = $operation->setServiceDescription($this);
     return $this;
 }