1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
/* |
4
|
|
|
* This file is part of Guzzle HTTP JSON-RPC |
5
|
|
|
* |
6
|
|
|
* Copyright (c) 2014 Nature Delivered Ltd. <http://graze.com> |
7
|
|
|
* |
8
|
|
|
* For the full copyright and license information, please view the LICENSE |
9
|
|
|
* file that was distributed with this source code. |
10
|
|
|
* |
11
|
|
|
* @see http://github.com/graze/guzzle-jsonrpc/blob/master/LICENSE |
12
|
|
|
* @link http://github.com/graze/guzzle-jsonrpc |
13
|
|
|
*/ |
14
|
|
|
|
15
|
|
|
namespace Graze\GuzzleHttp\JsonRpc\Exception; |
16
|
|
|
|
17
|
|
|
use Exception; |
18
|
|
|
use Graze\GuzzleHttp\JsonRpc\Message\RequestInterface; |
19
|
|
|
use Graze\GuzzleHttp\JsonRpc\Message\ResponseInterface; |
20
|
|
|
use GuzzleHttp\Exception\RequestException as HttpRequestException; |
21
|
|
|
use Psr\Http\Message\RequestInterface as HttpRequestInterface; |
22
|
|
|
use Psr\Http\Message\ResponseInterface as HttpResponseInterface; |
23
|
|
|
|
24
|
|
|
class RequestException extends HttpRequestException |
25
|
|
|
{ |
26
|
|
|
/** |
27
|
|
|
* {@inheritdoc} |
28
|
|
|
* |
29
|
|
|
* @param HttpRequestInterface $request Request |
30
|
|
|
* @param HttpResponseInterface|null $response Response received |
31
|
|
|
* @param \Exception|null $previous Previous exception |
32
|
|
|
* @param array|null $handlerContext Optional handler context. |
33
|
|
|
* |
34
|
|
|
* @return HttpRequestException |
35
|
|
|
*/ |
36
|
10 |
|
public static function create( |
37
|
|
|
HttpRequestInterface $request, |
38
|
|
|
HttpResponseInterface $response = null, |
39
|
|
|
Exception $previous = null, |
40
|
|
|
array $handlerContext = null |
41
|
|
|
) { |
42
|
10 |
|
if ($request instanceof RequestInterface && $response instanceof ResponseInterface) { |
43
|
10 |
|
static $clientErrorCodes = [-32600, -32601, -32602, -32700]; |
44
|
|
|
|
45
|
10 |
|
$errorCode = $response->getRpcErrorCode(); |
46
|
10 |
|
if (in_array($errorCode, $clientErrorCodes)) { |
47
|
5 |
|
$label = 'Client RPC error response'; |
48
|
5 |
|
$className = ClientException::class; |
49
|
5 |
|
} else { |
50
|
5 |
|
$label = 'Server RPC error response'; |
51
|
5 |
|
$className = ServerException::class; |
52
|
|
|
} |
53
|
|
|
|
54
|
10 |
|
$message = $label . ' [uri] ' . $request->getRequestTarget() |
55
|
10 |
|
. ' [method] ' . $request->getRpcMethod() |
56
|
10 |
|
. ' [error code] ' . $errorCode |
57
|
10 |
|
. ' [error message] ' . $response->getRpcErrorMessage(); |
58
|
|
|
|
59
|
10 |
|
return new $className($message, $request, $response, $previous); |
60
|
|
|
} |
61
|
|
|
|
62
|
|
|
return parent::create($request, $response, $previous); |
63
|
|
|
} |
64
|
|
|
} |
65
|
|
|
|