12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- <?php
- namespace Aws\Api\ErrorParser;
- use Aws\Api\Parser\JsonParser;
- use Aws\Api\Service;
- use Aws\Api\StructureShape;
- use Aws\CommandInterface;
- use Psr\Http\Message\ResponseInterface;
- /**
- * Parses JSON-REST errors.
- */
- class RestJsonErrorParser extends AbstractErrorParser
- {
- use JsonParserTrait;
- private $parser;
- public function __construct(Service $api = null, JsonParser $parser = null)
- {
- parent::__construct($api);
- $this->parser = $parser ?: new JsonParser();
- }
- public function __invoke(
- ResponseInterface $response,
- CommandInterface $command = null
- ) {
- $data = $this->genericHandler($response);
- // Merge in error data from the JSON body
- if ($json = $data['parsed']) {
- $data = array_replace($data, $json);
- }
- // Correct error type from services like Amazon Glacier
- if (!empty($data['type'])) {
- $data['type'] = strtolower($data['type']);
- }
- // Retrieve the error code from services like Amazon Elastic Transcoder
- if ($code = $response->getHeaderLine('x-amzn-errortype')) {
- $colon = strpos($code, ':');
- $data['code'] = $colon ? substr($code, 0, $colon) : $code;
- }
- // Retrieve error message directly
- $data['message'] = isset($data['parsed']['message'])
- ? $data['parsed']['message']
- : (isset($data['parsed']['Message'])
- ? $data['parsed']['Message']
- : null);
- $this->populateShape($data, $response, $command);
- return $data;
- }
- }
|