/** * Create RPC response object from HTTP response object. * * @param Request $request * @param RpcRequest $rpcRequest * @param mixed $result * * @throws RpcException * * @return RpcResponse|RpcXResponse */ public function createFrom(Request $request, RpcRequest $rpcRequest = null, $result) { $requestType = $request->headers->get('Content-Type'); $responseType = $request->headers->get('Accept'); if (!$this->validate($requestType) or !$this->validate($responseType)) { throw new RpcException('Invalid protocol or encoding'); } list($protocol, $encoding) = $this->getContentType($requestType); $rpcResponse = $this->create($protocol); if ($rpcRequest !== null) { $rpcResponse->setVersion($rpcRequest->getVersion()); $rpcResponse->setId($rpcRequest->getId()); } if ($result instanceof \Exception) { $error = new Error(); $error->setCode($result->getCode()); $error->setMessage($result->getMessage()); $error->setData($result->getTraceAsString()); $rpcResponse->setError($error); return $rpcResponse; } $rpcResponse->setResult($result); return $rpcResponse; }