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); } }
/** * 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'"); } }
/** * 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; } }
/** * {@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); } }
/** * 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); }
/** * 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; }
/** * 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); } } }
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')); } }
/** * 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); } }