public function checkForPermanentRedirect(ProcessEvent $e) { $res = $e->getResponse(); if ($res && $res->getStatusCode() == 301) { throw new PermanentRedirectException('Encountered a permanent redirect while requesting ' . $e->getRequest()->getUrl(), $e->getTransaction()); } }
/** * @internal * @param ProcessEvent $event */ public function handleError(ProcessEvent $event) { if (!($exception = $event->getException())) { return; } $name = $event->getCommand()->getName(); $operation = $event->getClient()->getDescription()->getOperation($name); $errors = $operation->getErrorResponses(); $response = $event->getResponse(); // We iterate through each errors in service description. If the descriptor contains both a phrase and // status code, there must be an exact match of both. Otherwise, a match of status code is enough $bestException = null; foreach ($errors as $error) { $code = (int) $error['code']; if ($response->getStatusCode() !== $code) { continue; } if (isset($error['phrase']) && !($error['phrase'] === $response->getReasonPhrase())) { continue; } $bestException = $error['class']; // If there is an exact match of phrase + code, then we cannot find a more specialized exception in // the array, so we can break early instead of iterating the remaining ones if (isset($error['phrase'])) { break; } } if (null !== $bestException) { throw new $bestException($response->getReasonPhrase(), $event->getTransaction(), $exception); } // If we reach here, no exception could be match from descriptor, and Guzzle exception will propagate }
public function onProcess(ProcessEvent $event) { if ($event->getCommand()->getName() !== 'ReceiveMessage') { return; } $result = $event->getResult(); if (isset($result['Messages'])) { foreach ($result['Messages'] as $message) { if ($message['MD5OfBody'] != md5($message['Body'])) { throw new SqsException('Body MD5 mismatch for ' . var_export($message, true), $event->getTransaction()); } } } }
/** * @internal * * @param ProcessEvent $event */ public function onProcess(ProcessEvent $event) { // Decode the JSON response $data = ''; try { $data = $event->getResponse()->getBody()->getContents(); $json = $event->getResponse()->json(); } catch (\RuntimeException $e) { // Invalid response; make our own error message $json = ['ok' => $data === 'ok', 'error' => $data]; } if (!isset($json['ok']) || $json['ok'] === false) { throw new SlackApiException($json['error'], $event->getTransaction()); } }
public function testHasData() { $command = $this->getMock('GuzzleHttp\\Command\\CommandInterface'); $client = $this->getMock('GuzzleHttp\\Command\\ServiceClientInterface'); $trans = new CommandTransaction($client, $command); $request = new Request('GET', 'http://httbin.org'); $response = new Response(200); $trans->setRequest($request); $trans->setResponse($response); $event = new ProcessEvent($trans); $this->assertSame($command, $event->getCommand()); $this->assertSame($client, $event->getClient()); $this->assertSame($request, $event->getRequest()); $this->assertSame($response, $event->getResponse()); $this->assertSame($trans, $event->getTransaction()); $this->assertNull($event->getResult()); }
/** * Callback for process event. */ public function onProcess(ProcessEvent $event) { $response = $event->getResponse(); // var_dump((string) $event->getRequest()); // var_dump((string) $response); if (!$response) { return; } try { $json = $response->json(); } catch (\RuntimeException $e) { return; } if (NULL === $response || $json['success']) { return; } $command = $event->getCommand(); $message = ''; $this->operation = $this->description->getOperation($command->getName()); // string, // simple array, // assoc array. $errors = $json['errors']; $category = $this->operation->getParam('modelName')->getDefault(); $method = $this->operation->getName(); $suffix = " on {$category} operation { {$method} }"; if (is_string($errors)) { $message = 'Common error: "' . $errors . '"' . $suffix; } elseif (is_array($errors)) { $keys = array_keys($errors); $message = $errors[$keys[0]]; $property = $keys[0]; $alias = $this::getParamBySentAs($keys[0]); if ($alias) { $message = str_replace($property, $alias, $message); } $message = 'Error: "' . $message . '"' . $suffix; } $e = new NpErrorException($message, $event->getTransaction()); $e->setCategory($category); $e->setVerboseMessage($message); throw $e; }
public function onProcess(ProcessEvent $event) { $response = $event->getResponse(); if (!$response) { return; } try { $xml = $response->xml(); } catch (\RuntimeException $e) { return; } $eanError = $xml->EanError ?: $xml->EanWsError; if ($eanError) { $e = new EanErrorException((string) $eanError->presentationMessage, $event->getTransaction()); $e->setHandling((string) $eanError->handling); $e->setCategory((string) $eanError->category); $e->setVerboseMessage((string) $eanError->verboseMessage); $e->setItineraryId((string) $eanError->itineraryId); throw $e; } }