mirror of
https://github.com/OpenXE-org/OpenXE.git
synced 2025-02-22 17:19:24 +01:00
80 lines
2.2 KiB
PHP
80 lines
2.2 KiB
PHP
<?php
|
|
namespace Aws\S3;
|
|
|
|
use Aws\Api\Parser\AbstractParser;
|
|
use Aws\Api\Parser\Exception\ParserException;
|
|
use Aws\Api\StructureShape;
|
|
use Aws\CommandInterface;
|
|
use Aws\Exception\AwsException;
|
|
use Psr\Http\Message\ResponseInterface;
|
|
use Psr\Http\Message\StreamInterface;
|
|
|
|
/**
|
|
* Converts errors returned with a status code of 200 to a retryable error type.
|
|
*
|
|
* @internal
|
|
*/
|
|
class AmbiguousSuccessParser extends AbstractParser
|
|
{
|
|
private static $ambiguousSuccesses = [
|
|
'UploadPart' => true,
|
|
'UploadPartCopy' => true,
|
|
'CopyObject' => true,
|
|
'CompleteMultipartUpload' => true,
|
|
];
|
|
|
|
/** @var callable */
|
|
private $errorParser;
|
|
/** @var string */
|
|
private $exceptionClass;
|
|
|
|
public function __construct(
|
|
callable $parser,
|
|
callable $errorParser,
|
|
$exceptionClass = AwsException::class
|
|
) {
|
|
$this->parser = $parser;
|
|
$this->errorParser = $errorParser;
|
|
$this->exceptionClass = $exceptionClass;
|
|
}
|
|
|
|
public function __invoke(
|
|
CommandInterface $command,
|
|
ResponseInterface $response
|
|
) {
|
|
if (200 === $response->getStatusCode()
|
|
&& isset(self::$ambiguousSuccesses[$command->getName()])
|
|
) {
|
|
$errorParser = $this->errorParser;
|
|
try {
|
|
$parsed = $errorParser($response);
|
|
} catch (ParserException $e) {
|
|
$parsed = [
|
|
'code' => 'ConnectionError',
|
|
'message' => "An error connecting to the service occurred"
|
|
. " while performing the " . $command->getName()
|
|
. " operation."
|
|
];
|
|
}
|
|
if (isset($parsed['code']) && isset($parsed['message'])) {
|
|
throw new $this->exceptionClass(
|
|
$parsed['message'],
|
|
$command,
|
|
['connection_error' => true]
|
|
);
|
|
}
|
|
}
|
|
|
|
$fn = $this->parser;
|
|
return $fn($command, $response);
|
|
}
|
|
|
|
public function parseMemberFromStream(
|
|
StreamInterface $stream,
|
|
StructureShape $member,
|
|
$response
|
|
) {
|
|
return $this->parser->parseMemberFromStream($stream, $member, $response);
|
|
}
|
|
}
|