Initial xentral_oss_20.3.c9ffacf
This commit is contained in:
@@ -0,0 +1,135 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Xentral\Components\HttpClient\Exception;
|
||||
|
||||
use GuzzleHttp\Exception\ClientException as GuzzleClientException;
|
||||
use GuzzleHttp\Exception\ConnectException as GuzzleConnectException;
|
||||
use GuzzleHttp\Exception\GuzzleException;
|
||||
use GuzzleHttp\Exception\ServerException as GuzzleServerException;
|
||||
use GuzzleHttp\Exception\TooManyRedirectsException as GuzzleRedirectsException;
|
||||
use RuntimeException;
|
||||
use Throwable;
|
||||
use Xentral\Components\HttpClient\Request\ClientRequest;
|
||||
use Xentral\Components\HttpClient\Request\ClientRequestInterface;
|
||||
use Xentral\Components\HttpClient\Response\ServerResponse;
|
||||
use Xentral\Components\HttpClient\Response\ServerResponseInterface;
|
||||
|
||||
class TransferErrorException extends RuntimeException implements TransferErrorExceptionInterface
|
||||
{
|
||||
/** @var ClientRequestInterface $request */
|
||||
protected $request;
|
||||
|
||||
/** @var ServerResponseInterface|null $response */
|
||||
protected $response;
|
||||
|
||||
/**
|
||||
* @param string $message
|
||||
* @param int $code
|
||||
* @param Throwable|null $previous
|
||||
* @param ClientRequestInterface|null $request
|
||||
* @param ServerResponseInterface|null $response
|
||||
*/
|
||||
public function __construct(
|
||||
$message = '',
|
||||
$code = 0,
|
||||
Throwable $previous = null,
|
||||
ClientRequestInterface $request = null,
|
||||
ServerResponseInterface $response = null
|
||||
) {
|
||||
parent::__construct($message, $code, $previous);
|
||||
|
||||
if ($request !== null) {
|
||||
$this->request = $request;
|
||||
}
|
||||
if ($response !== null) {
|
||||
$this->response = $response;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param GuzzleException $exception
|
||||
*
|
||||
* @return TransferErrorExceptionInterface
|
||||
*/
|
||||
public static function fromGuzzleException(GuzzleException $exception): TransferErrorExceptionInterface
|
||||
{
|
||||
switch (get_class($exception)) {
|
||||
case GuzzleConnectException::class:
|
||||
$exceptionClass = ConnectionFailedException::class;
|
||||
break;
|
||||
case GuzzleClientException::class: // HTTP 4xx
|
||||
$exceptionClass = ClientErrorException::class;
|
||||
break;
|
||||
case GuzzleServerException::class: // HTTP 5xx
|
||||
$exceptionClass = ServerErrorException::class;
|
||||
break;
|
||||
case GuzzleRedirectsException::class:
|
||||
$exceptionClass = TooManyRedirectsException::class;
|
||||
break;
|
||||
default:
|
||||
$exceptionClass = TransferErrorException::class;
|
||||
break;
|
||||
}
|
||||
|
||||
$self = new $exceptionClass(
|
||||
$exception->getMessage(),
|
||||
$exception->getCode(),
|
||||
$exception
|
||||
);
|
||||
|
||||
// Request anhängen; immer verfügbar
|
||||
$psrRequest = $exception->getRequest();
|
||||
$request = ClientRequest::fromGuzzleRequest($psrRequest);
|
||||
$self->request = $request;
|
||||
|
||||
// Response anhängen; NICHT immer verfügbar
|
||||
if ($exception->hasResponse()) {
|
||||
$psrResponse = $exception->getResponse();
|
||||
$response = ServerResponse::fromGuzzleResponse($psrResponse);
|
||||
$self->response = $response;
|
||||
}
|
||||
|
||||
return $self;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ClientRequestInterface $request
|
||||
* @param ServerResponseInterface $response
|
||||
*
|
||||
* @return TransferErrorExceptionInterface
|
||||
*/
|
||||
public static function fromClientRequest(
|
||||
ClientRequestInterface $request,
|
||||
ServerResponseInterface $response = null
|
||||
): TransferErrorExceptionInterface {
|
||||
$message = sprintf('Error Communicating with Server: %s %s', $request->getMethod(), $request->getUri());
|
||||
|
||||
return new self($message, 0, null, $request, $response);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function hasResponse(): bool
|
||||
{
|
||||
return $this->response !== null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return ServerResponseInterface|null
|
||||
*/
|
||||
public function getResponse(): ?ServerResponseInterface
|
||||
{
|
||||
return $this->response;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return ClientRequestInterface
|
||||
*/
|
||||
public function getRequest(): ClientRequestInterface
|
||||
{
|
||||
return $this->request;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user