/** * * * @param string $method * @param array $parameters * @param null $identifier * @return type */ public function encodeRequest($method, array $parameters, $identifier = null) { $dom = $this->buildDocument(); $callElement = $dom->createElement("methodCall"); $methodNameElement = $dom->createElement("methodName"); $methodNameElement->appendChild(new DOMText($method)); $paramsElement = $dom->createElement("params"); foreach ($parameters as $param) { $rpcParameter = $this->parameterFactory->fromValue($param); $importedParamNode = $dom->importNode($this->parameterSerializer->getDomElementFromParameter($rpcParameter), true); $paramElement = $dom->createElement("param"); $paramElement->appendChild($importedParamNode); $paramsElement->appendChild($paramElement); } $callElement->appendChild($methodNameElement); $callElement->appendChild($paramsElement); $dom->appendChild($callElement); return $dom->saveXML(); }
private function formatArray(XmlRpcParameter $parameter) { $typeElement = $this->domDocument->createElement($parameter->getType()); $dataElement = $this->domDocument->createElement("data"); foreach ($parameter->getValue() as $value) { $subParameter = $this->parameterFactory->fromValue($value); $valueElement = $this->domDocument->createElement("value"); $valueElement->appendChild($this->getDomElementFromParameter($subParameter)); $dataElement->appendChild($valueElement); } $typeElement->appendChild($dataElement); return $typeElement; }
/** * * @param DOMElement $element * @return \Mdjward\RpcApi\RequestEncoder\XmlRpc\XmlRpcParameter */ public function getXmlRpcParameterFromDomElement(DOMElement $element) { return $this->parameterFactory->fromValue($this->getValueFromDomElement($element)); }
/** * @test */ public function testGetDomElementFromParameterHandlesStruct() { $domDocument = new DOMDocument(); $arrayValues = array("one" => 1, "two" => 2.0, "three" => "three", "four" => false, "five" => 5.123466, "SIX" => true); $structParameter = new XmlRpcParameter($arrayValues, XmlRpcParameter::TYPE_STRUCT); $parameterFactoryReal = new XmlRpcParameterFactory(); $parameterFactoryMock = $this->buildXmlRpcParameterFactoryMock(); $parameterFactoryMock->expects($this->exactly(count($arrayValues)))->method("fromValue")->will($this->returnCallback(function ($value) use($parameterFactoryReal) { return $parameterFactoryReal->fromValue($value); })); $serializer = new XmlRpcParameterSerializer($parameterFactoryMock, $domDocument); $structElement = $serializer->getDomElementFromParameter($structParameter); $comparitiveDomDocument = new DOMDocument(); $comparitiveDomDocument->loadXML("<struct>" . "<member><name>one</name><value><int>1</int></value></member>" . "<member><name>two</name><value><int>2</int></value></member>" . "<member><name>three</name><value><string>three</string></value></member>" . "<member><name>four</name><value><boolean>false</boolean></value></member>" . "<member><name>five</name><value><double>5.123466</double></value></member>" . "<member><name>SIX</name><value><boolean>true</boolean></value></member>" . "</struct>"); $this->assertEqualXMLStructure($comparitiveDomDocument->documentElement, $structElement); }