/** * __construct() test */ public function testConstructorOptionallySetsMethodAndParams() { $r = new Request(); $this->assertEquals('', $r->getMethod()); $this->assertEquals(array(), $r->getParams()); $method = 'foo.bar'; $params = array('baz', 1, array('foo' => 'bar')); $r = new Request($method, $params); $this->assertEquals($method, $r->getMethod()); $this->assertEquals($params, $r->getParams()); }
/** * loadXml() test */ public function testLoadXml() { $dom = new \DOMDocument('1.0', 'UTF-8'); $mCall = $dom->appendChild($dom->createElement('methodCall')); $mName = $mCall->appendChild($dom->createElement('methodName', 'do.Something')); $params = $mCall->appendChild($dom->createElement('params')); $param1 = $params->appendChild($dom->createElement('param')); $value1 = $param1->appendChild($dom->createElement('value')); $value1->appendChild($dom->createElement('string', 'string1')); $param2 = $params->appendChild($dom->createElement('param')); $value2 = $param2->appendChild($dom->createElement('value')); $value2->appendChild($dom->createElement('boolean', 1)); $xml = $dom->saveXml(); $parsed = $this->_request->loadXml($xml); $this->assertTrue($parsed, $xml); $this->assertEquals('do.Something', $this->_request->getMethod()); $test = array('string1', true); $params = $this->_request->getParams(); $this->assertSame($test, $params); $parsed = $this->_request->loadXml('foo'); $this->assertFalse($parsed, 'Parsed non-XML string?'); }
/** * Handle an xmlrpc call (actual work) * * @param Request $request * @return Response * @throws Server\Exception\RuntimeException * Zend\XmlRpc\Server\Exceptions are thrown for internal errors; otherwise, * any other exception may be thrown by the callback */ protected function handleRequest(Request $request) { $method = $request->getMethod(); // Check for valid method if (!$this->table->hasMethod($method)) { throw new Server\Exception\RuntimeException('Method "' . $method . '" does not exist', 620); } $info = $this->table->getMethod($method); $params = $request->getParams(); $argv = $info->getInvokeArguments(); if (0 < count($argv) and $this->sendArgumentsToAllMethods()) { $params = array_merge($params, $argv); } // Check calling parameters against signatures $matched = false; $sigCalled = $request->getTypes(); $sigLength = count($sigCalled); $paramsLen = count($params); if ($sigLength < $paramsLen) { for ($i = $sigLength; $i < $paramsLen; ++$i) { $xmlRpcValue = AbstractValue::getXmlRpcValue($params[$i]); $sigCalled[] = $xmlRpcValue->getType(); } } $signatures = $info->getPrototypes(); foreach ($signatures as $signature) { $sigParams = $signature->getParameters(); if ($sigCalled === $sigParams) { $matched = true; break; } } if (!$matched) { throw new Server\Exception\RuntimeException('Calling parameters do not match signature', 623); } $return = $this->_dispatch($info, $params); $responseClass = $this->getResponseClass(); return new $responseClass($return); }