parser = $parser; $this->baseNamespace = $baseNamespace; $this->defaultException = $defaultException; } /** * {@inheritdoc} */ public function fromResponse(RequestInterface $request, Response $response) { $parts = $this->parser->parse($request, $response); // Removing leading 'AWS.' and embedded periods $className = $this->baseNamespace . '\\' . str_replace(array('AWS.', '.'), '', $parts['code']); if (substr($className, -9) !== 'Exception') { $className .= 'Exception'; } $className = class_exists($className) ? $className : $this->defaultException; return $this->createException($className, $request, $response, $parts); } /** * Create an prepare an exception object * * @param string $className Name of the class to create * @param RequestInterface $request Request * @param Response $response Response received * @param array $parts Parsed exception data * * @return \Exception */ protected function createException($className, RequestInterface $request, Response $response, array $parts) { $class = new $className($parts['message']); if ($class instanceof ServiceResponseException) { $class->setExceptionCode($parts['code']); $class->setExceptionType($parts['type']); $class->setResponse($response); $class->setRequest($request); $class->setRequestId($parts['request_id']); } return $class; } }