Example #1
0
 /**
  * __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());
 }
Example #2
0
 /**
  * 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?');
 }
Example #3
0
 /**
  * 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);
 }