예제 #1
0
 protected function addXml(\XMLWriter $xmlWriter, Parameter $param, $value)
 {
     if ($value === null) {
         return;
     }
     $value = $param->filter($value);
     $type = $param->getType();
     $name = $param->getWireName();
     $prefix = null;
     $namespace = $param->getData('xmlNamespace');
     if (false !== strpos($name, ':')) {
         list($prefix, $name) = explode(':', $name, 2);
     }
     if ($type == 'object' || $type == 'array') {
         if (!$param->getData('xmlFlattened')) {
             $xmlWriter->startElementNS(null, $name, $namespace);
         }
         if ($param->getType() == 'array') {
             $this->addXmlArray($xmlWriter, $param, $value);
         } elseif ($param->getType() == 'object') {
             $this->addXmlObject($xmlWriter, $param, $value);
         }
         if (!$param->getData('xmlFlattened')) {
             $xmlWriter->endElement();
         }
         return;
     }
     if ($param->getData('xmlAttribute')) {
         $this->writeAttribute($xmlWriter, $prefix, $name, $namespace, $value);
     } else {
         $this->writeElement($xmlWriter, $prefix, $name, $namespace, $value);
     }
 }
예제 #2
0
 /**
  * Validates the structure of a link (from the service description)
  *
  * @param \Guzzle\Service\Description\Parameter $structure
  *
  * @throws \Desk\Exception\UnexpectedValueException If it's invalid
  */
 public function validateLinkStructure(Parameter $structure)
 {
     if (!$structure->getData('operation')) {
         throw new UnexpectedValueException("Parameter with 'links' location requires 'operation'");
     }
     if (!$structure->getData('pattern')) {
         throw new UnexpectedValueException("Parameter with 'links' location requires 'pattern'");
     }
 }
예제 #3
0
 /**
  * Map nested parameters into the location_key based parameters
  *
  * @param array    $value  Value to map
  * @param Parameter $param  Parameter that holds information about the current key
  * @param array    $query  Built up query string values
  * @param string   $prefix String to prepend to sub query values
  */
 protected function customResolver($value, Parameter $param, array &$query, $prefix = '')
 {
     if ($param->getType() == 'object') {
         foreach ($value as $name => $v) {
             if ($subParam = $param->getProperty($name)) {
                 $key = $prefix . '.' . $subParam->getWireName();
                 if (is_array($v)) {
                     $this->customResolver($v, $subParam, $query, $key);
                 } else {
                     $query[$key] = $v;
                 }
             }
         }
     } elseif ($param->getType() == 'array') {
         $offset = $param->getData('offset') ?: 0;
         foreach ($value as $index => $v) {
             $index += $offset;
             if (is_array($v) && ($items = $param->getItems())) {
                 $this->customResolver($v, $items, $query, $prefix . '.' . $index);
             } else {
                 $query[$prefix . '.' . $index] = $v;
             }
         }
     } else {
         $query[$prefix] = $value;
     }
 }
예제 #4
0
 /**
  * {@inheritdoc}
  */
 public function visit(CommandInterface $command, RequestInterface $request, Parameter $param, $value)
 {
     $entityBody = EntityBody::factory($value);
     $request->setBody($entityBody);
     $this->addExpectHeader($request, $entityBody, $param->getData('expect_header'));
     // Add the Content-Encoding header if one is set on the EntityBody
     if ($encoding = $entityBody->getContentEncoding()) {
         $request->setHeader('Content-Encoding', $encoding);
     }
 }
예제 #5
0
 /**
  * Custom handling for arrays
  *
  * @param Parameter $param  Parameter for the object
  * @param array     $value  Value that is set for this parameter
  * @param string    $prefix Prefix for the resulting key
  * @param array     $query  Query string array passed by reference
  */
 protected function resolveArray(Parameter $param, array $value, $prefix, array &$query)
 {
     $offset = $param->getData('offset') ?: 1;
     foreach ($value as $index => $v) {
         $index += $offset;
         if (is_array($v) && ($items = $param->getItems())) {
             $this->customResolver($v, $items, $query, $prefix . '.' . $index);
         } else {
             $query[$prefix . '.' . $index] = $param->filter($v);
         }
     }
 }
 /**
  * {@inheritdoc}
  */
 public function visit(CommandInterface $command, RequestInterface $request, Parameter $param, $value)
 {
     $filteredValue = $param->filter($value);
     if (null !== $this->serializer && (is_object($filteredValue) || is_array($filteredValue))) {
         switch ($param->getSentAs()) {
             case 'json':
                 $request->setHeader('Content-Type', 'application/json');
                 $contentType = 'json';
                 break;
             case 'yml':
             case 'yaml':
                 $request->setHeader('Content-Type', 'application/yaml');
                 $contentType = 'yml';
                 break;
             default:
                 $request->setHeader('Content-Type', 'application/xml');
                 $contentType = 'xml';
                 break;
         }
         $context = SerializationContext::create();
         if (null !== ($groups = $param->getData('jms_serializer.groups'))) {
             $context->setGroups($groups);
         }
         if (null !== ($version = $param->getData('jms_serializer.version'))) {
             $context->setVersion($version);
         }
         if (null !== ($nulls = $param->getData('jms_serializer.serialize_nulls'))) {
             $context->setSerializeNull($nulls);
         }
         if (true === $param->getData('jms_serializer.max_depth_checks')) {
             $context->enableMaxDepthChecks();
         }
         $value = $this->serializer->serialize($filteredValue, $contentType, $context);
     }
     parent::visit($command, $request, $param, $value);
 }
예제 #7
0
 /**
  * Prepares and stores the value for a link
  *
  * Creates an link object (with "class" and "href") from the Guzzle
  * Parameter describing the link, and the value provided by the
  * user.
  *
  * @param \Guzzle\Service\Command\CommandInterface $command
  * @param \Guzzle\Service\Description\Parameter    $parameter
  * @param mixed                                   $value
  */
 public function addLinkValue(CommandInterface $command, Parameter $parameter, $value)
 {
     $values = array();
     if (isset($this->values[$command])) {
         $values = $this->values[$command];
     }
     $values[$parameter->getName()] = array('class' => $parameter->getData('class'), 'href' => preg_replace('/{value}/', $parameter->getValue($value), $parameter->getData('href')));
     $this->values[$command] = $values;
 }
예제 #8
0
 /**
  * Custom handling for arrays
  *
  * @param Parameter $param  Parameter for the object
  * @param array     $value  Value that is set for this parameter
  * @param string    $prefix Prefix for the resulting key
  * @param array     $query  Query string array passed by reference
  */
 protected function resolveArray(Parameter $param, array $value, $prefix, array &$query)
 {
     static $serializeEmpty = array('SetLoadBalancerPoliciesForBackendServer' => 1, 'SetLoadBalancerPoliciesOfListener' => 1, 'UpdateStack' => 1);
     // For BC, serialize empty lists for specific operations
     if (!$value) {
         if (isset($serializeEmpty[$this->fqname])) {
             $query[$prefix] = '';
         }
         return;
     }
     $offset = $param->getData('offset') ?: 1;
     foreach ($value as $index => $v) {
         $index += $offset;
         if (is_array($v) && ($items = $param->getItems())) {
             $this->customResolver($v, $items, $query, $prefix . '.' . $index);
         } else {
             $query[$prefix . '.' . $index] = $param->filter($v);
         }
     }
 }
예제 #9
0
 public function testCanRetrieveKnownPropertiesUsingDataMethod()
 {
     $p = new Parameter();
     $this->assertEquals(null, $p->getData('foo'));
     $p->setName('test');
     $this->assertEquals('test', $p->getData('name'));
 }
 /**
  * Recursively build the XML body
  *
  * @param \SimpleXMLElement $xml   XML to modify
  * @param Parameter         $param API Parameter
  * @param mixed             $value Value to add
  */
 protected function addXml(\SimpleXMLElement $xml, Parameter $param, $value)
 {
     if ($value === null) {
         return;
     }
     $value = $param->filter($value);
     $type = $param->getType();
     if ($type == 'object' || $type == 'array') {
         $ele = $param->getData('xmlFlattened') ? $xml : $xml->addChild($param->getWireName());
         if ($param->getType() == 'array') {
             $this->addXmlArray($ele, $param, $value, $param->getData('xmlNamespace'));
         } elseif ($param->getType() == 'object') {
             $this->addXmlObject($ele, $param, $value);
         }
     } elseif ($param->getData('xmlAttribute')) {
         $xml->addAttribute($param->getWireName(), $value, $param->getData('xmlNamespace'));
     } else {
         $xml->addChild($param->getWireName(), $value, $param->getData('xmlNamespace'));
     }
 }
예제 #11
0
 /**
  * Recursively build the XML body
  *
  * @param \SimpleXMLElement $xml   XML to modify
  * @param Parameter         $param API Parameter
  * @param mixed             $value Value to add
  */
 protected function addXml(\SimpleXMLElement $xml, Parameter $param, $value)
 {
     // Determine the name of the element
     $node = $param->getWireName();
     // Check if this property has a particular namespace
     $namespace = $param->getData('xmlNamespace');
     // Filter the value
     $value = $param->filter($value);
     if ($param->getType() == 'array') {
         $this->addXmlArray($xml, $param, $value, $namespace);
     } elseif ($param->getType() == 'object') {
         $this->addXmlObject($xml, $param, $value);
     } elseif ($param->getData('xmlAttribute')) {
         $xml->addAttribute($node, $value, $namespace);
     } else {
         $xml->addChild($node, $value, $namespace);
     }
 }