/** * Retrieve a RPC message. * * @param scriptlet.HttpScriptletResponse response * @return scriptlet.rpc.AbstractRpcMessage */ public function retrieve($response) { $this->cat && $this->cat->debug('<<<', $response->toString()); $code = $response->getStatusCode(); switch ($code) { case HttpConstants::STATUS_OK: case HttpConstants::STATUS_INTERNAL_SERVER_ERROR: $xml = ''; while ($buf = $response->readData()) { $xml .= $buf; } $this->cat && $this->cat->debug('<<<', $xml); $answer = JsonResponseMessage::fromString($xml); if ($answer) { // Check encoding if (null !== ($content_type = $response->getHeader('Content-Type'))) { @(list($type, $charset) = explode('; charset=', $content_type)); if (!empty($charset)) { $answer->setEncoding($charset); } } } // Fault? if (null !== ($fault = $answer->getFault())) { throw new RpcFaultException($fault); } return $answer; case HttpConstants::STATUS_AUTHORIZATION_REQUIRED: throw new IllegalAccessException('Authorization required: ' . $response->getHeader('WWW-Authenticate')); default: throw new IllegalStateException('Unexpected return code: ' . $response->getStatusCode()); } }
public function multipleParameters() { $this->router->setMockData('{ "method" : "DummyRpcImplementation.checkMultipleParameters", "params" : [ "Lalala", 1, [ 12, "Egypt", false, -31 ], { "lowerBound" : 18, "upperBound" : 139 } ], "id" : 12 }'); $this->router->init(); $response = $this->router->process(); $this->assertHasHeader($response->headers, 'Content-type: application/json; charset=utf-8'); $this->assertEquals(200, $response->statusCode); $msg = \webservices\json\rpc\JsonResponseMessage::fromString($response->getContent()); $data = $msg->getData(); $this->assertEquals('Lalala', (string) $data[0]); $this->assertEquals(1, $data[1]); $this->assertEquals(array(12, 'Egypt', false, -31), $data[2]); $this->assertEquals(array('lowerBound' => 18, 'upperBound' => 139), $data[3]); }